
    }i;                         d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlmZmZmZmZ d dlmZ  G d de      Zy)	    N)PackageNotFoundErrorversion)TestCase)	MagicMockpatch)YouTubeTranscriptApiVideoUnavailableFetchedTranscriptFetchedTranscriptSnippet)YouTubeTranscriptClic                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej2                  j5                  d      d        Zd Zd Zy)TestYouTubeTranscriptClic                 p   t               | _        t        t        t        ddd      t        ddd      t        ddd	      gd
ddd            | j                  _        t        | j                        | j                  _        t               | _        t        | j                        | j                  _        t        | j                        | j                  _        t        | j                        | j                  _	        t        d       t        _        t        | j                        t        _        y )NzHey, this is just a testg        gp=
ף?)textstartdurationz*this is <i>not</i> the original transcriptgp=
ף@z-just something shorter, I made up for testingg@gx	@EnglishenTGJLlxj_dtq8)snippetslanguagelanguage_codeis_generatedvideo_id)return_value)r   transcript_mockr
   r   fetch	translatetranscript_list_mockfind_generated_transcript find_manually_created_transcriptfind_transcriptr   __init__listselfs    O/usr/local/lib/python3.12/dist-packages/youtube_transcript_api/test/test_cli.pysetUpzTestYouTubeTranscriptCli.setUp   s   ({%.*,7!!%
 -I"!%
 -L!!&" #"!&+&
"2 *3@T@T)U&$-K!>G--?
!!; FO--F
!!B 5>--5
!!1 )2t(D%$-4;T;T$U!    c                 
   t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        d	j                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        d
j                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       | j                  |j                  d       y )Nz%v1 v2 --format json --languages de env1v2jsonder    %v1 v2 --languages de en --format jsonz& --format json v1 v2 --languages de enz{v1 v2 --languages de en --format json --http-proxy http://user:pass@domain:port --https-proxy https://user:pass@domain:porthttp://user:pass@domain:porthttps://user:pass@domain:portzkv1 v2 --languages de en --format json --webshare-proxy-username username --webshare-proxy-password passwordusernamepasswordzOv1 v2 --languages de en --format json --http-proxy http://user:pass@domain:portzQv1 v2 --languages de en --format json --https-proxy https://user:pass@domain:port)r   split_parse_argsassertEqual	video_idsformat	languages
http_proxyhttps_proxywebshare_proxy_usernamewebshare_proxy_passwordr&   parsed_argss     r'   test_argument_parsingz.TestYouTubeTranscriptCli.test_argument_parsing>   s2   *399;

+- 	 	..t=++V4..t=//400"5*399;

+- 	 	..t=++V4..t=//400"5*4::<

+- 	 	..t=++V4..t=//400"5*::?%'
 +-	 	
 	..t=++V4..t=//1OP002QR*116
 +-	 	
 	..t=++V4..t=<<jI<<jI*]cce

+- 	 	..t=++V4..t=//1OP00"5*_eeg

+- 	 	..t=++V4..t=002QR//4r)   c                     t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  dg       y )Nv1 v2r+   r,   prettyr   r   r5   r6   r7   r8   r9   r:   r?   s     r'   %test_argument_parsing__only_video_idsz>TestYouTubeTranscriptCli.test_argument_parsing__only_video_ids   sc    *7==?;GGI..t=++X6..7r)   c                     t        dj                               j                         }| j                  |j                  g d       | j                  |j
                  d       | j                  |j                  dg       y )Nz\-v1 \-\-v2 \--v3)z-v1z--v2z--v3rD   r   rE   r?   s     r'   3test_argument_parsing__video_ids_starting_with_dashzLTestYouTubeTranscriptCli.test_argument_parsing__video_ids_starting_with_dash   sd    *+?+E+E+GHTTV..0GH++X6..7r)   c                     | j                  t              5  t        dj                               j	                          d d d        y # 1 sw Y   y xY w)Nz--format json)assertRaises
SystemExitr   r5   r6   r%   s    r'   -test_argument_parsing__fail_without_video_idszFTestYouTubeTranscriptCli.test_argument_parsing__fail_without_video_ids   sC    z* 	H !6!6!89EEG	H 	H 	Hs   (AAc                    t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  dg       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  dg       y )Nzv1 v2 --format jsonr+   r,   r-   r   z--format json v1 v2rE   r?   s     r'   test_argument_parsing__jsonz4TestYouTubeTranscriptCli.test_argument_parsing__json   s    *+@+F+F+HIUUW..t=++V4..7*+@+F+F+HIUUW..t=++V4..7r)   c                    t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       y )Nv1 v2 --languages de enr+   r,   rD   r.   r   rE   r?   s     r'    test_argument_parsing__languagesz9TestYouTubeTranscriptCli.test_argument_parsing__languages   sn    *%++-

+- 	 	..t=++X6..t=r)   c                    t        dj                               j                         }| j                  |j                  d       t        dj                               j                         }| j                  |j
                  d       t        dj                               j                         }| j                  |j                  d       | j                  |j
                  d       t        dj                               j                         }| j                  |j                  d       | j                  |j
                  d       y )Nz/v1 v2 --http-proxy http://user:pass@domain:portr1   z1v1 v2 --https-proxy https://user:pass@domain:portr2   z[v1 v2 --http-proxy http://user:pass@domain:port --https-proxy https://user:pass@domain:portrC   r/   )r   r5   r6   r7   r;   r<   r?   s     r'   test_argument_parsing__proxiesz7TestYouTubeTranscriptCli.test_argument_parsing__proxies   s	   *=CCE

+- 	 	//1OP*?EEG

+- 	 	002QR*iooq

+- 	 	//1OP002QR*7==?;GGI//400"5r)   c                    t        dj                               j                         }| j                  |j                  ddg       | j                  |j                         t        dj                               j                         }| j                  |j                  ddg       | j                  |j                         y )N--list-transcripts v1 v2r+   r,   zv1 v2 --list-transcripts)r   r5   r6   r7   r8   
assertTruelist_transcriptsr?   s     r'   'test_argument_parsing__list_transcriptsz@TestYouTubeTranscriptCli.test_argument_parsing__list_transcripts   s    *&,,.

+- 	 	..t=445*&,,.

+- 	 	..t=445r)   c                 p   t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       t        dj                               j                         }| j                  |j                  ddg       | j                  |j
                  d       | j                  |j                  ddg       | j                  |j                  d       y )	N&v1 v2 --languages de en --translate czr+   r,   rD   r.   r   czz&v1 v2 --translate cz --languages de en)r   r5   r6   r7   r8   r9   r:   r   r?   s     r'    test_argument_parsing__translatez9TestYouTubeTranscriptCli.test_argument_parsing__translate   s   *4::<

+- 	 	..t=++X6..t=..5*4::<

+- 	 	..t=++X6..t=..5r)   c                    t        dj                               j                         }| j                  |j                  ddg       | j                  |j                         | j                  |j                         t        dj                               j                         }| j                  |j                  ddg       | j                  |j                         | j                  |j                         t        dj                               j                         }| j                  |j                  ddg       | j                  |j                         | j                  |j                         y )Nz v1 v2 --exclude-manually-createdr+   r,   zv1 v2 --exclude-generatedz4v1 v2 --exclude-manually-created --exclude-generated)	r   r5   r6   r7   r8   rV   exclude_manually_createdassertFalseexclude_generatedr?   s     r'   ,test_argument_parsing__manually_or_generatedzETestYouTubeTranscriptCli.test_argument_parsing__manually_or_generated   s&   *.446

+- 	 	..t=<<=667*'--/

+- 	 	..t===>556*BHHJ

+- 	 	..t=<<=556r)   c                    t        dj                               j                          t        j                  j                  d       t        j                  j                  d       | j                  j                  j                  ddg       y )NrP   r+   r,   r.   r   )r   r5   runr   r$   assert_any_callr   r"   r%   s    r'   test_runz!TestYouTubeTranscriptCli.test_run   sc    6<<>?CCE!!11$7!!11$7!!11AA4,Or)   c                     t        t        d            t        _        t	        dj                               j                         }| j                  |t        t        d                   y )Nr   side_effectzv1 --languages de en)	r   r	   r   r$   r   r5   rc   r7   strr&   outputs     r'   test_run__failing_transcriptsz6TestYouTubeTranscriptCli.test_run__failing_transcripts   sN    $-:J::V$W!%&<&B&B&DEIIK%5j%A!BCr)   c                     t        dj                               j                          | j                  j                  j                  ddg       y )Nz+v1 v2 --languages de en --exclude-generatedr.   r   )r   r5   rc   r   r!   rd   r%   s    r'   test_run__exclude_generatedz4TestYouTubeTranscriptCli.test_run__exclude_generated   s>    9??A	

#%!!BBRR4L	
r)   c                     t        dj                               j                          | j                  j                  j                  ddg       y )Nz2v1 v2 --languages de en --exclude-manually-createdr.   r   )r   r5   rc   r   r    rd   r%   s    r'   "test_run__exclude_manually_createdz;TestYouTubeTranscriptCli.test_run__exclude_manually_created  s>    @FFH	

#%!!;;KK4L	
r)   c                 r    | j                  t        dj                               j                         d       y )NzFv1 v2 --languages de en --exclude-manually-created --exclude-generatedr/   )r7   r   r5   rc   r%   s    r'   0test_run__exclude_manually_created_and_generatedzITestYouTubeTranscriptCli.test_run__exclude_manually_created_and_generated  s.     X^^`ce		
r)   c                     t        dj                               j                         f | j                  j                  j                  d       y )NrZ   r[   )r   r5   rc   r   r   rd   r%   s    r'   test_run__translatez,TestYouTubeTranscriptCli.test_run__translate  s:    	FLLN	O	S	S	UW&&66t<r)   c                     t        dj                               j                          t        j                  j                  d       t        j                  j                  d       y )NrU   r+   r,   )r   r5   rc   r   r$   rd   r%   s    r'   test_run__list_transcriptsz3TestYouTubeTranscriptCli.test_run__list_transcripts  sE    7==?@DDF!!11$7!!11$7r)   c                 |    t        dj                               j                         }t        j                  |       y )Nr0   )r   r5   rc   r-   loadsrj   s     r'   test_run__json_outputz.TestYouTubeTranscriptCli.test_run__json_output"  s0    %399;

#% 	
 	

6r)   c                 J   t        dj                               j                          t        j                  j
                  j                  j                  d      }| j                  |       | j                  |j                  d       | j                  |j                  d       y )Nz]v1 v2 --languages de en --webshare-proxy-username username --webshare-proxy-password passwordproxy_configr3   r4   )r   r5   rc   r   r#   	call_argskwargsgetassertIsNotNoner7   proxy_usernameproxy_passwordr&   r{   s     r'   test_run__webshare_proxy_configz8TestYouTubeTranscriptCli.test_run__webshare_proxy_config*  s    5 eg	
 #%+44>>EEII
 	\*44jA44jAr)   c                 J   t        dj                               j                          t        j                  j
                  j                  j                  d      }| j                  |       | j                  |j                  d       | j                  |j                  d       y )Nzmv1 v2 --languages de en --http-proxy http://user:pass@domain:port --https-proxy https://user:pass@domain:portr{   r1   r2   )r   r5   rc   r   r#   r|   r}   r~   r   r7   http_url	https_urlr   s     r'   test_run__generic_proxy_configz7TestYouTubeTranscriptCli.test_run__generic_proxy_config;  s    > eg	
 #%+44>>EEII
 	\*..0NO//1PQr)   zfThis test is temporarily disabled because cookie auth is currently not working due to YouTube changes.)reasonc                     t        dj                               j                          t        j                  j                  d d       y )Nz.v1 v2 --languages de en --cookies blahblah.txtzblahblah.txt)r{   cookie_path)r   r5   rc   r   r#   rd   r%   s    r'   test_run__cookiesz*TestYouTubeTranscriptCli.test_run__cookiesL  s>    
 	@GGI	

#%%%55& 	6 	
r)   c                     dt        d       }t        j                  ddgddd      j                  j	                         }||k(  sJ d| d| d	       y
)zo
        `youtube_transcript_api --version` should return the same version as in the package metadata.
        z youtube_transcript_api, version zyoutube-transcript-apiyoutube_transcript_apiz	--versionT)capture_outputr   checkzExpected version 'z', but got ''N)r   
subprocessrc   stdoutstrip)r&   expected_version_msgcli_version_msgs      r'   test_version_matches_metadataz6TestYouTubeTranscriptCli.test_version_matches_metadataZ  s{    
 /w7O/P.QR 	 %..%{3	

 & 	 33	U 45\/ARRST	U3r)   c                     t        dt              5  t        g       }|j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nz#youtube_transcript_api._cli.versionrg   unknown)r   r   r   _get_version)r&   clis     r'   "test_get_version_package_not_foundz;TestYouTubeTranscriptCli.test_get_version_package_not_foundm  sH    1?S
 	3 'r*C##%222		3 	3 	3s	   !=AN)__name__
__module____qualname__r(   rA   rF   rH   rL   rN   rQ   rS   rX   r\   ra   re   rl   rn   rp   rr   rt   rv   ry   r   r   pytestmarkskipr   r   r    r)   r'   r   r      s    )VVB5H88H	8>6*66"7,PD


=
8B"R" [[*  
	
U&3r)   r   )r   importlib.metadatar   r   unittestr   unittest.mockr   r   r-   r   r   r   r	   r
   r   youtube_transcript_api._clir   r   r   r)   r'   <module>r      s4     <  *    =`3x `3r)   