
    $<i(                        d Z ddlZddlZddlmZ ddlmZmZ  ee	      j                  j                  Zej                  j                  dedz        Zeej                  J ej                  j!                  e      Zeej$                  d<   ej                  j'                  e       dZ e       Zee_        eej$                  e<   ej                  j                  e ded	z  g 
      Zeej                  J ej                  j!                  e      Zee_        eej$                  e d<   eej$                  d<   ej                  j'                  e       ej2                  Zej4                  Zej6                  Zej8                  Zej:                  Z G d d      Z G d d      Z G d d      Z  G d d      Z! G d d      Z"y)u    auto_approve.py 단위 테스트    N)Path)	MagicMockpatchhook_scorerzhook_scorer.pycontent_pipeline_pkgz.auto_approvezauto_approve.py)submodule_search_locationsz.hook_scorerauto_approvec                       e Zd Zd Zd Zd Zy)TestCheckCopyrightSafec                 "    t        d      du sJ y)u   '자체 작성' → True   자체 작성TNcheck_copyright_safeselfs    Y/home/jay/workspace/.worktrees/task-2057-dev2/content-pipeline/tests/test_auto_approve.pytest_check_copyright_safe_passz5TestCheckCopyrightSafe.test_check_copyright_safe_pass2   s    #O4<<<    c                 "    t        d      du sJ y)u   '블로그 복사' → Falseu   블로그 복사FNr   r   s    r   test_check_copyright_safe_failz5TestCheckCopyrightSafe.test_check_copyright_safe_fail6   s    #$675@@@r   c                 "    t        d      du sJ y)u!   '금융감독원 공시' → Trueu   금융감독원 공시TNr   r   s    r   test_check_copyright_safe_govz4TestCheckCopyrightSafe.test_check_copyright_safe_gov:   s    #$<=EEEr   N)__name__
__module____qualname__r   r   r    r   r   r   r   1   s    =AFr   r   c                       e Zd Zd Zd Zy)TestCheckBlacklistc                 >    d}t        |      \  }}|du sJ |g k(  sJ y)u0   정상 텍스트 → 통과(True), 위반 없음u1   수수료 구조가 바뀐다는 소식입니다.TN)check_blacklistr   textpassed
violationss       r   test_check_blacklist_clearz-TestCheckBlacklist.test_check_blacklist_clearB   s0    B,T2
~~Rr   c                 P    d}t        |      \  }}|du sJ t        |      dkD  sJ y)uE   블랙리스트 키워드('삼성생명') 포함 → 미통과(False)u#   삼성생명 상품이 최악이다Fr   N)r    lenr!   s       r   test_check_blacklist_violationz1TestCheckBlacklist.test_check_blacklist_violationI   s4    4,T2
:"""r   N)r   r   r   r%   r(   r   r   r   r   r   A   s     #r   r   c                       e Zd Zd Zd Zy)TestCheckTemplateMatchc                 8    d}t        |      \  }}|du sJ |J y)uI   tpl-01 required_keywords('수수료', '변화') 포함 텍스트 → Trueu;   수수료 구조의 변화가 업계를 강타하고 있다TNcheck_template_matchr   r"   matchedtpl_ids       r   test_check_template_matchz0TestCheckTemplateMatch.test_check_template_matchT   s-    L.t4$!!!r   c                 8    d}t        |      \  }}|du sJ |J y)u4   템플릿 키워드와 무관한 텍스트 → FalseuB   오늘 점심은 김치찌개를 먹었습니다. 맛있었어요.FNr,   r.   s       r   test_check_template_no_matchz3TestCheckTemplateMatch.test_check_template_no_match[   s-    S.t4%~~r   N)r   r   r   r1   r3   r   r   r   r*   r*   S   s    "r   r*   c                       e Zd Zd Zy)TestCheckNoDuplicatec                     d}t        j                  t        dt                     5  t	        |      \  }}ddd       du sJ J y# 1 sw Y   xY w)u>   최근 기록이 없는 새 콘텐츠 → True (중복 아님)u1   완전히 새로운 고유한 콘텐츠 XYZ_99999_load_recent_hashesreturn_valueNT)r   objectr	   setcheck_no_duplicate)r   r"   r#   dup_hashs       r   test_check_no_duplicate_freshz2TestCheckNoDuplicate.test_check_no_duplicate_freshf   sV    B\\,(=CER 	81$7FH	8~~	8 	8s   A		AN)r   r   r   r>   r   r   r   r5   r5   e   s     r   r5   c                       e Zd Zd Zd Zd Zy)TestApprovec                     dddgdgS )u1   테스트용 인메모리 템플릿 목록 반환ztpl-testu	   수수료u   변화)idrequired_keywordsr   r   s    r   _make_templateszTestApprove._make_templatess   s     !&18%<
 	
r   c                    d}t        j                  t        d| j                               5  t        j                  t        dt	                     5  t        |d      }ddd       ddd       j                  du sJ |j                  du sJ |j                  du sJ |j                  du sJ |j                  du sJ y# 1 sw Y   bxY w# 1 sw Y   fxY w)	u(   모든 조건 통과 → all_passed=Trueua   수수료 구조의 변화, 도대체 왜 이러는지 모르겠다. 안 하면 진짜 큰일남._load_templatesr8   r7   r   sourceNT)r   r:   r	   rD   r;   approvecondition_2_copyright_safecondition_3_hook_passcondition_4_blacklist_clearcondition_5_no_duplicate
all_passedr   r"   results      r   test_approve_all_passz!TestApprove.test_approve_all_pass|   s     sLL'8tG[G[G]^	;LL'<35Q	; T/:F		; 	; 00D888++t33311T999..$666  D(((	; 	; 	; 	;s#   %CC CC
	CCc                 R   d}t        j                  t        d| j                               5  t        j                  t        dt	                     5  t        |d      }ddd       ddd       j                  du sJ |j                  du sJ y# 1 sw Y   2xY w# 1 sw Y   6xY w)	u>   블랙리스트 저촉 → all_passed=False, condition_4=Falseuh   수수료 변화: 삼성생명 관련 안내입니다. 도대체 왜 이러는지, 안 하면 큰일남.rF   r8   r7   r   rG   NF)r   r:   r	   rD   r;   rI   rL   rN   rO   s      r   test_approve_blacklist_failz'TestApprove.test_approve_blacklist_fail   s    yLL'8tG[G[G]^	;LL'<35Q	; T/:F		; 	; 11U:::  E)))	; 	; 	; 	;s#   %BB BB	BB&N)r   r   r   rD   rQ   rS   r   r   r   r@   r@   r   s    
) 
*r   r@   )#__doc__importlib.util	importlibsyspathlibr   unittest.mockr   r   __file__parentPIPELINE_DIRutilspec_from_file_locationspec_hsloadermodule_from_specr   modulesexec_module	_pkg_namepkg_mockspec_aar	   __package__r   r    r-   r<   rI   r   r   r*   r5   r@   r   r   r   <module>rh      s   &  
  *H~$$++ ..
0
0<"22 w~~9 99nn--g6(M    ; ' #	;" !I  ..
0
0k$$! 1 
 w~~9 99~~..w7$  +6yk& '*N    < ( $88 ..#88 !44 



F F # #$ $   $* $*r   