ó
    ÙÉj3  ã                   óz  • 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  SSKJr  SSKJr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\	R@                  RC                  S/ SQ5      S 5       r"S r#\	R@                  RC                  S/ SQ5      S 5       r$S r%S r&S r'S r(g)ud   CÃ³digos de familia (formato HEC PREFIJO-XXX-XXX), bÃºsqueda tolerante a guiones y redirecciÃ³n /r/.é    N)Úget_db)Úschool_service)Úcode_generator)Ú	DEMO_CODEÚSCHOOLzL^[A-Z]{2,6}-[23456789A-HJKMNPQRSTUVWXYZ]{3}-[23456789A-HJKMNPQRSTUVWXYZ]{3}$c                  óT  • [        S5       GH  n [        R                  " S5      n[        R                  o"" U5      o3(       Gd  [
        R                  " U5      S-   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      S.-  n[        [
        R                  " U5      5      eS =p#Sn[        U5      oQR                  SS	5      S	   ofR                  nSnS
o—" X‰5      n
[        U
5      oµU-  oÌ(       + oÝ(       Gds  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      [
        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=n	=n
=n=pÍGM     g )Ni,  ÚmarzI
>assert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.match
}(%(py3)s)
}Ú
NEW_FORMATÚcode)Úpy0Úpy2Úpy3Úpy5Ú0O1ILÚ-é   Ú z¤assert not (%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} & %(py17)s
{%(py17)s = %(py5)s(%(py15)s
{%(py15)s = %(py9)s
{%(py9)s = %(py7)s.replace
}(%(py11)s, %(py13)s)
})
})Úset)
r   r   Úpy4r   Úpy7Úpy9Úpy11Úpy13Úpy15Úpy17)ÚrangeÚGÚ
build_coder
   ÚmatchÚ
@pytest_arÚ_format_assertmsgÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   ÚsplitÚreplace)Ú_r   Ú@py_assert1Ú@py_assert4Ú@py_format6Ú@py_assert3Ú@py_assert6Ú@py_assert8Ú@py_assert10Ú@py_assert12Ú@py_assert14Ú@py_assert16Ú@py_assert18Ú@py_assert19Ú@py_format20s                  ÚSD:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\tests\test_codes.pyÚDtest_generated_codes_have_the_hec_format_and_no_ambiguous_charactersr9      sÃ  € Ü�3�ZˆÜ�|Š|˜EÓ"ˆÜ×ÑÐ+Ð Ó%Ð+Ö%×+×+ t×+×+×+×+×+×+Œz×+×+×+Ñ+Œz×+×+Õ+Ð×+×+×+×+×+Ô+ ×+×+×+Ñ+ ×+×+Õ+Ð%×+×+×+×+×+Ò+ØÐM”3�w“<ÐM§j¡j°°aÓ&8¸Ñ&;ÐM×&CÑ&CÐMÀCÐMÈÐMÐ&CÀCÓ&LÐM¤#Ð&LÓ"MÐMÐ"MÑMÐMÔMÐMÖM×M×M×M×M×MÑM”3×M×M×MÑM”3×M×MÕM�w×M×MÓM�<×M×M×M×M×MÔM¤#×M×M×MÑM¤#×M×MÕMÐ&;×M×MÓMÐ&C×M×MÓMÀC×M×MÓMÈ×M×MÓMÐ&L×M×MÓMÐ"M×M×M×M×M×M×M×MÕMò ó    c                  óÔ  • [         R                  n So" U5      nSo2U:H  oD(       dì  [        R                  " SU4SX#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=pC[         R                  n S	o" U5      nS
o2U:H  oD(       dì  [        R                  " SU4SX#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=pC[         R                  n So" U5      nSo2U:H  oD(       dì  [        R                  " SU4SX#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=pC[         R                  n So" U5      nSo2U:H  oD(       dì  [        R                  " SU4SX#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=pCg )Nu   Ã‰cole Sainte-MarieÚECO©ú==)zV%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.prefix_from_name
}(%(py4)s)
} == %(py9)sr   ©r   r   r   Úpy6r   úassert %(py11)sr   u   Ã‡Ã ÚCAXÚ1234ÚFOTr   )
r   Úprefix_from_namer    Ú_call_reprcomparer"   r#   r$   r%   r&   r'   ©r+   r.   Ú@py_assert5r0   Ú@py_assert7Ú@py_format10Ú@py_format12s          r8   Ú-test_prefix_from_name_strips_accents_and_padsrL      sp  € Ü×ÑÐ=Ð3Ð=ÐÐ3Ó4Ð=¸Ð=¸Ñ=×=×=×=Ò=Ð4×=×=×=×=×=Õ=Œ1×=×=×=Ñ=Œ1×=×=Õ=Ð×=×=Ó=Ð3×=×=Ó=Ð4×=×=Ó=¸×=×=×=×=×=×=×=Ü×ÑÐ.˜fÐ.Ð˜fÓ%Ð.¨Ð.¨Ñ.×.×.×.Ò.Ð%×.×.×.×.×.Õ.Œ1×.×.×.Ñ.Œ1×.×.Õ.Ð×.×.Ó.˜f×.×.Ó.Ð%×.×.Ó.¨×.×.×.×.×.×.×.Ü×ÑÐ.˜fÐ.Ð˜fÓ%Ð.¨Ð.¨Ñ.×.×.×.Ò.Ð%×.×.×.×.×.Õ.Œ1×.×.×.Ñ.Œ1×.×.Õ.Ð×.×.Ó.˜f×.×.Ó.Ð%×.×.Ó.¨×.×.×.×.×.×.×.Ü×ÑÐ*˜bÐ*Ð˜bÓ!Ð* UÐ* UÑ*×*×*×*Ò*Ð!×*×*×*×*×*Õ*Œ1×*×*×*Ñ*Œ1×*×*Õ*Ð×*×*Ó*˜b×*×*Ó*Ð!×*×*Ó* U×*×*×*×*×*×*×*Ð*r:   c                  ó   • [         R                  n So" U5      nSo2U:H  oD(       dì  [        R                  " SU4SX#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=pC[         R                  n S	o" U5      nS
o2U:H  oD(       dì  [        R                  " SU4SX#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=pC[         R                  n So" U5      nSo2U:H  oD(       dì  [        R                  " SU4SX#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=pCg )Nzmar-4jc-ibdÚ	MAR4JCIBDr=   )zT%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.normalize_code
}(%(py4)s)
} == %(py9)sr   r?   rA   r   Ú	MAR4JCKBDzMAR-4JC-KBD)zY%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.format_code_display
}(%(py4)s)
} == %(py9)szLMR-4827)r   Únormalize_coder    rF   r"   r#   r$   r%   r&   r'   Úformat_code_displayrG   s          r8   Útest_normalize_and_displayrR      sÓ  € Ü×ÑÐ9˜MÐ9Ð˜MÓ*Ð9¨kÐ9¨kÑ9×9×9×9Ò9Ð*×9×9×9×9×9Õ9Œ1×9×9×9Ñ9Œ1×9×9Õ9Ð×9×9Ó9˜M×9×9Ó9Ð*×9×9Ó9¨k×9×9×9×9×9×9×9Ü× Ñ Ð> Ð>Ð  Ó-Ð>°Ð>°Ñ>×>×>×>Ò>Ð-×>×>×>×>×>Õ>Œ1×>×>×>Ñ>Œ1×>×>Õ>Ð ×>×>Ó> ×>×>Ó>Ð-×>×>Ó>°×>×>×>×>×>×>×>Ü× Ñ Ð: Ð:Ð  Ó,Ð:°
Ð:°
Ñ:×:×:×:Ò:Ð,×:×:×:×:×:Õ:Œ1×:×:×:Ñ:Œ1×:×:Õ:Ð ×:×:Ó: ×:×:Ó:Ð,×:×:Ó:°
×:×:×:×:×:×:×:Ð:r:   c           
      óN  ^
• [        5        n[        R                  " S5      nUR                  SUS[        45        UR                  5         [        X"R                  SS5      S/5      m
U R                  [        SU
4S j5        [        R                  nSoC" X5      nSoeU:H  ow(       Gd7  [        R                  " S	U4S
XV4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      S.-  nSSU0-  n	[!        [        R"                  " U	5      5      eS =n=n=n=pvUR                  SU45        UR                  5         S S S 5        g ! , (       d  f       g = f)NÚCOLzBINSERT INTO families (code, family_name, school_id) VALUES (?,?,?)Úxr   r   zCOL-FRE-SH2r   c                 ó   >• [        T5      $ )N)Únext)ÚprefixÚseqs    €r8   Ú<lambda>Ú7test_unique_code_retries_on_collision.<locals>.<lambda>)   s	   ø€ ¼DÀ¼Ir:   r=   )zd%(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.generate_unique_code
}(%(py3)s, %(py5)s)
} == %(py10)sr   Úconn)r   r   r   r   r   Úpy10zassert %(py12)sÚpy12z!DELETE FROM families WHERE code=?)r   r   r   Úexecuter   ÚcommitÚiterr)   ÚsetattrÚgenerate_unique_coder    rF   r"   r#   r$   r%   r&   r'   )Úmonkeypatchr\   Útakenr+   r,   r/   Ú@py_assert9r0   Ú@py_format11Ú@py_format13rY   s             @r8   Ú%test_unique_code_retries_on_collisionri   #   sG  ø€ Ü	Œ�TÜ—’˜UÓ#ˆØ�‰ÐYÐ\aÐcfÔhnÐ[oÔpØ�‰ŒÜ�EŸ=™=¨¨bÓ1°=ÐAÓBˆØ×ÑœA˜|Ô-EÔFÜ×%Ñ%ÐC¨EÐCÐ% dÓ2ÐC°mÐC°mÑC×C×C×CÓCÐ2×C×C×C×C×CÕCŒq×C×C×CÑCŒq×C×CÕCÐ%×C×C×C×C×CÔC d×C×C×CÑC d×C×CÕC¨E×C×CÓCÐ2×C×CÓC°m×C×C×C×C×C×C×CØ�‰Ð8¸5¸(ÔCØ�‰Œ÷ 
�Žús   ŒHHÈ
H$c                 ó¢  • [        5        nUR                  S[        45        UR                  5         U R	                  [
        SS 5        [        R                  " [        5         [
        R                  " US5        S S S 5        UR                  S5        UR                  5         S S S 5        g ! , (       d  f       N8= f! , (       d  f       g = f)Nz[INSERT OR REPLACE INTO families (code, family_name, school_id) VALUES ('AAA-BBB-CCC','x',?)r   c                 ó   • g)NzAAA-BBB-CCC© )rX   s    r8   rZ   ÚEtest_unique_code_gives_up_after_too_many_collisions.<locals>.<lambda>3   s   € ¸Mr:   ÚAAAz-DELETE FROM families WHERE code='AAA-BBB-CCC')
r   r_   r   r`   rb   r   ÚpytestÚraisesÚRuntimeErrorrc   )rd   r\   s     r8   Ú3test_unique_code_gives_up_after_too_many_collisionsrr   /   s‡   € Ü	Œ�TØ�‰ÐrÔu{Ðt}Ô~Ø�‰ŒØ×ÑœA˜|Ñ-IÔJÜ�]Š]œ<Õ(Ü×"Ò" 4¨Ô/÷ )à�‰ÐDÔEØ�‰Œ÷ 
ˆ÷ )Õ(ú÷	 
�ús$   ‹AC Á%B/Á=)C Â/
B=	Â9C Ã 
Cul   prenom;nom;classe;email
Ana;Zapata;CP A;ana@example.com
Luis;Zapata;CE1 A;ana@example.com
Pau;QuirÃ³s;CP B;
c              ‹   ó  #   • SSU 30nU R                  SSU0US9I S h  v•N R                  5       S   S   n0 UESU0EnU(       a½  U R                  S	S
U0US9I S h  v•N owR                  nSo˜U	:H  oª(       d„  [        R
                  " SU
4SX‰4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©U$  Næ Nª7f)NÚAuthorizationzBearer z/api/admin/schoolsÚname©ÚjsonÚheadersÚschoolÚidzX-Schoolú/api/admin/settingsÚsettingséÈ   r=   ©z3%(py3)s
{%(py3)s = %(py1)s.status_code
} == %(py6)s©Úpy1r   r@   úassert %(py8)sÚpy8)	Úpostrw   ÚputÚstatus_coder    rF   r%   r&   r'   )ÚclientÚadmin_tokenru   r|   ÚhÚsidrx   Ú@py_assert0Ú@py_assert2rH   r,   Ú@py_format7Ú@py_format9s                r8   Ú_schoolrŽ   ?   sé   é € Ø	˜G K =Ð1Ð2€AØ—‘Ð1¸À¸ÐPQ�ÐR×R×
XÑ
XÓ
ZÐ[cÑ
dÐeiÑ
j€CØ$�Ð$�J Ñ$€GÞØ—j‘jÐ!6¸jÈ(Ð=SÐ]d�jÐe×eÐy×rÑrÐyÐvyÐyÐvyÑy×y×y×yÒyÐr×y×yÔyÐe×y×yÓyÐr×y×yÓyÐvy×y×y×y×y×y×yÕyØ€Nñ	 Sñ fùs"   ‚D D¡=DÁD	ÁB)DÄ	Dc              ƒ   ó:  #   • [        XSSS9I S h  v•N nU R                  SS[        0US9I S h  v•N   U R                  SUS9I S h  v•N R	                  5       S	    Vs/ s H  o3S
   PM	     nn/ n[        U5      nSovU:H  oˆo˜(       a  S U 5       n
[        U
5      o»n	U	(       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                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  oÕR                  U5        U(       a“  SS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " W
5      [        R                  " W5      S.-  oåR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                   " U5      5      eS =n	=n=n=n=n=p«g  GN| GN` GNKs  snf 7f)NzPrefijo ConfiguradoÚmrs©Úqr_code_prefixú/api/admin/students/importÚcsv_textrv   ú/api/admin/families©rx   Úfamiliesr   é   c              3   ó|   #   • U  H2  n[         R                  U5      =(       a    UR                  S 5      v •  M4     g7f)zMRS-N)r
   r   Ú
startswith©Ú.0Úcs     r8   Ú	<genexpr>ÚVtest_imported_families_get_codes_with_the_schools_configured_prefix.<locals>.<genexpr>L   s/   é € Ð"_ÒY^ÐTU¤:×#3Ñ#3°AÓ#6×#O¸1¿<¹<ÈÓ;OÔ#OÒY^ùs   ‚:<r=   )z0%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
} == %(py8)sÚlenÚcodes)r   r   r   r‚   z%(py10)sr]   z)%(py16)s
{%(py16)s = %(py12)s(%(py14)s)
}Úall)r^   Úpy14Úpy16r   zassert %(py19)sÚpy19)rŽ   rƒ   ÚCSVÚgetrw   r    r¢   r    rF   r"   r#   r$   r%   ÚappendÚ_format_boolopr&   r'   )r†   r‡   rx   Úfr¡   r+   r,   rI   r/   rŠ   Ú@py_assert13Ú@py_assert15r�   rg   Ú@py_format17Ú@py_format18r7   s                    r8   ÚCtest_imported_families_get_codes_with_the_schools_configured_prefixr¯   H   sƒ  é € Ü˜FÐ1FÐW\Ñ]×]€GØ
�+‰+Ð2¸*ÄcÐ9JÐT[ˆ+Ð
\×\Ð\Ø'-§z¡zÐ2GÐQX zÐ'Y×!Y× _Ñ _Ó aÐblÒ mÓnÒ m˜1ˆvŒYÑ m€EÐnÙ_Œ3ˆu‹:Ð_˜Ð_˜‰?×_Ñ"_ÑY^Ó"_Ð_œsÐ"_Ó_×_×_×_Õ_ˆ:×_×_×_×_×_Õ_Œ3×_×_×_Ñ_Œ3×_×_×_×_×_Ö_ˆu×_×_×_Ñ_ˆu×_×_Õ_ˆ:×_×_Ó_˜×_×_×_×_×_×_×_×_×_×_Ð_œs×_×_×_Ñ_œs×_×_Õ_Ð"_×_×_Ó_Ð_×_×_×_×_×_×_×_×_×_×_×_×_Ö_ò ^Ú\Ú!YùÒnùsD   ‚J‘J’J°J±JÁJÁ	JÁ JÁ.H JÊJÊJÊJc              ƒ   ó€  #   • [        XS5      I S h  v•N nU R                  SS[        0US9I S h  v•N   U R                  SUS9I S h  v•N R	                  5       S    Vs/ s H  o3S   PM	     nnS	 U 5       n[        U5      of(       d¢  S
S[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =pVg  GN GN Nís  snf 7f)NzLyon Centrer“   r”   rv   r•   r–   r—   r   c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)zLYO-N)rš   r›   s     r8   rž   ÚVtest_without_a_configured_prefix_it_is_derived_from_the_school_name.<locals>.<genexpr>S   s   é € Ð3ªU¨�|‰|˜F×#Ð#ªUùs   ‚z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}r¢   )r   r   r   )rŽ   rƒ   r¦   r§   rw   r¢   r"   r#   r    r$   r%   r&   r'   )r†   r‡   rx   rª   r¡   r+   r.   Ú@py_format5s           r8   ÚCtest_without_a_configured_prefix_it_is_derived_from_the_school_namer´   O   sà   é € Ü˜F°Ó?×?€GØ
�+‰+Ð2¸*ÄcÐ9JÐT[ˆ+Ð
\×\Ð\Ø'-§z¡zÐ2GÐQX zÐ'Y×!Y× _Ñ _Ó aÐblÒ mÓnÒ m˜1ˆvŒYÑ m€EÐnÙ3©UÓ3Ð3Œ3Ð3Ó3Ð3Õ3×3×3×3×3×3Ñ3Œ3×3×3×3Ñ3Œ3×3×3Õ3Ð3×3×3Ó3Ð3×3×3×3×3×3Ó3ò @Ú\Ù!YùÒnùsD   ‚D>’D1“D>±D4²D>Á	D7Á
D>Á!D9Á/CD>Ä4D>Ä7D>Ä9D>c              ƒ   ó6  #   • [        XSSS9I S h  v•N n[        XSSS9I S h  v•N nX#4 H"  nU R                  SS[        0US9I S h  v•N   M$     X#4 VVs/ s H7  o@R                  SUS	9I S h  v•N R	                  5       S
     H  oUS   PM	     M9     nnn[        U5      n[        U5      n[        U5      o—U	:H  n
So¹U:H  oÊ(       a  U(       Gd)  [        R                  " SX¬4SXyU4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      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      S.	-  nSSU0-  n[        [        R                  " U5      5      eS =n=n
=n=n=p›g  GNö GNæ GNÄ GN s  snnf 7f)Nz
Gemela UnoÚGEMr‘   z
Gemela Dosr“   r”   rv   r•   r–   r—   r   é   )r>   r>   )zp%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py12)s
{%(py12)s = %(py6)s(%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})
}zS%(py12)s
{%(py12)s = %(py6)s(%(py10)s
{%(py10)s = %(py7)s(%(py8)s)
})
} == %(py14)sr    Ú	all_codesr   )	r   r€   r   r@   r   r‚   r]   r^   r£   zassert %(py16)sr¤   )rŽ   rƒ   r¦   r§   rw   r    r   r    rF   r"   r#   r$   r%   r&   r'   )r†   r‡   ÚaÚbrˆ   rª   r¸   r‹   rf   Ú@py_assert11r,   r«   rH   Ú@py_format15r­   s                  r8   Ú>test_codes_are_unique_across_schools_even_with_the_same_prefixr½   V   sÖ  é € Ü�f¨<ÈÑN×N€AÜ�f¨<ÈÑN×N€AØ‹VˆØ�k‰kÐ6¸jÌ#Ð=NÐXYˆkÐZ×ZÒZñ à%&¡FÔ|¢F˜q¿:¹:ÐF[Ðef¸:Ð;g×5g×4mÑ4mÓ4oÐpzÕ4{¨q�6”Ñ4{‘¡F€IÑ|Üˆy‹>Ð5¤ Y£Ð5œS Ó0Ð5Ð0Ñ5Ð5°AÐ5°AÑ5×5×5×5×5Ò5ˆ>°A×5×5×5×5×5Õ5Œ3×5×5×5Ñ5Œ3×5×5×5×5×5Ö5ˆy×5×5×5Ñ5ˆy×5×5Õ5ˆ>×5×5×5×5×5Ô5œS×5×5×5Ñ5œS×5×5×5×5×5Ö5¤×5×5×5Ñ5¤×5×5×5×5×5Ö5 Y×5×5×5Ñ5 Y×5×5Õ5 ×5×5Ó5Ð0×5×5Ó5°A×5×5×5×5×5×5×5Ò5ò 	OÚNâZÚ5gùÓ|ùsV   ‚L‘L’L¤L
¥$LÁ	LÁ
LÁLÁ0LÁ1%LÂI2LÌ
LÌLÌLÌLÚbad)ÚMÚABCDEFGÚM4RzMA-Ru   Ã±andÃºc              ƒ   óø  #   • U R                  SSSU00US9I S h  v•N nUR                  nSoTU:H  of(       dº  [        R                  " SU4SXE4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=peg  NÜ7f)Nr{   r|   r’   rv   i�  r=   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚr©r   r   r   úassert %(py7)sr   )
r„   r…   r    rF   r"   r#   r$   r%   r&   r'   )	r†   Úadmin_headersr¾   rÄ   r+   r,   r.   r-   Ú@py_format8s	            r8   Ú test_prefix_setting_is_validatedrÉ   _   sŸ   é € à�j‰jÐ.°jÐCSÐUXÐBYÐ5ZÐdqˆjÐr×r€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××Ôñ 	sùs   ‚C:›C8œCC:c              ƒ   óâ  #   • U R                  SSSS00US9I S h  v•N nUR                  5       S   S   nSoCU:H  oU(       do  [        R                  " SU4SX445      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=pTU R                  SSSS00US9I S h  v•N nUR                  5       S   S   nSoCU:H  oU(       do  [        R                  " SU4SX445      [        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=pTg  GNO Nž7f)Nr{   r|   r’   Útstrv   ÚTSTr=   )z%(py1)s == %(py4)s)r€   r   zassert %(py6)sr@   r   )r„   rw   r    rF   r%   r&   r'   )r†   rÇ   rÄ   rŠ   r.   r‹   r³   rŒ   s           r8   Ú4test_prefix_setting_is_uppercased_and_can_be_clearedrÍ   e   s  é € Ø�j‰jÐ.°jÐCSÐUZÐB[Ð5\ÐfsˆjÐt×t€AØ�6‰6‹8�JÑÐ 0Ñ1Ð:°UÐ:°UÑ:×:×:×:Ò:Ð1×:×:Ô:Ð1×:×:Ó:°U×:×:×:×:×:×:Ó:Ø�j‰jÐ.°jÐCSÐUWÐBXÐ5YÐcpˆjÐq×q€AØ�6‰6‹8�JÑÐ 0Ñ1Ð7°RÐ7°RÑ7×7×7×7Ò7Ð1×7×7Ô7Ð1×7×7Ó7°R×7×7×7×7×7×7Ô7ò 	uáqùs#   ‚E/›E*œB2E/ÃE-ÃBE/Å-E/Útyped)zTST-1001ztst-1001ÚTST1001z
 tst 1001 c              ƒ   óÎ  #   • U R                  SSU0S9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[        R                  " U5      S	-   S
U0-  n[        [        R                  " U5      5      eS =n=pTUR                  5       S   oˆ[        :H  o™(       d²  [        R                  " SU	4SU[        45      [        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS.-  n
SSU
0-  n[        [        R                  " U5      5      eS =p‰g  GNÊ7f)Nú/api/portal/photosr   ©Úparamsr}   r=   rÃ   rÄ   rÅ   ú
>assert %(py7)sr   Úfamily_code)z%(py1)s == %(py3)sr   )r€   r   zassert %(py5)sr   )r§   r…   r    rF   r"   r#   r$   r%   r!   r&   r'   rw   r   )r†   rÎ   rÄ   r+   r,   r.   r-   rÈ   rŠ   r‹   Ú@py_format4s              r8   Ú2test_family_lookup_ignores_hyphens_case_and_spacesr×   n   s  é € à�j‰jÐ-°v¸u°oˆjÐF×F€AØ�=‰=Ð&˜CÐ&˜CÑ×&×&×&Ò&ˆ=×&×&×&×&×&Õ&ˆ1×&×&×&Ñ&ˆ1×&×&Õ&ˆ=×&×&Ó&˜C×&×&×&Ð& ×&×&×&×&×&×&Ð&Ø�6‰6‹8�MÑ"Ð/¤iÑ/×/×/×/Ò/Ð"¤i×/×/Ô/Ð"×/×/×/×/×/Ô/¤i×/×/×/Ñ/¤i×/×/×/×/×/×/Ô/ò 	Gùs   ‚G%˜G"™G
G%c              ƒ   óp  #   • U R                  SSS0S9I S h  v•N nUR                  nSo2U:H  oD(       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=pCU R                  SSS0S9I S h  v•N R                  5       S   nU R                  US   S   5      I S h  v•N oˆR                  n	So©U
:H  o3(       d„  [        R                  " SU4SXš4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:SSSSSSSSSSS./S .nU R                  S!US9I S h  v•N oˆR                  n	So©U
:H  o3(       d„  [        R                  " SU4SXš4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  GN“ GN¥ GNx N°7f)"Nz/api/portal/consentrÕ   Útst1001)rw   r}   r=   rÃ   rÄ   rÅ   rÆ   r   rÑ   r   rÏ   rÒ   Úphotosr   Úurlr~   r   r�   r‚   ÚNza@b.cog      "@zportrait.jpgzprint-10x15rU   r   F)Úphoto_filenameÚ	format_idÚformat_labelÚquantityÚ
unit_priceÚis_magic)rÕ   Úcustomer_nameÚcustomer_emailÚtotalÚitemsz/api/portal/orders)rƒ   r…   r    rF   r"   r#   r$   r%   r&   r'   r§   rw   )r†   rÄ   r+   r,   r.   r-   rÈ   rÚ   rŠ   r‹   rH   rŒ   r�   Úorders                 r8   ÚFtest_lookup_without_hyphens_also_works_for_consent_orders_and_previewsrè   u   sã  é € Ø�k‰kÐ/°}ÀiÐ6PˆkÐQ×Q€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ—J‘JÐ3¸VÀYÐ<O�JÐP×P×VÑVÓXÐYaÑb€FØ—*‘*˜V A™Y uÑ-Ó.×.ÐB×;Ñ;ÐB¸sÐB¸sÑB×B×B×BÒBÐ;×B×BÔBÐ.×B×BÓBÐ;×B×BÓB¸s×B×B×B×B×B×BÕBØ%¸ÈxÐbeØ(°}ÐVYÐghØ uñr.ð q/ñ 0€Eð —+‘+Ð2¸�+Ð?×?ÐS×LÑLÐSÐPSÐSÐPSÑS×S×S×SÒSÐL×S×SÔSÐ?×S×SÓSÐL×S×SÓSÐPS×S×S×S×S×S×SÖSò 	RâPÚ.ñ @ùsH   ‚J6˜J+™C0J6Ä	J.Ä
/J6Ä9J1Ä:C	J6ÈJ4ÈB(J6Ê.J6Ê1J6Ê4J6c              ƒ   ón  #   • [        S5       Vs/ s H&  oR                  SSS0S9I S h  v•N R                  PM(     nn/ o2S   nSoTU:H  ofov(       a  SoˆU;   o™nU(       Gd>  [        R                  " S	U4S
XE45      [        R
                  " U5      [        R
                  " U5      S.-  n
SSU
0-  o³R                  U5        U(       a—  [        R                  " SW	4SWU45      [        R
                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R
                  " U5      OSS.-  nSSU0-  oÓR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=p‰g  GNƒs  snf 7f)Né   rÑ   r   ÚZZZ9999rÒ   r   é”  i­  r=   )z%(py3)s == %(py6)s)r   r@   z%(py8)sr‚   ©Úin)z%(py11)s in %(py13)sÚstatuses)r   r   z%(py15)sr   zassert %(py18)sÚpy18)r   r§   r…   r    rF   r%   r¨   r"   r#   r$   r©   r&   r'   )r†   r*   rï   r+   r‹   rH   r,   rŠ   r1   r2   rŒ   r�   Ú@py_format14Ú@py_format16r­   Ú@py_format19s                   r8   Ú;test_a_wrong_code_still_counts_against_the_bruteforce_limitrô   €   sü   é € ÜjoÐprÔjsÓtÒjsÐef—z‘zÐ"6ÀÈ	Ð?R�zÐS×S×`Ô`Ñjs€HÐtÙ1�A‰;Ð1˜#Ð1˜#Ñ×1 #Ð1¨¡/×1×1×1Õ1ˆ;×1×1Ô1ˆ;×1×1Ó1˜#×1×1×1×1×1×1×1Ò1 #¨×1×1Ô1 #×1×1×1×1×1Ô1¨×1×1×1Ñ1¨×1×1×1×1×1×1×1×1×1×1×1×1×1×1ò TùÒtùs&   ‚F5�F0ªF-
«F0½E0F5Æ-F0Æ0F5c              ƒ   ó|  #   • U R                  SSS0SS9I S h  v•N n/ o!R                  nSoCU:H  oUoe(       a  UR                  S   nSo‡U:H  o™nU(       GdS  [        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-  o²R                  U5        U(       aa  [        R                  " S	W	4SWW45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  oÒR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=n=n=n=n=p˜g  GN 7f)Nz/r/MAR-4JC-IBDÚhostzphotos.meeconic.comF)rx   Úfollow_redirectsé.  Úlocationz-https://photos.meeconic.com/?code=MAR-4JC-IBDr=   )z3%(py4)s
{%(py4)s = %(py2)s.status_code
} == %(py7)srÄ   )r   r   r   z%(py9)sr   )z%(py12)s == %(py15)s)r^   r   z%(py17)sr   r   zassert %(py20)sÚpy20)r§   r…   rx   r    rF   r"   r#   r$   r%   r¨   r©   r&   r'   )r†   rÄ   r+   r.   r/   rH   rŠ   r»   r3   r«   rÈ   rJ   rò   r®   ró   Ú@py_format21s                   r8   Ú:test_qr_redirect_sends_the_family_to_the_portal_over_httpsrü   ‡   s  é € Ø�j‰jÐ)°FÐ<QÐ3RÐejˆjÐk×k€AÙl�=‰=Ðl˜CÐl˜CÑ×l A§I¡I¨jÑ$9ÐlÐ=lÐlÐ=lÑ$l×l×l×lÕlˆ=×l×l×l×l×lÕlˆ1×l×l×lÑlˆ1×l×lÕlˆ=×l×lÓl˜C×l×l×l×l×l×l×lÒlÐ$9Ð=l×l×lÔlÐ$9×l×lÓlÐ=l×l×l×l×l×l×l×l×l×l×l×l×l×l×lò 	lùs   ‚F<™F9šF F<c              ƒ   óè  #   • S GHä  nU R                  SU 3SS9I S h  v•N nUR                  nSoCU;   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[        R                  " U5      S
-   SU0-  n[        [        R                  " U5      5      eS =n=pTUR                  nSoCU:g  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=pTGMç     g  GNÐ7f)N)z..z%2e%2eÚ<aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarU   z/r/F)r÷   )rì   i3  i4  rí   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} in %(py5)srÄ   rÅ   rÔ   r   rø   )ú!=)z3%(py2)s
{%(py2)s = %(py0)s.status_code
} != %(py5)srÆ   )r§   r…   r    rF   r"   r#   r$   r%   r!   r&   r'   )r†   r¾   rÄ   r+   r,   r.   r-   rÈ   s           r8   Ú&test_qr_redirect_rejects_garbage_codesr   Œ   s  é € Ü.ˆØ—*‘*˜s 3 %˜[¸5�*ÐA×AˆØ�}‰}Ð4 Ð4 Ñ/×4×4×4Ò4ˆ}×4×4×4×4×4Õ4ˆq×4×4×4Ñ4ˆq×4×4Õ4ˆ}×4×4Ó4 ×4×4×4Ð4°×4×4×4×4×4×4Ð4Ø�}‰}Ð# Ð# Ñ#×#×#×#Ò#ˆ}×#×#×#×#×#Õ#ˆq×#×#×#Ñ#ˆq×#×#Õ#ˆ}×#×#Ó# ×#×#×#×#×#×#Ö#ò /ÚAùs   ‚G2ŸG/ GG2))Ú__doc__Úbuiltinsr"   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter    ÚreÚuuidro   Úcore.dbr   Úservicesr   Úutilsr   r   Úconftestr   r   Úcompiler
   r9   rL   rR   ri   rr   r¦   rŽ   r¯   r´   r½   ÚmarkÚparametrizerÉ   rÍ   r×   rè   rô   rü   r   rl   r:   r8   Ú<module>r     sÐ   ðÙ jß  „ ƒ	Û ã å Ý #Ý %ß &à�ZŠZÐgÓh€
òNò+ò;ò	òð y€òò`ò4ò6ð ‡�×Ñ˜Ò JÓKñ ó Lð ò
8ð ‡�×Ñ˜Ò"SÓTñ0ó Uð0òTò2òmó
$r:   