
    `i                         d Z ddlZddlmc mZ ddlmZm	Z	 ddl
Z
ddlmZmZmZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Zy)u   summarizer 모듈 테스트    N)	MagicMockpatch)YOUTUBE_SUMMARY_PROMPTSummaryResultgenerate_embeddinggenerate_summaryc                       e Zd Zd Zy)TestSummaryResultc                 <   t        dd      }|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 )Nu   요약T)summary_texthas_numeric_warnings==z4%(py2)s
{%(py2)s = %(py0)s.summary_text
} == %(py5)sresultpy0py2py5assert %(py7)spy7isz<%(py2)s
{%(py2)s = %(py0)s.has_numeric_warnings
} is %(py5)s)r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   )selfr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s          M/home/jay/projects/insuwiki/scripts/youtube-pipeline/tests/test_summarizer.pytest_dataclass_fieldsz'TestSummaryResult.test_dataclass_fields   s    H4P"".h."h...."h......v...v..."...h.......**2d2*d2222*d222222v222v222*222d2222222    N)__name__
__module____qualname__r*    r+   r)   r
   r
      s    3r+   r
   c                   |    e Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zy)TestGenerateSummaryz'youtube_pipeline.summarizer._init_genaic                    t               }t               }d|_        ||j                  _        ||_        t	        d      }t        |t              }|sddt        j                         v st        j                  t
              rt        j                  t
              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }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}	}|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 )Nu2   ## 1. 핵심 요약
보험 관련 내용입니다.u   테스트 자막 내용z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r   )r   py1r   py4   핵심 요약in)z4%(py1)s in %(py5)s
{%(py5)s = %(py3)s.summary_text
})r4   py3r   r   r   Fr   r   r   )r   textgenerate_contentreturn_valuer   r3   r   r   r   r   r   r    r!   r"   r   r   r   )r#   	mock_init
mock_modelmock_responser   r&   @py_format5@py_assert0r%   @py_assert2r'   r(   r$   s                r)   test_returns_summary_resultz/TestGenerateSummary.test_returns_summary_result   s   [
!R3@
##0!+	!";<&-00000000z000z000000&000&000000-000-00000000005&"5"55"55555"5555555555&555&555"55555555**3e3*e3333*e333333v333v333*333e3333333r+   c                    t               }t               }d|_        ||j                  _        ||_        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}}y )
Nu3   보험료가 30만원이고 환급률 80%입니다.	   테스트Tr   r   r   r   r   r   )r   r:   r;   r<   r   r   r   r   r   r   r   r    r!   r"   )
r#   r=   r>   r?   r   r$   r%   r&   r'   r(   s
             r)   test_detects_numeric_warningsz1TestGenerateSummary.test_detects_numeric_warnings$   s    [
!R3@
##0!+	!+.**2d2*d2222*d222222v222v222*222d2222222r+   c                 X   t               }t        d      t        d      g|j                  _        ||_        t        d      5  t        d      }d d d        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 # 1 sw Y   xY w)Nz
rate limitu   성공한 요약)r:   &youtube_pipeline.summarizer.time.sleeprE   r   r   r   r   r   r   )r   	Exceptionr;   side_effectr<   r   r   r   r   r   r   r   r   r    r!   r"   )	r#   r=   r>   r   r$   r%   r&   r'   r(   s	            r)   test_retries_on_failurez+TestGenerateSummary.test_retries_on_failure/   s    [
l#-.3

##/ ",	;< 	3%k2F	3""8&88"&88888"&8888888v888v888"888&88888888	3 	3s   D  D)c                    t               }t        d      |j                  _        ||_        t        d      5  t        j                  t        d      5  t        d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzpersistent errorrH   u   최대 재시도 초과)matchrE   )
r   rI   r;   rJ   r<   r   pytestraisesRuntimeErrorr   )r#   r=   r>   s      r)   test_raises_after_max_retriesz1TestGenerateSummary.test_raises_after_max_retries<   st    [
2;<N2O
##/!+	;< 	.|3LM . -.	. 	.. .	. 	.s#   A<A0A<0A9	5A<<BN)r,   r-   r.   r   rC   rF   rK   rQ   r/   r+   r)   r1   r1      sh    
45
4 6
4 453 63 45
9 6
9 45. 6.r+   r1   c                   p    e Zd Z ed       ed      d               Z ed       ed      d               Zy)TestGenerateEmbeddingz/youtube_pipeline.summarizer.genai.embed_contentz+youtube_pipeline.summarizer.genai.configurec                    ddgdz  i|_         t        d      }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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 |D        }	t        |	      }
|
sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      t        j                  |
      dz  }t        t        j                  |            d x}	}
y )N	embedding皙?   u   테스트 텍스트r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   )r   r4   r9   py6zassert %(py8)spy8c              3   <   K   | ]  }t        |t                y w)N)r3   float).0vs     r)   	<genexpr>zDTestGenerateEmbedding.test_returns_embedding_list.<locals>.<genexpr>N   s     8A:a'8s   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)r   r   r5   )r<   r   rX   r   r   r   r   r   r    r!   r"   r`   )r#   mock_configure
mock_embedr   rB   @py_assert5r%   @py_format7@py_format9r$   r&   r@   s               r)   test_returns_embedding_listz1TestGenerateEmbedding.test_returns_embedding_listH   s    $/"<
#$9:6{!c!{c!!!!{c!!!!!!s!!!s!!!!!!6!!!6!!!{!!!c!!!!!!!888s888888888s888s88888888888888r+   c                    ddgdz  i|_         ddz  }t        |       |j                  }|j                  }|j                  }d}|d   }|j                  }	d}
d} |	|
|      } |||      }t        |      }d	}||k  }|st        j                  d
|fd||f      dt        j                         v st        j                  t
              rt        j                  t
              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |	      t        j                  |
      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}x}	x}
x}x}x}x}x}}y )NrU   rV   rW   xi'  content    i@  )<=)z%(py21)s
{%(py21)s = %(py0)s(%(py19)s
{%(py19)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.kwargs
}.get
}(%(py7)s, %(py17)s
{%(py17)s = %(py11)s
{%(py11)s = %(py9)s.get
}(%(py13)s, %(py15)s)
})
})
} <= %(py24)srX   	call_args)r   r4   r9   r   r   py9py11py13py15py17py19py21py24zassert %(py26)spy26)r<   r   rm   kwargsgetrX   r   r   r   r   r   r    r!   r"   )r#   ra   rb   	long_textrm   rB   r%   @py_assert6@py_assert8@py_assert10@py_assert12@py_assert14@py_assert16@py_assert18@py_assert20@py_assert23@py_assert22@py_format25@py_format27s                      r)   test_truncates_long_textz.TestGenerateEmbedding.test_truncates_long_textP   sy    $/"<
%K	9%((	  	
 $$	
%.	
09!	
0<0@0@	
AJ	
LN	
0@B0O	
$Y0OP	
PQ	
	
Q	
 	
 	
Q	
 	
 
6	
 	
  	
 	
 
	 	
 	
 
6	
 	
  	
 	
 
	 	
 	
 
	 !	
 	
 
	 %	
 	
 
	 &/	
 	
 
	 1=	
 	
 
	 1A	
 	
 
	 BK	
 	
 
	 MO	
 	
 
	 1P	
 	
 
	 Q	
 	
 
	 R	
 	
 
	 	
 	
 	
 	
 	
 	
 	
 	
 	
r+   N)r,   r-   r.   r   rf   r   r/   r+   r)   rS   rS   G   sP    
<=
899 : >9 <=
89
 : >
r+   rS   c                       e Zd Zd Zy)TestSummaryPromptc                    d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d	}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d
}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}y )Nr6   r7   )z%(py1)s in %(py3)sr   )r4   r9   zassert %(py5)sr   u	   설계사u   약관u   수치)	r   r   r   r    r   r   r   r!   r"   )r#   rA   rB   @py_format4r'   s        r)   test_contains_key_sectionsz,TestSummaryPrompt.test_contains_key_sections^   sv   8"88888"8888888888"8888"888888884{44444{4444{4444444444444444441x11111x1111x1111111111111111111x11111x1111x111111111111111111r+   N)r,   r-   r.   r   r/   r+   r)   r   r   ]   s    2r+   r   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   unittest.mockr   r   rN   youtube_pipeline.summarizerr   r   r   r   r
   r1   rS   r   r/   r+   r)   <module>r      sF    !    *  3 3.. ..b
 
,2 2r+   