ó
    2ÄÍj"  ã                   ó¾   • S SK rS SKJs  Jr  S SKrS SKJr  S SK	r	S SK
Jr  \	R                  S 5       rS rS rS rS rS	 rS
 rS rS rS rS rS rS rS rS rg)é    N)ÚBytesIO©ÚTikTokAPIErrorc                 ó*   • U R                  SS 5        g )Nz(app.routes.api_routes.ensure_fresh_tokenc                 ó   • g)NÚtok© )Úas    ÚMF:\Solutions\Thinkera\Publishers\TikTokManager\tests\routes\test_api_posts.pyÚ<lambda>Úfresh_token.<locals>.<lambda>   s   € Èeó    )Úsetattr)Úmonkeypatchs    r   Úfresh_tokenr   	   s   € à×ÑÐBÁOÕTr   c                 óæ  • S Hë  nU R                  U5      nUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pTMí     g )	N)ú/api/v1/videosz/api/v1/posts/pub/statusú/api/v1/scheduledi‘  ©ú==©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚr©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7)
ÚgetÚstatus_codeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)ÚclientÚpathr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s           r   Ú$test_posts_endpoints_require_api_keyr0      sŠ   € ÛSˆØ�J‰J�tÓˆØ�}‰}Ð# Ð# Ñ#×#×#×#Ò#ˆ}×#×#×#×#×#Õ#ˆq×#×#×#Ñ#ˆq×#×#Õ#ˆ}×#×#Ó# ×#×#×#×#×#×#Õ#ò Tr   c                 óþ  • U R                  SUS9nUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=pTUR                  5       S
   S   nSoXU:H  o™(       do  [        R                  " SU	4SX…45      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p•g )Nr   ©Úheadersi”  r   r   r   r   r   r   ÚerrorÚcodeÚ
NO_ACCOUNT©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6)r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úget_json)r)   Úapi_headersr   r+   r,   r-   r.   r/   Ú@py_assert0Ú@py_assert2Ú@py_format5Ú@py_format7s               r   Ú$test_list_videos_without_any_accountrC      sß   € Ø�
‰
Ð#¨[ˆ
Ð9€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(Ð8¨LÐ8¨LÑ8×8×8×8Ò8Ð(×8×8Ô8Ð(×8×8Ó8¨L×8×8×8×8×8×8Ô8r   c                 ó@  • UR                  SSS j5        U R                  SUS9nUR                  nSovU:H  oˆ(       dº  [        R                  " SU4SXg45      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=p‡UR                  5       S   nUS   S   S   nSoŒU:H  oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØUS   nSoŒUL oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØg )Nú!app.routes.api_routes.list_videosr   c                 ó   • SSS./SSS.$ )NÚv1é   ©ÚidÚ
view_counté   F©ÚvideosÚcursorÚhas_morer	   ©ÚtokenÚ	max_countrO   s      r   r   Ú"test_list_videos.<locals>.<lambda>   s   € ÀÐUVÑ:WÐ9XÐdfÐtyÒ.zr   r   r2   éÈ   r   r   r   r   r   r   ÚdatarN   rJ   rG   r7   r8   r;   r<   rP   F©Úis©z%(py1)s is %(py4)s)rL   r   ©r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r=   ©r)   r>   Úaccountr   r   r   r+   r,   r-   r.   r/   rV   r?   r@   rA   rB   s                   r   Útest_list_videosr]      sS  € Ø×ÑØ+Ûzôð 	�
‰
Ð#¨[ˆ
Ð9€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ€DØ�‰>˜!Ñ˜TÑ"Ð* dÐ* dÑ*×*×*×*Ò*Ð"×*×*Ô*Ð"×*×*Ó* d×*×*×*×*×*×*Ó*Ø�
ÑÐ$˜uÐ$˜uÐ$×$×$×$Ò$Ð×$×$Ô$Ð×$×$Ó$˜u×$×$×$×$×$×$Ô$r   c                 ó  • U R                  SUSS0S9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S   S   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·g )Nz/api/v1/postsÚ	video_urlúhttps://x/v.mp4©r3   Újsoné�  r   r   r   r   r   r   r4   r5   ÚEXPLICIT_ACCOUNT_REQUIREDr7   r8   r;   r<   ©Úpostr    r!   r"   r#   r$   r%   r&   r'   r(   r=   ©r)   r>   r\   r   r   r+   r,   r-   r.   r/   r?   r@   rA   rB   s                 r   Ú*test_create_post_requires_explicit_accountrh   &   sé   € Ø�‰�O¨[ÀÐM^Ð?_ˆÐ`€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(ÐGÐ,GÐGÐ,GÑG×G×G×GÒGÐ(×G×GÔGÐ(×G×GÓGÐ,G×G×G×G×G×G×GÔGr   c                 ó´  • UR                  SSS j5        UR                  SS 5        U R                  SU-  USSS.S	9nUR                  nS
ovU:H  oˆ(       dß  [        R                  " SU4SXg45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	[        R                  " UR                  5       5      S-   SU	0-  n
[        [        R                  " U
5      5      eS =n=p‡UR                  5       S   nUS   nSoŒU:H  oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØUS   nSoŒU:H  oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØg )Nú"app.services.posts.init_video_pullc                 ó
   • SS0$ )NÚ
publish_idÚpub_1r	   ©rR   ÚurlÚtitleÚprivacy_levelÚmodes        r   r   Ú-test_create_post_happy_path.<locals>.<lambda>-   s   € ð  ~Jð  LSñ  }Tr   ú#app.services.posts.wait_for_publishc                 ó   • SSS.$ )NÚPUBLISH_COMPLETEÚv_1©Úpublish_statusÚvideo_idr	   ©rR   Úpids     r   r   rs   .   ó   € Ðewð  FKò  SLr   ú/api/v1/posts?account_id=%sr`   Úcap)r_   rp   ra   éÉ   r   r   r   r   ú
>assert %(py7)sr   rV   rl   rm   r7   r8   r;   r<   ry   rv   ©NNN)r   rf   r    r!   r"   r#   r$   r%   r&   Ú_format_assertmsgr=   r'   r(   r[   s                   r   Útest_create_post_happy_pathr„   ,   s�  € Ø×ÑÐ<ó  ?Tô  UØ×ÑÐ=ñ  @Lô  MØ�‰Ð1°GÑ;À[Ø'8À5ÑIð 	ð 	K€Aà�=‰=Ð-˜CÐ-˜CÑ×-×-×-Ò-ˆ=×-×-×-×-×-Õ-ˆ1×-×-×-Ñ-ˆ1×-×-Õ-ˆ=×-×-Ó-˜C×-×-×-Ð- §¡£×-×-×-×-×-×-Ð-Ø�:‰:‹<˜Ñ€DØ�ÑÐ( Ð( Ñ(×(×(×(Ò(Ð×(×(Ô(Ð×(×(Ó( ×(×(×(×(×(×(Ó(ØÐ Ñ!Ð7Ð%7Ð7Ð%7Ñ7×7×7×7Ò7Ð!×7×7Ô7Ð!×7×7Ó7Ð%7×7×7×7×7×7×7Ô7r   c                 ó  • U R                  SU-  U0 S9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   S   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·g )Nr~   ra   rc   r   r   r   r   r   r   r4   r5   ÚINVALID_INPUTr7   r8   r;   r<   re   rg   s                 r   Ú test_create_post_validates_inputr‡   7   sç   € Ø�‰Ð1°GÑ;À[ÐWYˆÐZ€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(Ð;¨OÐ;¨OÑ;×;×;×;Ò;Ð(×;×;Ô;Ð(×;×;Ó;¨O×;×;×;×;×;×;Ô;r   c                 óJ  • SS jnUR                  SU5        U R                  SU-  USS0S9nUR                  nSo‡U:H  o™(       dº  [        R                  " SU	4S	Xx45      S
[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS =n=p˜UR                  5       nUS   S   nSo�U	:H  oî(       do  [        R                  " SU4SXÙ45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=péSoÜS   S   o�U	;  oî(       do  [        R                  " SU4SXÙ45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pég )Nc                 ó   • [        SS5      e)Né“  znTikTok refused the request: the app is not allowed to do this (unaudited apps can only post SELF_ONLY videos).r   rn   s        r   ÚboomÚ8test_create_post_maps_tiktok_errors_safely.<locals>.boom>   s   € Ü˜Sð  #Só  Tð  	Tr   rj   r~   r_   r`   ra   rŠ   r   r   r   r   r   r   r4   r5   Ú	FORBIDDENr7   r8   r;   r<   ÚsecretÚmessage)únot in)z%(py1)s not in %(py4)sr‚   )r   rf   r    r!   r"   r#   r$   r%   r&   r'   r(   r=   )r)   r>   r\   r   r   r‹   r   r+   r,   r-   r.   r/   Úbodyr?   r@   rA   rB   s                    r   Ú*test_create_post_maps_tiktok_errors_safelyr’   =   sZ  € ôTà×ÑÐ<¸dÔCØ�‰Ð1°GÑ;À[ÐXcÐevÐWwˆÐx€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<€DØ�‰=˜Ñ Ð/ KÐ/ KÑ/×/×/×/Ò/Ð ×/×/Ô/Ð ×/×/Ó/ K×/×/×/×/×/×/Ó/ØÐ3 ™=¨Ñ3Ð3Ð3Ñ3×3×3×3Ò3ˆ8×3×3Ô3ˆ8×3×3Ó3Ð3×3×3×3×3×3×3Ô3r   c                 ó  ^• 0 mUR                  SS#U4S jj5        UR                  SS 5        U R                  SU-  U[        S5      S4SS	.S
S9nUR                  nSo‡U:H  o™(       dß  [        R
                  " SU	4SXx45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n
[        R                  " UR                  5       5      S-   SU
0-  n[        [        R                  " U5      5      eS =n=p˜TS   nSoœU	L oÝ(       do  [        R
                  " SU4SXÉ45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pÙ[        R                  owR                   n	TS   nU	" U5      nU(       + nU(       dÌ  SS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U	5      [        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n	=n=nn[        R"                  osR$                  S   o—" U	5      n/ nUU:H  nU(       dí  [        R
                  " SU4SUU45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U	5      [        R                  " U5      [        R                  " U5      S .-  nS!S"U0-  n[        [        R                  " U5      5      eS =n=n	=n=nng )$Nz%app.services.posts.publish_video_filec                 ót   >• TR                  [        R                  R                  U5      US9=(       d    SS0$ )N)Úexistedr*   rl   Úpub_2)ÚupdateÚosr*   Úisfile)rR   r*   rp   rq   rr   Úseens        €r   r   Ú9test_media_post_publishes_and_cleans_up.<locals>.<lambda>L   sI   ø€ ÀtÇ{Á{Ô[]×[bÑ[b×[iÑ[iÐjnÓ[oÐvzÀ{ÐG{÷  HWð  AMð  OVð  @Wð  HWr   rt   c                 ó   • SSS.$ )Nrv   Úv_2rx   r	   r{   s     r   r   r›   N   r}   r   ú!/api/v1/posts/media?account_id=%ss	   fakevideozclip.mp4z	from file)Ú
video_filerp   zmultipart/form-data)r3   rV   Úcontent_typer€   r   r   r   r   r�   r   r•   TrW   rY   r8   r;   r<   r*   zfassert not %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py6)s)
}r˜   )r   r   r:   r<   Úpy8ÚUPLOAD_FOLDER)zM%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.listdir
}(%(py4)s)
} == %(py9)s)r   r   r:   r<   Úpy9zassert %(py11)sÚpy11r‚   )r   rf   r   r    r!   r"   r#   r$   r%   r&   rƒ   r=   r'   r(   r˜   r*   ÚexistsÚlistdirÚconfig)r)   r>   r\   Úappr   r   r   r+   r,   r-   r.   r/   r?   r@   rA   rB   Ú@py_assert5Ú@py_assert7Ú@py_assert9Ú@py_format10Ú@py_assert8Ú@py_format12rš   s                         @r   Ú'test_media_post_publishes_and_cleans_upr¯   H   sz  ø€ Ø€DØ×ÑØ/ö 	Wôð ×ÑÐ=ñ  @Lô  MØ�‰Ø+¨gÑ5ØÜ$ \Ó2°JÐ?È+ÑVØ*ð	 	ð 	€Að �=‰=Ð-˜CÐ-˜CÑ×-×-×-Ò-ˆ=×-×-×-×-×-Õ-ˆ1×-×-×-Ñ-ˆ1×-×-Õ-ˆ=×-×-Ó-˜C×-×-×-Ð- §¡£×-×-×-×-×-×-Ð-Ø�	‰?Ð"˜dÐ"˜dÐ"×"×"×"Ò"ˆ?×"×"Ô"ˆ?×"×"Ó"˜d×"×"×"×"×"×"Ó"Ü�w‰wÐ+�~‰~Ð+˜d 6™lÐ+‰~˜lÓ+Ð+Ð+Ô+Ð+Ö+×+×+×+×+×+Ñ+Œr×+×+×+Ñ+Œr×+×+Õ+ˆw×+×+Ó+ˆ~×+×+Ó+˜l×+×+Ó+Ð+×+×+×+×+×+×+Ñ+Ü�:‰:Ð8—j‘j Ñ1Ð8ˆ:Ð1Ó2Ð8°bÐ8Ð2°bÑ8×8×8×8Ó8Ð2°b×8×8×8×8×8Õ8Œ2×8×8×8Ñ8Œ2×8×8Õ8ˆ:×8×8Ó8Ð1×8×8Ó8Ð2×8×8Ó8°b×8×8×8×8×8×8×8Ñ8r   c                 ó  • U R                  SU-  U0 S9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   S   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·g )Nrž   )r3   rV   rc   r   r   r   r   r   r   r4   r5   ÚNO_FILEr7   r8   r;   r<   re   rg   s                 r   Útest_media_post_requires_a_filer²   [   sç   € Ø�‰Ð7¸'ÑAÈ;Ð]_ˆÐ`€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(Ð5¨IÐ5¨IÑ5×5×5×5Ò5Ð(×5×5Ô5Ð(×5×5Ó5¨I×5×5×5×5×5×5Ô5r   c                 ó2  • UR                  SS 5        U R                  SUS9nUR                  nSovU:H  oˆ(       dº  [        R                  " SU4SXg45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  n	S
SU	0-  n
[        [        R                  " U
5      5      eS =n=p‡UR                  5       S   nUS   nSoŒU:H  oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØUS   nSoŒU:H  oÝ(       do  [        R                  " SU4SXÈ45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pØg )Nz*app.routes.api_routes.fetch_publish_statusc                 ó   • SSS S.$ )Nrv   Úv_3)ry   rz   Úfail_reasonr	   r{   s     r   r   Ú"test_post_status.<locals>.<lambda>d   s   € Ð.@ÈeÐdhÒir   z/api/v1/posts/pub_9/statusr2   rU   r   r   r   r   r   r   rV   ry   rv   r7   r8   r;   r<   rz   rµ   rZ   r[   s                   r   Útest_post_statusr¸   a   sN  € Ø×ÑØ4Ùiôð 	�
‰
Ð/¸ˆ
ÐE€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ€DØÐ Ñ!Ð7Ð%7Ð7Ð%7Ñ7×7×7×7Ò7Ð!×7×7Ô7Ð!×7×7Ó7Ð%7×7×7×7×7×7×7Ó7Ø�
ÑÐ$˜uÐ$˜uÑ$×$×$×$Ò$Ð×$×$Ô$Ð×$×$Ó$˜u×$×$×$×$×$×$Ô$r   c                 óR  • U R                  SUS9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   n
/ ozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·SSKJnJnJn  UR                  UR                  5      U" SS9-   R!                  5       nU R#                  SU-  USSUS.S9nUR                  nSoeU:H  ow(       dß  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[        R$                  " UR                  5       5      S-   S	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   nUS   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·US   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·UR                  UR                  5      U" SS9-   R!                  5       nU R'                  SUS   < S U< 3US!U0S9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   S   n
SozU:H  o»(       do  [        R                  " SU4SX§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·U R)                  SUS   < S U< 3US9nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n	[        [        R                  " U	5      5      eS =n=pvUR                  5       S
   S"   n
S#ozUL o»(       do  [        R                  " S$U4S%X§45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n
=p·g )&Nr   r2   rU   r   r   r   r   r   r   rV   r7   r8   r;   r<   r   ©ÚdatetimeÚ	timedeltaÚtimezoneé   ©Úhoursz/api/v1/scheduled?account_id=%sr`   Úlater)r_   rp   Úscheduled_atra   r€   r�   ÚstatusÚpendingr_   é   ú/api/v1/scheduled/rJ   z?account_id=rÂ   ÚdeletedTrW   rY   )r   r    r!   r"   r#   r$   r%   r&   r'   r(   r=   r»   r¼   r½   ÚnowÚutcÚ	isoformatrf   rƒ   ÚpatchÚdelete)r)   r>   r\   r   r   r+   r,   r-   r.   r/   r?   r@   rA   rB   r»   r¼   r½   rÂ   rf   Únew_times                       r   Útest_scheduled_crudrÎ   m   s_  € Ø�
‰
Ð&°ˆ
Ð<€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜ÑÐ% 2Ð% 2Ñ%×%×%×%Ò%Ð×%×%Ô%Ð×%×%Ó% 2×%×%×%×%×%×%Ó%ç6Ñ6Ø—L‘L §¡Ó.±ÀÑ1CÑC×NÑNÓP€LØ�‰Ð5¸Ñ?ÈØ'8À7Ð\hÑið 	ð 	k€Aà�=‰=Ð-˜CÐ-˜CÑ×-×-×-Ò-ˆ=×-×-×-×-×-Õ-ˆ1×-×-×-Ñ-ˆ1×-×-Õ-ˆ=×-×-Ó-˜C×-×-×-Ð- §¡£×-×-×-×-×-×-Ð-Ø�:‰:‹<˜Ñ€DØ�‰>Ð&˜YÐ&˜YÑ&×&×&×&Ò&ˆ>×&×&Ô&ˆ>×&×&Ó&˜Y×&×&×&×&×&×&Ó&Ø�ÑÐ1Ð 1Ð1Ð 1Ñ1×1×1×1Ò1Ð×1×1Ô1Ð×1×1Ó1Ð 1×1×1×1×1×1×1Ó1à—‘˜XŸ\™\Ó*©Y¸QÑ-?Ñ?×JÑJÓL€HØ�Š¸TÀ$¼ZÊÐQÐ[fØ)¨8Ð4ð 	ð 	6€Aà�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ Ñ)Ð6¨YÐ6¨YÑ6×6×6×6Ò6Ð)×6×6Ô6Ð)×6×6Ó6¨Y×6×6×6×6×6×6Ó6à�Š¸dÀ4¼jÊ'ÐRÐ\gˆÐh€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ 	Ñ*Ð2¨dÐ2¨dÐ2×2×2×2Ò2Ð*×2×2Ô2Ð*×2×2Ó2¨d×2×2×2×2×2×2Ô2r   c           
      óv  • SSK J nJnJn  U R                  SUSUR	                  UR
                  5      U" SS9-   R                  5       S.S9nUR                  nS	o˜U	:H  oª(       dº  [        R                  " S
U
4SX‰45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p©UR!                  5       S   S   nSo­U
:H  oî(       do  [        R                  " S
U4SXÚ45      [        R                  " U5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pêg )Nr   rº   r   r`   é   r¿   )r_   rÂ   ra   rc   r   r   r   r   r   r   r4   r5   rd   r7   r8   r;   r<   )r»   r¼   r½   rf   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@   rA   rB   s                    r   Ú(test_scheduled_requires_explicit_accountrÑ   †   s*  € ß6Ñ6Ø�‰Ð'°Ø'8È8Ï<É<ÐX`×XdÑXdÓKeÑhqÐxyÑhzÑKz÷  KFñ  KFó  KHñ  Ið 	ð 	J€Aà�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(ÐGÐ,GÐGÐ,GÑG×G×G×GÒGÐ(×G×GÔGÐ(×G×GÓGÐ,G×G×G×G×G×G×GÔGr   c                 ó|  • SSK Jn  U" XSS9nU R                  SU< SU< 3US9nUR                  nSo˜U	:H  oª(       dß  [        R
                  " S	U
4S
X‰45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U	5      S.-  n[        R                  " UR                  5       5      S-   SU0-  n[        [        R                  " U5      5      eS =n=p©UR                  5       S   S   nSo­U
:H  oî(       do  [        R
                  " S	U4SXÚ45      [        R                  " U5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pêU R                  SU< SU< 3US9nUR                  nSo˜U	:H  oª(       dº  [        R
                  " S	U
4S
X‰45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p©UR                  5       S   S   nSo­U
:H  oî(       do  [        R
                  " S	U4SXÚ45      [        R                  " U5      [        R                  " U
5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pêg )Nr   )Úadd_scheduled_postÚfailed)rÃ   rÆ   z/retry?account_id=r2   rU   r   r   r   r   r�   r   rV   rÃ   rÄ   r7   r8   r;   r<   rc   r   r4   r5   r†   )Útests.conftestrÓ   rf   r    r!   r"   r#   r$   r%   r&   rƒ   r=   r'   r(   )r)   r¨   r>   r\   r   rÓ   Úpost_idr   r+   r,   r-   r.   r/   r?   r@   rA   rB   s                    r   Útest_scheduled_retryr×   Ž   sé  € Ý1Ù  °hÑ?€GØ�ŠÃ'Ê7ÐSÐ]hˆÐi€AØ�=‰=Ð-˜CÐ-˜CÑ×-×-×-Ò-ˆ=×-×-×-×-×-Õ-ˆ1×-×-×-Ñ-ˆ1×-×-Õ-ˆ=×-×-Ó-˜C×-×-×-Ð- §¡£×-×-×-×-×-×-Ð-Ø�:‰:‹<˜Ñ Ñ)Ð6¨YÐ6¨YÑ6×6×6×6Ò6Ð)×6×6Ô6Ð)×6×6Ó6¨Y×6×6×6×6×6×6Ó6à�ŠÃ'Ê7ÐSÐ]hˆÐi€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�:‰:‹<˜Ñ  Ñ(Ð;¨OÐ;¨OÑ;×;×;×;Ò;Ð(×;×;Ô;Ð(×;×;Ó;¨O×;×;×;×;×;×;Ô;r   c                 ó  • UR                  SS 5        UR                  SSS j5        U R                  SUS9nUR                  5       S   S	   S
   nSovU:H  oˆ(       do  [        R                  " SU4SXg45      [        R
                  " U5      [        R
                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=p‡U R                  SUS9nUR                  5       S   S   nUS   S   nSovU:H  oˆ(       do  [        R                  " SU4SXg45      [        R
                  " U5      [        R
                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=p‡g )Nz#app.routes.api_routes.get_user_infoc                 ó   • SSS.$ )Né   éF   )Úfollower_countÚlikes_countr	   )rR   s    r   r   Ú)test_insights_endpoints.<locals>.<lambda>›   s   € Ð`aÐrtÒMur   rE   r   c                 ó   • SSS.SSS./SSS.$ )	NrG   é	   rI   Úv2rÅ   r¾   FrM   r	   rQ   s      r   r   rÞ   ž   s*   € ÀÐUVÑ:WÐ`dÐtuÑYvÐ9wð  DEð  SXò  /Yr   z/api/v1/insights/accountr2   rV   ÚuserrÜ   rÚ   r   r7   r8   r;   r<   z/api/v1/insights/videosrN   rJ   rG   )é2   r   )r   r   r=   r!   r"   r&   r'   r(   )r)   r>   r\   r   r   r   r?   r-   r@   rA   rB   rN   s               r   Útest_insights_endpointsrä   š   s  € Ø×ÑÐ=Ñ?uÔvØ×ÑØ+ó 	Yôð 	�
‰
Ð-°{ˆ
ÐC€AØ�:‰:‹<˜Ñ Ñ'Ð(8Ñ9Ð>¸QÐ>¸QÑ>×>×>×>Ò>Ð9×>×>Ô>Ð9×>×>Ó>¸Q×>×>×>×>×>×>Ó>Ø�
‰
Ð,°kˆ
ÐB€AØ�Z‰Z‹\˜&Ñ! (Ñ+€FØ�!‰9�T‰?Ð"˜dÐ"˜dÑ"×"×"×"Ò"ˆ?×"×"Ô"ˆ?×"×"Ó"˜d×"×"×"×"×"×"Ô"r   )Úbuiltinsr#   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter!   r˜   Úior   ÚpytestÚapp.tiktok_apir   Úfixturer   r0   rC   r]   rh   r„   r‡   r’   r¯   r²   r¸   rÎ   rÑ   r×   rä   r	   r   r   Ú<module>rí      sw   ðß  „ ƒ	Ý ã å )ð ‡�ñUó ðUò$ò9ò	%òHò8ò<ò4ò9ò&6ò	%ò3ò2Hò	<ó
#r   