
    =iY                        d Z ddlZddlmc mZ ddlZddl	Z	ddl
mZ  ee      j                  j                  Zej                  j!                  dedz        Zg ZdZeeuZeZerej,                  ZdZeeuZeZesB ej4                  defdeef      d ej6                         v s ej8                  e      r ej:                  e      nd ej:                  e      d	z  Zd
deiz  ZejA                  e       er ej4                  defdeef      d ej6                         v s ej8                  e      r ej:                  e      nd ej:                  e       ej:                  e      dz  Z!dde!iz  Z"ejA                  e"        ejF                  ed      i z  Z$dde$iz  Z% e& ejN                  e%            dxZxZxZxZxZxZZej                  jQ                  e      Z)e)e	jT                  d<   ej,                  jW                  e)       e)jX                  Z,e)jZ                  Z-e)j\                  Z.e)j^                  Z/e)j`                  Z0 G d d      Z1 G d d      Z2 G d d      Z3 G d d      Z4 G d d      Z5 G d d      Z6y)u   hook_scorer.py 단위 테스트    N)Pathhook_scorerzhook_scorer.py)is not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16zassert %(py19)spy19c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestDetectEmotionsc                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u0   분노 키워드 포함 텍스트 → anger=TrueuB   이게 말이 됩니까? 도대체 왜 이러면 안 되는 건지angerTisz%(py1)s is %(py4)spy1py4assert %(py6)spy6Ndetect_emotions
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationselftextresult@py_assert0@py_assert3@py_assert2@py_format5@py_format7s           >/home/jay/workspace/content-pipeline/tests/test_hook_scorer.pytest_detect_angerz$TestDetectEmotions.test_detect_anger   s_    S &g&$&$&&&&$&&&&&&$&&&&&&&    c                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u,   놀라움 키워드 포함 → surprise=Trueu,   진짜? 이게 실화냐 완전 충격이다surpriseTr   r   r   r   r   Nr   r"   s           r+   test_detect_surprisez'TestDetectEmotions.test_detect_surprise   sc    = &j!)T)!T))))!T)))!)))T)))))))r-   c                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u(   공감 키워드 포함 → empathy=Trueu*   나도 겪어본 적 있어. 공감 백배empathyTr   r   r   r   r   Nr   r"   s           r+   test_detect_empathyz&TestDetectEmotions.test_detect_empathy$   sc    ; &i (D( D(((( D((( (((D(((((((r-   c                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u(   두려움 키워드 포함 → fear=Trueu3   안 하면 진짜 큰일 나고 모르면 손해다fearTr   r   r   r   r   Nr   r"   s           r+   test_detect_fearz#TestDetectEmotions.test_detect_fear*   s_    D &f~%%~%%%%~%%%~%%%%%%%%%%r-   c                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)
u-   호기심 키워드 포함 → curiosity=Trueu+   아무도 안 알려주는 비밀이 있다	curiosityTr   r   r   r   r   Nr   r"   s           r+   test_detect_curiosityz(TestDetectEmotions.test_detect_curiosity0   sc    < &k"*d*"d****"d***"***d*******r-   c                    d}t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d
   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d	x}x}}y	)u2   감정 없는 평범한 텍스트 → 모두 Falseu8   오늘 날씨가 맑습니다. 기온은 20도입니다.r   Fr   r   r   r   r   Nr/   r2   r5   r8   r   r"   s           r+   test_no_emotionsz#TestDetectEmotions.test_no_emotions6   s   I &g'%'%''''%''''''%'''''''j!*U*!U****!U***!***U*******i )E) E)))) E))) )))E)))))))f~&&~&&&&~&&&~&&&&&&&&&&k"+e+"e++++"e+++"+++e+++++++r-   N)	__name__
__module____qualname__r,   r0   r3   r6   r9   r;    r-   r+   r   r      s     '*)&+,r-   r   c                       e Zd Zd Zd Zy)TestMinEmotionsc                 <   d}t        |      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||k\  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u3   2개 이상 감정 포함 → has_min_emotions=TrueuF   도대체 왜 이러면 안 되는 건지, 안 하면 진짜 큰일남Tr   z8%(py2)s
{%(py2)s = %(py0)s.has_min_emotions
} is %(py5)sr%   py0r   r   assert %(py7)sr	   N   )>=)z5%(py2)s
{%(py2)s = %(py0)s.emotion_count
} >= %(py5)sscorehas_min_emotionsr   r   @py_builtinslocals_should_repr_global_namer   r    r!   emotion_countr#   r$   r%   @py_assert1@py_assert4r'   @py_format6@py_format8s           r+   test_min_two_emotions_passz*TestMinEmotions.test_min_two_emotions_passD   s     Xt&&.$.&$....&$......v...v...&...$.......##(q(#q((((#q((((((v(((v(((#(((q(((((((r-   c                 <   d}t        |      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||k  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u0   1개만 감정 포함 → has_min_emotions=FalseuH   나도 그런 경험이 있었어. 정말 공감이 가는 이야기야.Fr   rC   r%   rD   rF   r	   NrG   <z4%(py2)s
{%(py2)s = %(py0)s.emotion_count
} < %(py5)srI   rP   s           r+   test_min_two_emotions_failz*TestMinEmotions.test_min_two_emotions_failL   s     Zt&&/%/&%////&%//////v///v///&///%///////##'a'#a''''#a''''''v'''v'''#'''a'''''''r-   N)r<   r=   r>   rU   rZ   r?   r-   r+   rA   rA   C   s    )(r-   rA   c                       e Zd Zd Zd Zy)TestNumberPatternsc                 d   t        d      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}}y	)
uB   '47,382명' 같은 구체적 숫자 → has_non_round_numbers=Trueu7   아직도 모르는 설계사가 47,382명이나 된다Tr   z%(py0)s is %(py3)sr%   rE   py3assert %(py5)sr   N)	check_non_round_numbersr   r   rL   rM   rN   r   r    r!   r#   r%   r(   rQ   @py_format4rS   s         r+   test_non_round_numberz(TestNumberPatterns.test_non_round_numberX   se    ()bcv~vvvr-   c                 d   t        d      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}}y	)
u=   '약 5만' 같은 라운드 숫자 → has_round_numbers=Trueu#   약 5만 명이 영향을 받는다Tr   r^   r%   r_   ra   r   N)	check_round_numbersr   r   rL   rM   rN   r   r    r!   rc   s         r+   test_round_number_warningz,TestNumberPatterns.test_round_number_warning]   se    $%JKv~vvvr-   N)r<   r=   r>   re   rh   r?   r-   r+   r\   r\   W   s    
r-   r\   c                       e Zd Zd Zd Zy)TestCompanyMentionsc                 6   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}d
}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u2   '삼성생명' 포함 → has_company_mention=TrueuF   삼성생명 상품이 바뀌었다는데 진짜? 안 하면 큰일남Tr   z;%(py2)s
{%(py2)s = %(py0)s.has_company_mention
} is %(py5)sr%   rD   rF   r	   Nu   삼성)in)z;%(py1)s in %(py5)s
{%(py5)s = %(py3)s.mentioned_companies
})r   r`   r   rJ   has_company_mentionr   r   rL   rM   rN   r   r    r!   mentioned_companies)	r#   r%   rQ   rR   r'   rS   rT   r&   r(   s	            r+   test_company_mentionz(TestCompanyMentions.test_company_mentionf   s    _`))1T1)T1111)T111111v111v111)111T111111156555x55555x5555x5555556555655555555555r-   c                 8   t        d      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }g }||k(  }|st        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u.   회사명 없음 → has_company_mention=FalseuC   수수료 구조가 바뀌었다는데 진짜? 안 하면 큰일남Fr   rl   r%   rD   rF   r	   N==)z;%(py2)s
{%(py2)s = %(py0)s.mentioned_companies
} == %(py5)srn   )r#   r%   rQ   rR   r'   rS   rT   s          r+   test_no_company_mentionz+TestCompanyMentions.test_no_company_mentionl   s    \]))2U2)U2222)U222222v222v222)222U2222222))/R/)R////)R//////v///v///)///R///////r-   N)r<   r=   r>   rq   ru   r?   r-   r+   rj   rj   e   s    60r-   rj   c                       e Zd Zd Zd Zy)TestLengthCheckc                 <   d}t        |      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u'   500자 이내 → is_within_length=Trueu  가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가Tr   z8%(py2)s
{%(py2)s = %(py0)s.is_within_length
} is %(py5)sr%   rD   rF   r	   Ni  rs   z2%(py2)s
{%(py2)s = %(py0)s.char_count
} == %(py5)srJ   is_within_lengthr   r   rL   rM   rN   r   r    r!   
char_countrP   s           r+   test_within_lengthz"TestLengthCheck.test_within_lengthv   s    t&&.$.&$....&$......v...v...&...$.......  'C' C'''' C''''''v'''v''' '''C'''''''r-   c                 <   d}t        |      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u(   501자 이상 → is_within_length=Falseu  가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가가Fr   ry   r%   rD   rF   r	   Ni  rs   rz   r{   rP   s           r+   test_over_lengthz TestLengthCheck.test_over_length}   s    t&&/%/&%////&%//////v///v///&///%///////  'C' C'''' C''''''v'''v''' '''C'''''''r-   N)r<   r=   r>   r~   r   r?   r-   r+   rw   rw   u   s    ((r-   rw   c                       e Zd Zd Zd Zy)TestScoreResultc                 V   d}t        |      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)uC   2감정 이상, 회사 언급 없음, 500자 이내 → passed=Trueuo   도대체 왜 이런 제도가 바뀌는지, 안 하면 진짜 큰일남. 아직 모르는 사람이 많다니.Tr   rC   r%   rD   rF   r	   NFrl   ry   z.%(py2)s
{%(py2)s = %(py0)s.passed
} is %(py5)s)rJ   rK   r   r   rL   rM   rN   r   r    r!   ro   r|   passedrP   s           r+   test_score_passzTestScoreResult.test_score_pass   s    At&&.$.&$....&$......v...v...&...$.......))2U2)U2222)U222222v222v222)222U2222222&&.$.&$....&$......v...v...&...$.......}}$$}$$$$}$$$$$$v$$$v$$$}$$$$$$$$$$r-   c                 <   d}t        |      }|j                  }d}||k  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  }d
}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u   1감정만 → passed=Falseu7   나도 공감이 가는 이야기야. 정말 그렇지.rG   rW   rY   r%   rD   rF   r	   NFr   r   )rJ   rO   r   r   rL   rM   rN   r   r    r!   r   rP   s           r+   test_score_fail_one_emotionz+TestScoreResult.test_score_fail_one_emotion   s    Ht##'a'#a''''#a''''''v'''v'''#'''a'''''''}}%%}%%%%}%%%%%%v%%%v%%%}%%%%%%%%%%r-   N)r<   r=   r>   r   r   r?   r-   r+   r   r      s    %&r-   r   )7__doc__builtinsrL   _pytest.assertion.rewrite	assertionrewriter   importlib.util	importlibsyspathlibr   __file__parentPIPELINE_DIRutilspec_from_file_locationr   rQ   rR   r'   r&   loader@py_assert10@py_assert13@py_assert12r   rM   rN   r   rS   rT   append@py_format15@py_format17_format_boolop@py_format18@py_format20r    r!   module_from_specr   modulesexec_moduler   rb   rg   check_company_mentionsrJ   r   rA   r\   rj   rw   r   r?   r-   r+   <module>r      s   %     
  H~$$++~~--m\L\=\] 34 3t4 3DKK 3t 3Kt3 3 3 3t4 3 3 3 3 3t 3 3 3t 3 3 34 3 3 3 3 3 3 3Kt 3 3 3 3 3D 3 3 3D 3 3 3K 3 3t 3 3 3 3 3 3 3 3 3 3 3 3 3nn--d3(M     $--%== !55 $;; 
', ',X( ((	 	0 0 ( ($& &r-   