ó
    ÔgÉj|  ã                   óô   • S r SSKrSSKJs  Jr  SSKrSSKrSSK	r	SSK
Jr  SSKJrJrJrJrJrJr  \S4S jrS rS rS	 rS
 rS rS r\\SSS4S jr\4S jrS rS rS rS rS r S r!S r"S r#S r$S r%g)ua   Protection des photos : aperÃ§us filigranÃ©s signÃ©s, originaux rÃ©servÃ©s aux commandes payÃ©es.é    N)ÚImage)Ú	DEMO_CODEÚ
OTHER_CODEÚSCHOOLÚ
family_dirÚinsert_orderÚitemúportrait.jpgc              ƒ   ó”   ^#   • U R                  SU 35      I S h  v•N R                  5       S   n[        U4S jU 5       5      $  N*7f)Nz/api/portal/photos?code=Úphotosc              3   ó<   >#   • U  H  oS    T:X  d  M  Uv •  M     g7f)ÚfilenameN© )Ú.0ÚpÚnames     €ÚSD:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\tests\test_media.pyÚ	<genexpr>Ú_first_photo.<locals>.<genexpr>   s   øé € Ð;š6�a z¡]°dÑ%:—‘š6ùó   ƒ“	©ÚgetÚjsonÚnext)ÚclientÚcoder   r   s     ` r   Ú_first_photor      sD   øé € Ø—J‘JÐ!9¸$¸Ð@ÓA×A×GÑGÓIÈ(ÑS€FÜÔ;™6Ó;Ó;Ð;ñ Bùs   ƒA›Aœ+Ac              ƒ   ó¼  #   • S[          S3S[          S34 H¾  nU R                  U5      I S h  v•N o"R                  nSoCU:H  oU(       d„  [        R                  " SU4SX44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=pTMÀ     g  N«7f)Nz/photos/ú/portrait.jpgz/thumbs/z/portrait.webpé”  ©ú==©z3%(py3)s
{%(py3)s = %(py1)s.status_code
} == %(py6)s©Úpy1Úpy3Úpy6úassert %(py8)sÚpy8)r   r   Ústatus_codeÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation)r   ÚpathÚ@py_assert0Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9s           r   Ú-test_originals_are_not_served_as_static_filesr7      s–   é € ØœI˜; mÐ4¸ÄÀÈ>Ð6ZÓ[ˆØ—j‘j Ó&×&Ð:×3Ñ3Ð:°sÐ:°sÑ:×:×:×:Ò:Ð3×:×:Ô:Ð&×:×:Ó:Ð3×:×:Ó:°s×:×:×:×:×:×:×:ò \Ù&ùs   ‚,C®C¯B,Cc              ƒ   ó®  #   • [        U 5      I S h  v•N nU R                  US   5      I S h  v•N 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                  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•[        R                  " [        R                  " UR                   5      5      nUR"                  n	[%        U	5      nSoÔU:*  oî(       Gd"  [        R                  " SU4SXM45      S[
        R                  " 5       ;   d  [        R                  " [$        5      (       a  [        R                  " [$        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U	5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=n=píSSKJn  [+        [,        [.        5      S-  R1                  5       nUR                   o3U:g  oU(       dñ  [        R                  " SU4SUU45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  n
SSU
0-  n[        [        R                  " U5      5      eS =p5g  GN> GN%7f)NÚurléÈ   r!   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚr©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7zcontent-typez
image/webp©z%(py1)s == %(py4)s©r%   Úpy4úassert %(py6)sr'   iè  )ú<=)zJ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.size
})
} <= %(py8)sÚmaxÚimg)r>   r%   r&   r@   r)   zassert %(py10)sÚpy10r   )Úconfigr
   )ú!=)z/%(py2)s
{%(py2)s = %(py0)s.content
} != %(py4)sÚoriginal)r>   r?   rE   )r   r   r*   r+   r,   Ú@py_builtinsÚlocalsÚ_should_repr_global_namer-   r.   r/   Úheadersr   ÚopenÚioÚBytesIOÚcontentÚsizerH   ÚcorerK   r   r   r   Ú
read_bytes)r   r   r<   Ú@py_assert1r4   Ú@py_assert3Ú@py_format6Ú@py_format8r1   r2   Ú@py_format5r5   rI   Ú@py_assert7Ú@py_assert6r6   Ú@py_format11rK   rM   s                      r   Ú/test_preview_is_a_reduced_webp_not_the_originalra      sR  é € Ü˜6Ó"×"€AØ�j‰j˜˜5™Ó"×"€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ�9‰9�^Ñ$Ð4¨Ð4¨Ñ4×4×4×4Ò4Ð$×4×4Ô4Ð$×4×4Ó4¨×4×4×4×4×4×4Ó4Ü
�*Š*”R—Z’Z §	¡	Ó*Ó
+€CØ�x‰xÐ Œ3ˆx‹=Ð ˜DÐ ˜DÑ × × × Ó ˆ=× × × × × Õ Œ3× × × Ñ Œ3× × × × × Ö ˆs× × × Ñ ˆs× × Õ ˆx× × Ó ˆ=× × Ó ˜D× × × × × × Õ ÝÜœ6¤9Ó-°Ñ>×JÑJÓL€HØ�9‰9Ð ˜Ñ × × × Ò ˆ9˜× × × × × Õ ˆ1× × × Ñ ˆ1× × Õ ˆ9× × × × × Ô ˜× × × Ñ ˜× × × × × × Ô ò 	#Ú"ùs    ‚Q‘Q’Q­Q®P"QÑQc              ƒ   ó¶  #   • [        U 5      I Sh  v•N n[        R                  " [        R                  " U R                  US   5      I Sh  v•N R                  5      5      R                  S5      nUR                  o3" 5       n[        U5      n[        U5      nSovU:„  oˆ(       GdŸ  [        R                  " SU4SXg45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                   " [        5      OSS	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS	[        R                   " U5      [        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=p‡g GNB GN	7f)uM   Un aplat uni (l'original) doit prÃ©senter des variations une fois filigranÃ©.Nr9   ÚRGBé   )Ú>)z„%(py10)s
{%(py10)s = %(py0)s(%(py8)s
{%(py8)s = %(py1)s(%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.getdata
}()
})
})
} > %(py13)sÚlenÚsetrI   )r>   r%   r?   rE   r'   r)   rJ   Úpy13zassert %(py15)sÚpy15)r   r   rR   rS   rT   r   rU   ÚconvertÚgetdatarg   rf   r+   r,   rN   rO   rP   r-   r.   r/   )r   r   rI   rZ   r3   r^   Ú@py_assert9Ú@py_assert12Ú@py_assert11Ú@py_format14Ú@py_format16s              r   Ú$test_preview_is_actually_watermarkedrq   !   sH  é € ä˜6Ó"×"€AÜ
�*Š*”R—Z’Z v§z¡z°!°E±(Ó';×!;× DÑ DÓEÓ
F×
NÑ
NÈuÓ
U€CØ—;‘;Ð'�;“=Ð'Œs�=Ó!Ð'Œ3Ð!Ó"Ð' RÐ' RÑ'×'×'×'Ó'Ð"×'×'×'×'×'Õ'Œ3×'×'×'Ñ'Œ3×'×'×'×'×'Ö'Œs×'×'×'Ñ'Œs×'×'×'×'×'Ö'�3×'×'×'Ñ'�3×'×'Õ'�;×'×'Ó'�=×'×'Ó'Ð!×'×'Ó'Ð"×'×'Ó' R×'×'×'×'×'×'×'Ò'ò 	#Ú!;ùs"   ‚I‘I’;IÁIÁHIÉIc              ƒ   ó0  #   • [        U 5      I S h  v•N nUS   R                  S5      S   nU R                  U5      I S h  v•N o3R                  nSoTU:H  of(       d„  [        R
                  " SU4SXE4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=peU R                  US   R                  S
S5      5      I S h  v•N o3R                  nSoTU:H  of(       d„  [        R
                  " SU4SXE4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=peU R                  [        R                  " SSUS   5      5      I S h  v•N o3R                  nSoTU:H  of(       d„  [        R
                  " SU4SXE4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=peg  GNz GNM GN‚ N°7f)Nr9   Ú?r   i¦  r!   r#   r$   r(   r)   zsig=zsig=00é“  úexp=\d+úexp=1)r   Úsplitr   r*   r+   r,   r-   r.   r/   ÚreplaceÚreÚsub)	r   r   Úbaser1   r2   r3   r4   r5   r6   s	            r   Ú:test_preview_rejects_missing_tampered_or_expired_signaturer|   (   s£  é € Ü˜6Ó"×"€AØˆU‰8�>‰>˜#Ó˜qÑ!€DØ—*‘*˜TÓ"×"Ð6×/Ñ/Ð6°3Ð6°3Ñ6×6×6×6Ò6Ð/×6×6Ô6Ð"×6×6Ó6Ð/×6×6Ó6°3×6×6×6×6×6×6Õ6Ø—*‘*˜Q˜u™X×-Ñ-¨f°hÓ?Ó@×@ÐT×MÑMÐTÐQTÐTÐQTÑT×T×T×TÒTÐM×T×TÔTÐ@×T×TÓTÐM×T×TÓTÐQT×T×T×T×T×T×TÕTØ—*‘*œRŸVšV J°¸¸5¹ÓBÓC×CÐW×PÑPÐWÐTWÐWÐTWÑW×W×W×WÒWÐP×W×WÔWÐC×W×WÓWÐP×W×WÓWÐTW×W×W×W×W×W×WÖWò	 	#â"Ú@ÙCùsH   ‚J‘J’/JÁJÁCJÄJÄCJÇ#JÇ$B(JÊJÊJÊJc              ƒ   óÚ  #   • [        U 5      I S h  v•N nUS   R                  SS5      nU R                  U5      I S h  v•N o3R                  nSoTU:H  of(       d„  [        R
                  " SU4SXE4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=peg  NÕ N©7f)
Nr9   r
   úfratrie.jpgrt   r!   r#   r$   r(   r)   ©	r   rx   r   r*   r+   r,   r-   r.   r/   )	r   r   Úotherr1   r2   r3   r4   r5   r6   s	            r   Ú+test_preview_signature_is_bound_to_the_filer�   0   sœ   é € Ü˜6Ó"×"€AØˆe‰H×Ñ˜^¨]Ó;€EØ—*‘*˜UÓ#×#Ð7×0Ñ0Ð7°CÐ7°CÑ7×7×7×7Ò7Ð0×7×7Ô7Ð#×7×7Ó7Ð0×7×7Ó7°C×7×7×7×7×7×7Ö7ñ 	#á#ùó!   ‚C+‘C'’-C+¿C)Á B(C+Ã)C+c              ƒ   óÚ  #   • [        U 5      I S h  v•N nUS   R                  SS5      nU R                  U5      I S h  v•N o3R                  nSoTU;   of(       d„  [        R
                  " SU4SXE4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=peg  NÕ N©7f)
Nr9   r   z/..%2F..%2Ftest.db)rt   r    ©Úin)z3%(py3)s
{%(py3)s = %(py1)s.status_code
} in %(py6)sr$   r(   r)   r   )	r   r   r9   r1   r2   r3   r4   r5   r6   s	            r   Ú,test_preview_cannot_escape_the_family_folderr†   6   sœ   é € Ü˜6Ó"×"€AØ
ˆE‰(×
Ñ
˜?Ð,@Ó
A€CØ—*‘*˜S“/×!Ð<×.Ñ.Ð<°*Ð<°*Ñ<×<×<×<Ò<Ð.×<×<Ô<Ð!×<×<Ó<Ð.×<×<Ó<°*×<×<×<×<×<×<Ö<ñ 	#á!ùr‚   Údigitalç      @c                 óp   • [        [        R                  " 5       5      n[        X`U[	        X2US9/40 UD6  U$ )N©ÚfmtÚphotoÚprice)ÚstrÚuuidÚuuid4r   r	   )r   ÚschoolrŒ   r‹   r�   ÚkwÚoids          r   Ú_paid_digital_orderr”   <   s3   € Ü
Œd�jŠj‹lÓ
€CÜ�˜F¤T¨cÀeÑ%LÐ$MÑTÐQSÒTØ€Jó    c              ƒ   óš   ^#   • U R                  SU 35      I S h  v•N R                  5       S   n[        U4S jU 5       5      S   $  N-7f)Nú/api/portal/orders?code=Úordersc              3   ó<   >#   • U  H  oS    T:X  d  M  Uv •  M     g7f©ÚidNr   ©r   Úor“   s     €r   r   Ú_downloads.<locals>.<genexpr>D   s   øé € Ð4š6�a t¡W°¡^—‘š6ùr   Ú	downloadsr   )r   r“   r   r˜   s    `  r   Ú
_downloadsr    B   sI   øé € Ø—J‘JÐ!9¸$¸Ð@ÓA×A×GÑGÓIÈ(ÑS€FÜÔ4™6Ó4Ó4°[ÑAÐAñ Bùs   ƒA›A	œ.Ac              ƒ   ó
  #   • [        5       n[        X5      I S h  v•N n[        U5      nSoCU:H  oU(       Gd  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS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                  US	   S
   5      I S h  v•N nUR                  n	SoYU: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¥SoØR                  S   o­U
;   o3(       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                  n	[         R"                  oXR$                  oõ" U5      nU	" U5      nUR&                  nSnUU:H  nU(       GdÊ  [        R                  " SU4SUU45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U	5      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        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=n=nng  GNã GN�7f)Né   r!   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srf   Údl)r>   r%   r&   r'   r(   r)   r   r9   r:   r;   r<   r=   rA   rB   Ú
attachmentzcontent-dispositionr„   )z%(py1)s in %(py4)srD   rF   r'   )i°  i   )zÃ%(py14)s
{%(py14)s = %(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.open
}(%(py10)s
{%(py10)s = %(py5)s
{%(py5)s = %(py3)s.BytesIO
}(%(py8)s
{%(py8)s = %(py6)s.content
})
})
}.size
} == %(py17)sr   rS   )
r>   r?   r&   r@   r'   r)   rJ   Úpy12Úpy14Úpy17zassert %(py19)sÚpy19)r”   r    rf   r+   r,   rN   rO   rP   r-   r.   r/   r   r*   rQ   r   rR   rS   rT   rU   rV   )r   r“   r£   r2   r3   r4   r5   r6   r<   rY   rZ   r[   r\   r1   r]   r^   rl   rn   Ú@py_assert13Ú@py_assert16Ú@py_assert15Ú@py_format18Ú@py_format20s                          r   Ú4test_paid_digital_order_gets_a_working_download_linkr®   G   s´  é € Ü
Ó
€CÜ˜&Ó&×	&€BÜˆr‹7Ð�aÐ�a‰<×××Óˆ7×××××ÕŒ3×××ÑŒ3×××××Öˆr×××Ñˆr××Õˆ7××Ó�a××××××ÓØ�j‰j˜˜A™˜u™Ó&×&€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØÐ;Ÿ9™9Ð%:Ñ;Ð;Ð;Ñ;×;×;×;Ò;ˆ<×;×;Ô;ˆ<×;×;Ó;Ð;×;×;×;×;×;×;Ó;Ü�:‰:Ð@”b—j‘jÐ@§¡Ð@�j Ó+Ð@‰:Ð+Ó,Ð@Ð,×1Ñ1Ð@°[Ð@Ð1°[Ñ@×@×@×@Ô@Ð1°[×@×@×@×@×@Õ@Œ5×@×@×@Ñ@Œ5×@×@Õ@ˆ:×@×@×@×@×@Ô@”b×@×@×@Ñ@”b×@×@Õ@�j×@×@×@×@×@Ô@ ×@×@×@Ñ@ ×@×@Õ@ ×@×@Ó@Ð+×@×@Ó@Ð,×@×@Ó@Ð1×@×@Ó@°[×@×@×@×@×@×@×@×@ò 
'â&ùs#   ‚T›S>œETÅ$TÅ%NTÔTc              ƒ   óH  #   • [        SS9n[        X5      I S h  v•N n/ o2U:H  oD(       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=pCg  N…7f)NÚunpaid©Úpayment_statusr!   rC   rD   rF   r'   ©r”   r    r+   r,   r-   r.   r/   ©r   r“   r1   rZ   r2   r]   r5   s          r   Ú!test_unpaid_order_has_no_downloadrµ   Q   se   é € Ü
¨XÑ
6€CÜ˜FÓ(×(Ð.¨BÐ.¨BÑ.×.×.×.Ò.Ð(×.×.Ô.Ð(×.×.Ó.¨B×.×.×.×.×.×.Ô.Ñ(ùs   ‚B"šB ›BB"c              ƒ   óJ  #   • [        SSS9n[        X5      I S h  v•N n/ o2U:H  oD(       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=pCg  N…7f)	Nzprint-10x15g      "@©r‹   r�   r!   rC   rD   rF   r'   r³   r´   s          r   Ú%test_print_only_order_has_no_downloadr¸   V   sg   é € Ü
 -°sÑ
;€CÜ˜FÓ(×(Ð.¨BÐ.¨BÑ.×.×.×.Ò.Ð(×.×.Ô.Ð(×.×.Ó.¨B×.×.×.×.×.×.Ô.Ñ(ùs   ‚B#›B!œBB#c              ƒ   ó4  #   • [        SSS9n[        X5      I S h  v•N n[        U5      nSoCU:H  oU(       d×  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=pTg  Nú7f)NÚpackg      ,@r·   r¢   r!   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)srf   )r>   r?   rE   rB   zassert %(py9)sÚpy9)r”   r    rf   r+   r,   rN   rO   rP   r-   r.   r/   )r   r“   rY   rZ   r_   r3   r\   Ú@py_format10s           r   Ú#test_pack_includes_the_digital_filer½   [   s    é € Ü
 &°Ñ
5€CÜ Ó,×,Ð2Œ3Ð,Ó-Ð2°Ð2°Ñ2×2×2×2Ò2Ð-×2×2×2×2×2Õ2Œ3×2×2×2Ñ2Œ3×2×2Õ2Ð,×2×2Ó2Ð-×2×2Ó2°×2×2×2×2×2×2Ö2Ñ,ùs   ‚D›DœC;Dc              ƒ   ód  #   • SSK Jn  [        5       n[        X5      I S h  v•N S   S   nU" 5        nUR	                  SU45        UR                  5         S S S 5        U R                  U5      I S h  v•N oUR                  nSovU:H  oˆ(       d„  [        R                  " SU4SXg4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=p‡g  Nù! , (       d  f       NÌ= f Nº7f)Nr   )Úget_dbr9   z/UPDATE orders SET status='cancelled' WHERE id=?rt   r!   r#   r$   r(   r)   )Úcore.dbr¿   r”   r    ÚexecuteÚcommitr   r*   r+   r,   r-   r.   r/   )r   r¿   r“   r9   Úconnr1   r2   r3   r4   r5   r6   s              r   ÚBtest_download_link_dies_if_order_is_cancelled_or_unpaid_afterwardsrÄ   `   sÊ   é € ÝÜ
Ó
€CÜ˜FÓ(×(¨!Ñ
,¨UÑ
3€CÙ	Œ�TØ�‰ÐFÈÈÔOØ�‰Œ÷ 
ð —*‘*˜S“/×!Ð5×.Ñ.Ð5°#Ð5°#Ñ5×5×5×5Ò5Ð.×5×5Ô5Ð!×5×5Ó5Ð.×5×5Ó5°#×5×5×5×5×5×5Ö5ñ	 )ß	�úñ "ùs3   ‚D0¡D¢D0³$DÁD0Á3D.Á4B(D0Ä
D+Ä'D0c              ƒ   óð  #   • [        5       n[        X5      I S h  v•N S   S   nU R                  UR                  SS5      5      I S h  v•N o3R                  nSoTU:H  of(       d„  [
        R                  " SU4SXE4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=peg  NÖ N©7f)Nr   r9   r
   r~   rt   r!   r#   r$   r(   r)   )
r”   r    r   rx   r*   r+   r,   r-   r.   r/   ©	r   r“   r9   r1   r2   r3   r4   r5   r6   s	            r   Ú9test_download_signature_cannot_be_reused_for_another_filerÇ   j   s¦   é € Ü
Ó
€CÜ˜FÓ(×(¨!Ñ
,¨UÑ
3€CØ—*‘*˜SŸ[™[¨¸ÓGÓH×HÐ\×UÑUÐ\ÐY\Ð\ÐY\Ñ\×\×\×\Ò\ÐU×\×\Ô\ÐH×\×\Ó\ÐU×\×\Ó\ÐY\×\×\×\×\×\×\Ö\ñ )ÙHùs"   ‚C6›C2œ.C6Á
C4ÁB(C6Ã4C6c              ƒ   óÊ  #   • SSK Jn  [        5       nUR                  US5      nU R	                  U5      I Sh  v•N oDR
                  nSoeU:H  ow(       d„  [        R                  " SU4SXV4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=pvg N§7f)uN   MÃªme avec une signature valide, un fichier absent de la commande est refusÃ©.r   ©Úmedia_servicer~   Nrt   r!   r#   r$   r(   r)   )ÚservicesrÊ   r”   Údownload_urlr   r*   r+   r,   r-   r.   r/   )
r   rÊ   r“   Úexp_urlr1   r2   r3   r4   r5   r6   s
             r   Ú.test_download_is_limited_to_files_in_the_orderrÎ   p   s‘   é € å&Ü
Ó
€CØ×(Ñ(¨¨mÓ<€GØ—*‘*˜WÓ%×%Ð9×2Ñ2Ð9°cÐ9°cÑ9×9×9×9Ò9Ð2×9×9Ô9Ð%×9×9Ó9Ð2×9×9Ó9°c×9×9×9×9×9×9Ö9Ñ%ùs   ‚7C#¹C!ºB(C#c              ƒ   óü  #   • [        5       n[        X5      I S h  v•N S   S   nU R                  [        R                  " SSU5      5      I S h  v•N o3R
                  nSoTU:H  of(       d„  [        R                  " SU4SXE4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=peg  NÜ N©7f)Nr   r9   ru   rv   rt   r!   r#   r$   r(   r)   )r”   r    r   ry   rz   r*   r+   r,   r-   r.   r/   rÆ   s	            r   Ú#test_download_expired_link_rejectedrÐ   x   s¥   é € Ü
Ó
€CÜ˜FÓ(×(¨!Ñ
,¨UÑ
3€CØ—*‘*œRŸVšV J°¸Ó=Ó>×>ÐR×KÑKÐRÈsÐRÈsÑR×R×R×RÒRÐK×R×RÔRÐ>×R×RÓRÐK×R×RÓRÈs×R×R×R×R×R×RÖRñ )Ù>ùs"   ‚C<›C8œ4C<ÁC:ÁB(C<Ã:C<c              ƒ   óª  ^#   • SS K n[        [        R                  " 5       5      m[	        T[
        [        [        SSSS9[        SSSS9/5        U R                  S[
         35      I S h  v•N R                  5       S   n[        U4S	 jU 5       5      nUS
   oD(       d:  SS[        R                  " U5      0-  n[        [        R                  " U5      5      eS nU R                  US
   5      I S h  v•N 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+                  [,        R.                  " UR0                  5      5      R3                  5       5      nSS/oÜU:H  ow(       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      S.-  nSSU0-  n
[        [        R                  " U
5      5      eS =p}g  GNb GNÜ7f)Nr   r‡   r
   rˆ   rŠ   r~   r—   r˜   c              3   ó<   >#   • U  H  oS    T:X  d  M  Uv •  M     g7frš   r   rœ   s     €r   r   ÚHtest_multi_photo_order_gets_a_zip_with_every_original.<locals>.<genexpr>„   s   øé € Ð5šF�q¨¡g°¡n—‘šFùr   Úzip_urlzassert %(py1)sr%   r:   r!   r;   r<   r=   rA   rB   )z%(py0)s == %(py3)sÚnames)r>   r&   zassert %(py5)sr@   )ÚzipfilerŽ   r�   r�   r   r   r   r	   r   r   r   r+   r-   r.   r/   r*   r,   rN   rO   rP   ÚsortedÚZipFilerS   rT   rU   Únamelist)r   rÖ   r˜   Úorderr1   Ú@py_format2r<   rY   r4   rZ   r[   r\   rÕ   r2   Ú@py_format4r“   s                  @r   Ú5test_multi_photo_order_gets_a_zip_with_every_originalrÝ   ~   sÅ  øé € ÛÜ
Œd�jŠj‹lÓ
€CÜ�”i¤¬$°9ÀNÐZ]Ñ*^Ü*.°9ÀMÐY\Ñ*]ð*_ô `à—J‘JÐ!9¼)¸ÐEÓF×F×LÑLÓNÈxÑX€FÜÔ5™FÓ5Ó5€EØ�ÑÐÕ××ÑÐ×××××ÐØ�j‰j˜˜yÑ)Ó*×*€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓÜ�7—?‘?¤2§:¢:¨a¯i©iÓ#8Ó9×BÑBÓDÓE€EØ" NÐ3Ð3Ð3Ñ3×3×3×3Ò3ˆ5×3×3×3×3×3Õ3ˆ5×3×3×3Ñ3ˆ5×3×3Õ3Ð3×3×3×3×3×3×3Ò3ò Gò 	+ùs&   ƒA(KÁ+KÁ,BKÃ4KÃ5GKËKc              ƒ   óZ  #   • SSK Jn  [        SS9nU R                  UR	                  U5      5      I S h  v•N o3R
                  nSoTU:H  of(       d„  [        R                  " SU4SXE4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=pe[        5       n	U R                  SU	 S35      I S h  v•N o3R
                  nSoTU:H  of(       d„  [        R                  " SU4SXE4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=peg  GNq Nª7f)Nr   rÉ   r°   r±   rt   r!   r#   r$   r(   r)   z/api/portal/download-zip/z?exp=9999999999&sig=bad)rË   rÊ   r”   r   Údownload_zip_urlr*   r+   r,   r-   r.   r/   )
r   rÊ   r“   r1   r2   r3   r4   r5   r6   Úpaids
             r   Ú8test_zip_is_refused_for_unpaid_orders_and_bad_signaturesrá   Œ   s  é € Ý&Ü
¨XÑ
6€CØ—*‘*˜]×;Ñ;¸CÓ@ÓA×AÐU×NÑNÐUÐRUÐUÐRUÑU×U×U×UÒUÐN×U×UÔUÐA×U×UÓUÐN×U×UÓUÐRU×U×U×U×U×U×UÕUÜÓ €DØ—*‘*Ð8¸¸Ð>UÐVÓW×WÐk×dÑdÐkÐhkÐkÐhkÑk×k×k×kÒkÐd×k×kÔkÐW×k×kÓkÐd×k×kÓkÐhk×k×k×k×k×k×kÖkò BáWùs#   ‚3F+µF&¶CF+Ã>F)Ã?B(F+Æ)F+)&Ú__doc__ÚbuiltinsrN   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter+   rS   ry   r�   ÚPILr   Úconftestr   r   r   r   r   r	   r   r7   ra   rq   r|   r�   r†   r”   r    r®   rµ   r¸   r½   rÄ   rÇ   rÎ   rÐ   rÝ   rá   r   r•   r   Ú<module>ré      sž   ðÙ gß  „ ƒ	Û 	Û å ç R× Rð %.°Nô <ò
;ò
	!ò(òXò8ò=ð '¨v¸^ÐQZÐbeô ð (1ô Bò
Aò/ò
/ò
3ò
6ò]ò:òSò4ólr•   