
    `ih                         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mZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Zy)u"   transcriber 모듈 테스트 (TDD)    N)	MagicMockpatch)TranscriptResult_parse_innertube_transcriptfetch_whisper_transcriptionfetch_youtube_captionsmake_title_description_fallback
transcribec                       e Zd Zd Zd Zy)TestTranscriptResultc                    t        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}}|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}||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 )Ntestyoutube_captionkotextsourcelanguage==z,%(py2)s
{%(py2)s = %(py0)s.text
} == %(py5)sresultpy0py2py5assert %(py7)spy7z.%(py2)s
{%(py2)s = %(py0)s.source
} == %(py5)s)z0%(py2)s
{%(py2)s = %(py0)s.language
} == %(py5)s)r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   r   selfr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s          N/home/jay/projects/insuwiki/scripts/youtube-pipeline/tests/test_transcriber.pytest_dataclass_fieldsz*TestTranscriptResult.test_dataclass_fields   s]   !v6GRVW{{$f${f$$$${f$$$$$$v$$$v$$${$$$f$$$$$$$}}1 11} 11111} 1111111v111v111}111 11111111&$&$&&&&$&&&&&&v&&&v&&&&&&$&&&&&&&    c                 :   t        d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                  }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 )Nr   whisper_sttr   r   is)z0%(py2)s
{%(py2)s = %(py0)s.language
} is %(py5)sr   r   r   r   )z4%(py2)s
{%(py2)s = %(py0)s.caption_type
} is %(py5)s)r   r   r    r!   r"   r#   r$   r%   r&   r'   caption_typer(   s          r/   !test_optional_fields_default_nonez6TestTranscriptResult.test_optional_fields_default_none   s    !vmD&$&$&&&&$&&&&&&v&&&v&&&&&&$&&&&&&&""*d*"d****"d******v***v***"***d*******r1   N)__name__
__module____qualname__r0   r8    r1   r/   r   r      s    '+r1   r   c                       e Zd Zd Zy) TestMakeTitleDescriptionFallbackc                    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}}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}}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 )Nu   테스트 제목u   테스트 설명title_descriptionr   r   r   r   r   r   inz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.text
}py1py3r   )r	   r   r    r!   r"   r#   r$   r%   r&   r'   r   )	r)   r   r*   r+   r,   r-   r.   @py_assert0@py_assert2s	            r/   test_creates_fallback_textz;TestMakeTitleDescriptionFallback.test_creates_fallback_text   sa   01CEWX}}3 33} 33333} 3333333v333v333}333 33333333!0V[[0![0000![000!000000V000V000[0000000!0V[[0![0000![000!000000V000V000[0000000r1   N)r9   r:   r;   rI   r<   r1   r/   r>   r>      s    1r1   r>   c                   D    e Zd Z ed      d        Z ed      d        Zy)TestFetchYoutubeCaptions*youtube_pipeline.transcriber.requests.postc                    t        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 )	Nznetwork errortest_idr5   z%(py0)s is %(py3)sr   r   rF   assert %(py5)sr   )	Exceptionside_effectr   r    r!   r"   r#   r$   r%   r&   r'   r)   	mock_postr   rH   r*   @py_format4r-   s          r/   test_returns_none_on_failurez5TestFetchYoutubeCaptions.test_returns_none_on_failure'   sq     )/ :	'	2v~vvvr1   c                    t               }d|_        i |j                  _        ||_        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 )	N   rN   r5   rO   r   rP   rQ   r   )r   status_codejsonreturn_valuer   r    r!   r"   r#   r$   r%   r&   r'   )r)   rU   	mock_respr   rH   r*   rV   r-   s           r/   #test_returns_none_on_empty_responsez<TestFetchYoutubeCaptions.test_returns_none_on_empty_response-   s    K	 #	&(	#!*	'	2v~vvvr1   N)r9   r:   r;   r   rW   r^   r<   r1   r/   rK   rK   &   s4    
78 9
 78 9r1   rK   c                   D    e Zd Z ed      d        Z ed      d        Zy)TestFetchWhisperTranscriptionrL   c                    t               }d|_        ddd|j                  _        ||_        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}}|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}||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 )NrY   u   전사된 텍스트whisper_local_ytdlpr4   rN   )is not)z%(py0)s is not %(py3)sr   rP   rQ   r   r   r   r   r   r   r3   r   )r   rZ   r[   r\   r   r    r!   r"   r#   r$   r%   r&   r'   r   r   )r)   rU   r]   r   rH   r*   rV   r-   r+   r,   r.   s              r/   test_successz*TestFetchWhisperTranscription.test_success8   sp   K	 #	)+'
	# "+	,Y7!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!{{333{33333{3333333v333v333{33333333333}}--}----}------v---v---}----------r1   c                    t        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 )	Nzconnection refusedrN   r5   rO   r   rP   rQ   r   )rR   rS   r   r    r!   r"   r#   r$   r%   r&   r'   rT   s          r/   test_failure_returns_nonez7TestFetchWhisperTranscription.test_failure_returns_noneF   sr     )*> ?	,Y7v~vvvr1   N)r9   r:   r;   r   rd   rf   r<   r1   r/   r`   r`   7   s4    
78. 9. 78 9r1   r`   c                       e Zd Z ed       ed      d               Z ed       ed      d               Z ed       ed      d               Zy)TestTranscribez8youtube_pipeline.transcriber.fetch_whisper_transcriptionz3youtube_pipeline.transcriber.fetch_youtube_captionsc                    t        ddd      |_        t        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}}|j                          y )Nu   자막 텍스트r   r   r   vid1   제목   설명r   r   r   r   r   r   )r   r\   r
   r   r    r!   r"   r#   r$   r%   r&   r'   assert_not_called	r)   mock_captionsmock_whisperr   r*   r+   r,   r-   r.   s	            r/   test_youtube_caption_priorityz,TestTranscribe.test_youtube_caption_priorityN   s     &6#,=&
" FHh7}}1 11} 11111} 1111111v111v111}111 11111111&&(r1   c                    d |_         t        dd      |_         t        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 )Nu   Whisper 전사r3   r4   rj   rk   rl   r   r   r   r   r   r   )r\   r   r
   r   r    r!   r"   r#   r$   r%   r&   r'   rn   s	            r/   test_whisper_fallbackz$TestTranscribe.test_whisper_fallbackX   s     &*"$4!-%
! FHh7}}--}----}------v---v---}----------r1   c                 X   d |_         d |_         t        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}}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 )Nrj   rk   rl   r@   r   r   r   r   r   r   rA   rC   rD   )r\   r
   r   r    r!   r"   r#   r$   r%   r&   r'   r   )r)   ro   rp   r   r*   r+   r,   r-   r.   rG   rH   s              r/   test_title_description_fallbackz.TestTranscribe.test_title_description_fallbackb   s     &*"$(!FHh7}}3 33} 33333} 3333333v333v333}333 33333333&6;;&x;&&&&x;&&&x&&&&&&6&&&6&&&;&&&&&&&r1   N)r9   r:   r;   r   rq   rs   ru   r<   r1   r/   rh   rh   M   s~    
EF
@A) B G) EF
@A. B G. EF
@A' B G'r1   rh   c                       e Zd Zd Zd Zy)TestParseInnertubeTranscriptc                    i }t        |      }d }||u }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}}y )Nr5   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is %(py7)sr   )r   r   py4r   zassert %(py9)spy9	r   r    r!   r"   r#   r$   r%   r&   r'   )r)   r*   r,   @py_assert6@py_assert5r.   @py_format10s          r/   test_empty_data_returns_nonez9TestParseInnertubeTranscript.test_empty_data_returns_nonem   s    +-6*2.6$6.$6666.$666666*666*6662666.666$6666666r1   c                    ddddddddd	d
dddiiigiigiiiiiigi}t        |      }d}||k(  }|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 )NactionsupdateEngagementPanelActioncontenttranscriptRendererbodytranscriptBodyRenderer	cueGroupstranscriptCueGroupRenderercuestranscriptCueRenderercue
simpleTextu   안녕하세요r   )z%(py0)s == %(py3)sr   rP   rQ   r   r{   )r)   datar   rH   r*   rV   r-   s          r/   test_parses_cue_groupsz3TestParseInnertubeTranscript.test_parses_cue_groupsp   s    1!0 &$<(30L4:<S@EDPRcHBV>9:=6
O2-.6*?&)"3$4
> -T2**v*****v*******v***v***********r1   N)r9   r:   r;   r   r   r<   r1   r/   rw   rw   l   s    7!+r1   rw   )__doc__builtinsr"   _pytest.assertion.rewrite	assertionrewriter    unittest.mockr   r   pytestyoutube_pipeline.transcriberr   r   r   r   r	   r
   r   r>   rK   r`   rh   rw   r<   r1   r/   <module>r      sY    (    *  
+ 
+1 1 " ,' '>%+ %+r1   