ó
    0hÉjî%  ã                   óŠ   • S r SSKrSSKJs  Jr  SSKJrJ	r	J
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)uH   Multi-Ã©cole : crÃ©ation, rÃ©glages Ã©ditables, isolation entre Ã©coles.é    N)ÚSCHOOLÚOTHER_SCHOOLÚDIRECTOR_PASSWORDc              ƒ   ó  #   • SSU 30nU R                  SSSS.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[        R                  " UR                  5      S-   SU0-  n[        [        R                  " U5      5      eS =n=peUR                  5       S   n	U	S   n
SojU: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ojU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¶U R                  S0 UESU	S   0ES9I S h  v•N R                  5       nUS   S   n
SojU: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   S   n
S ojU: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   S!   n
S ojU: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   S"   n
S ojU: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#SU	S   S$.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  GN^ GN, Nâ7f)'NÚAuthorizationúBearer ú/api/admin/schoolsu   CollÃ¨ge Saint-Ã‰loiúmotdepasse-8©ÚnameÚdirector_password©ÚjsonÚheaderséÈ   ©ú==©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚr©Úpy0Úpy2Úpy5ú
>assert %(py7)sÚpy7ÚschoolÚidzcollege-saint-eloi©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6Úhas_director_passwordT)Úis)z%(py1)s is %(py4)sú/api/admin/settingszX-School©r   ÚsettingsÚschool_nameÚ
shoot_dateÚ Úpartner_nameÚphotographer_nameú/api/admin/login©Úpasswordr   ©r   úassert %(py7)s)ÚpostÚstatus_codeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚtextÚAssertionErrorÚ_format_explanationr   Úget)ÚclientÚadmin_tokenÚhr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8r   Ú@py_assert0Ú@py_assert2Ú@py_format5Ú@py_format7Úss                  Ú^D:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\tests\test_schools_settings.pyÚ2test_operator_creates_a_school_with_clean_defaultsrN      sœ  é € Ø	˜G K =Ð1Ð2€AØ�k‰kÐ.Ð>TÐkyÑ5zð  EFˆkð  G÷  	G€AØ�=‰=Ð'˜CÐ'˜CÑ×'×'×'Ò'ˆ=×'×'×'×'×'Õ'ˆ1×'×'×'Ñ'ˆ1×'×'Õ'ˆ=×'×'Ó'˜C×'×'×'Ð' §¡×'×'×'×'×'×'Ð'Ø�V‰V‹X�hÑ€FØ�$‰<Ð/Ð/Ð/Ð/Ñ/×/×/×/Ò/ˆ<×/×/Ô/ˆ<×/×/Ó/Ð/×/×/×/×/×/×/Ó/ØÐ)Ñ*Ð2¨dÐ2¨dÐ2×2×2×2Ò2Ð*×2×2Ô2Ð*×2×2Ó2¨d×2×2×2×2×2×2Ó2à�z‰zÐ/Ð9X¸AÐ9X¸zÈ6ÐRVÉ<Ñ9XˆzÐY×	Y×_Ñ_Óa€AØˆZ‰=˜Ñ'ÐAÐ+AÐAÐ+AÑA×A×A×AÒAÐ'×A×AÔAÐ'×A×AÓAÐ+A×A×A×A×A×A×AÓAØˆZ‰=˜Ñ&Ð,¨"Ð,¨"Ñ,×,×,×,Ò,Ð&×,×,Ô,Ð&×,×,Ó,¨"×,×,×,×,×,×,Ó,ØˆZ‰=˜Ñ(Ð.¨BÐ.¨BÑ.×.×.×.Ò.Ð(×.×.Ô.Ð(×.×.Ó.¨B×.×.×.×.×.×.Ó.ØˆZ‰=Ð,Ñ-Ð3°Ð3°Ñ3×3×3×3Ò3Ð-×3×3Ô3Ð-×3×3Ó3°×3×3×3×3×3×3Ó3ð �k‰kÐ,ÀÐZ`ÐaeÑZfÑ3gˆkÐh×h€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××Ôò 	Gò 
Zñ 	iùs6   ‚V¡U?¢H4VÉVÉIVÒ"VÒ#CVÖVÖVc              ƒ   ó$  #   • SSU 30nU R                  SS[        S.US9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                  SSSS.US9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Nf Nª7f)Nr   r   r	   ÚX)r   Úslugr   é�  r   ©z3%(py3)s
{%(py3)s = %(py1)s.status_code
} == %(py6)s©r    Úpy3r#   úassert %(py8)sÚpy8ÚYÚcourtr   )r3   r   r4   r5   r6   r:   r=   r>   )	r@   rA   rB   rH   rI   Ú@py_assert5rD   rK   Ú@py_format9s	            rM   Ú,test_school_slug_conflict_and_short_passwordr\      sl  é € Ø	˜G K =Ð1Ð2€AØ—+‘+Ð2À#ÌvÑ9VÐ`a�+Ðb×bÐv×oÑoÐvÐsvÐvÐsvÑv×v×v×vÒvÐo×v×vÔvÐb×v×vÓvÐo×v×vÓvÐsv×v×v×v×v×v×vÕvØ—+‘+Ð2À#Ð\cÑ9dÐno�+Ðp×pð  E×}Ñ}ð  Eð  BEð  Eð  BEñ  E÷  E÷  E÷  Eò  EÐ}÷  E÷  Eô  EÐp÷  E÷  Eó  EÐ}÷  E÷  Eó  Eð  BE÷  E÷  E÷  E÷  E÷  E÷  Eö  Eò cÙpùs#   ‚#F¥F¦B=FÃ#FÃ$B(FÆFc              ƒ   ó°  #   • SSU 30nU R                  SSS0US9I S h  v•N R                  5       S   S   nU R                  SSS0US9I S h  v•N R                  5       S   S   nX4:g  oU(       dÛ  [        R                  " S	U4S
X445      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS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 ng  GN0 GN7f)Nr   r   r	   r   ÚDoublonr   r   r   ©ú!=)z%(py0)s != %(py2)sÚaÚb)r   r   zassert %(py4)sr!   )
r3   r   r5   r6   r7   r8   r9   r:   r=   r>   )r@   rA   rB   ra   rb   rC   Ú@py_format3rJ   s           rM   Ú0test_two_schools_with_same_name_get_distinct_idsrd      sÒ   é € Ø	˜G K =Ð1Ð2€AØ�{‰{Ð/°v¸yÐ6IÐSTˆ{ÐU×	U×[Ñ[Ó]Ð^fÑgÐhlÑm€AØ�{‰{Ð/°v¸yÐ6IÐSTˆ{ÐU×	U×[Ñ[Ó]Ð^fÑgÐhlÑm€AØ‰6‡M‡M‡M‚Mˆ1‡M‡M‡M‡M‡M…Mˆ1‡M‡M‡M�Mˆ1‡M‡M‡M‡M‡M†M�‡M‡M‡M�M�‡M‡M‡M‡M‡M‡MƒMò 
VÚ	Uùs"   ‚E E¡.EÁEÁDEÅEc              ƒ   ó  #   • U R                  SSSSSSSSS	S
SS.	0U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R                  5      S-   SU0-  n[        [        R                  " U5      5      eS =n=pTU R                  SUS9I S h  v•N R                  5       S   nUS   n	SoYU: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oYU: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oYU: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oYU: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!oYU: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SS"S#S$S%.0US9I S h  v•N   g  GNß GNÒ N7f)&Nr&   r(   z
2027-03-15z
2027-04-01z12.5z	APEL TestÚJeanneFé-   g      /@zops@example.com)	r*   Úclosure_dateÚrevenue_share_pctr,   r-   Úonline_paymentÚ	rgpd_daysÚ
price_packÚnotification_emailr   r   r   r   r   r   r   r   r'   r*   r   r   r"   r#   ri   rj   Úfalserk   Ú45rl   z15.5Té<   é   )rj   rk   rl   )Úputr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r   )r@   Úadmin_headersr   rC   rD   rE   rF   rG   rL   rH   rI   rJ   rK   s                rM   Útest_settings_update_roundtriprt   %   sÅ  é € Ø�j‰jÐ.°jØ"°LÐW]Ø#¸(ÐV[Ø tÐCTñCð 6ð ð	 ð ÷ 	€Að
 �=‰=Ð'˜CÐ'˜CÑ×'×'×'Ò'ˆ=×'×'×'×'×'Õ'ˆ1×'×'×'Ñ'ˆ1×'×'Õ'ˆ=×'×'Ó'˜C×'×'×'Ð' §¡×'×'×'×'×'×'Ð'Ø�z‰zÐ/¸ˆzÐG×	G×MÑMÓOÐPZÑ[€AØˆ\‰?Ð*˜lÐ*˜lÑ*×*×*×*Ò*ˆ?×*×*Ô*ˆ?×*×*Ó*˜l×*×*×*×*×*×*Ó*ØÐ Ñ!Ð+ VÐ+ VÑ+×+×+×+Ò+Ð!×+×+Ô+Ð!×+×+Ó+ V×+×+×+×+×+×+Ó+ØÐÑÐ) 'Ð) 'Ñ)×)×)×)Ò)Ð×)×)Ô)Ð×)×)Ó) '×)×)×)×)×)×)Ó)Øˆ[‰>Ð!˜TÐ!˜TÑ!×!×!×!Ò!ˆ>×!×!Ô!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Ó!Øˆ\‰?Ð$˜fÐ$˜fÑ$×$×$×$Ò$ˆ?×$×$Ô$ˆ?×$×$Ó$˜f×$×$×$×$×$×$Ó$à
�*‰*Ð*°*Ø¨R¸rñ?Cð 2DØMZð ð \÷ \ñ \ò	ò 
Hñ\ùs5   ‚!P
£P¤DP
Ä3PÄ4KP
Ï<PÏ=P
ÐP
ÐP
c           	   ƒ   ól  #   • U R                  SUS9I S h  v•N R                  5       S   nSS0SS0SS0S	S
0SS0SS0SS0SS04 GH  nU R                  SSU0US9I S h  v•N 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5      S-   SU0-  n	[        [        R                  " U	5      5      eS =n=pvGM     U R                  SSSSS.0US9I S h  v•N 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                  SUS9I S h  v•N R                  5       S   oªU:H  o»(       d¥  [        R
                  " SU4SX¢45      [        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 =p«g  GN GNÌ GN¾ NÑ7f)#Nr&   r'   r(   rk   r   i'  r*   z
15/03/2027ri   é–   Úprice_digitaléÿÿÿÿrm   zpas-un-emailÚinconnuÚxrj   z	peut-etrer   rR   r   r   r   r   r   r   zNE DOIT PAS PASSER)r,   rk   r2   ©z%(py1)s == %(py3)sÚbefore©r    rU   úassert %(py5)sr   )r?   r   rr   r4   r5   r6   r7   r8   r9   r:   r;   r=   r>   )r@   rs   r|   Úbadr   rC   rD   rE   rF   rG   rH   rI   Ú@py_format4s                rM   Ú6test_settings_validation_rejects_bad_values_atomicallyr�   7   sG  é € Ø—J‘JÐ4¸m�JÐL×L×RÑRÓTÐU_Ñ`€Fà	�aÐ˜;¨Ð-°¸lÐ/KÐNaÐcfÐMgØ	˜"ÐÐ 4°nÐEÈ	ÐSVÐGWÐZjÐlwÐYxôˆð —*‘*Ð2¸*ÀcÐ9JÐTa�*Ðb×bˆØ�}‰}Ð( Ð( Ñ#×(×(×(Ò(ˆ}×(×(×(×(×(Õ(ˆq×(×(×(Ñ(ˆq×(×(Õ(ˆ}×(×(Ó( ×(×(×(Ð( S×(×(×(×(×(×(Ó(ñð �j‰jÐ.°jÐSgÐvwÑBxÐ5yØ!.ð ð 0÷ 	0€Aà�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××ÓØ—*‘*Ð2¸M�*ÐJ×J×PÑPÓRÐS]Ñ^ÐhÐbhÑh×h×h×hÒhÐ^×h×hÔhÐ^×h×h×h×h×hÔhÐbh×h×h×hÑhÐbh×h×h×h×h×h×hÔhò Mò
 cò	0ñ KùsI   ‚L4–L)—A	L4Á L,Á!DL4Å1L/Å2C.L4É L2É!C	L4Ì,L4Ì/L4Ì2L4c              ƒ   óø  #   • U R                  SSSS00U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SSU0-  n[        [        R                  " U5      5      eS =n=pTg  NÜ7f)Nr&   r(   r,   rz   r   i“  r   r   r   r   r2   r   )
rr   r4   r5   r6   r7   r8   r9   r:   r=   r>   )r@   Údirector_headersr   rC   rD   rE   rF   rG   s           rM   Ú"test_director_cannot_edit_settingsr„   F   sž   é € Ø�j‰jÐ.°jÀ>ÐSVÐBWÐ5XÐbrˆjÐs×s€AØ�=‰=Ð˜CÐ˜CÑ×××Òˆ=×××××Õˆ1×××Ñˆ1××Õˆ=××Ó˜C××××××Ôñ 	tùs   ‚C:›C8œCC:c              ƒ   óB  #   • U R                  SSSS00US9I S h  v•N   U R                  SUS9I S h  v•N R                  5       S   S   nU R                  SUS9I S h  v•N R                  5       S   S   n/ nSocU:H  owo‡(       a  So”U	:g  oªnU(       Gdt  [        R                  " SU4SX645      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      S
.-  nSSU0-  oÅR                  U5        U(       a—  [        R                  " SW
4SUW	45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        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=p©g  GNû GNæ GN½7f)Nr&   r(   r,   zPartenaire Ar   r'   r   )z%(py2)s == %(py5)sra   )r   r   ú%(py7)sr   r_   )z%(py9)s != %(py12)srb   )Úpy9Úpy12ú%(py14)sÚpy14r   úassert %(py17)sÚpy17)rr   r?   r   r5   r6   r7   r8   r9   r:   ÚappendÚ_format_boolopr=   r>   )r@   rs   Úother_admin_headersra   rb   rC   rD   rE   rH   Ú@py_assert11Ú@py_assert10rF   rG   Ú@py_format13Ú@py_format15Ú@py_format16Ú@py_format18s                    rM   Ú*test_settings_are_isolated_between_schoolsr–   K   sT  é € Ø
�*‰*Ð*°*¸~È~Ð>^Ð1_Ðivˆ*Ð
w×wÐwØ�z‰zÐ/¸ˆzÐG×	G×MÑMÓOÐPZÑ[Ð\jÑk€AØ�z‰zÐ/Ð9LˆzÐM×	M×SÑSÓUÐV`ÑaÐbpÑq€AÙ6�Ð6�Ñ×6¨Ð6¨Ñ#6×6×6×6Õ6ˆ1×6×6×6×6×6Õ6ˆ1×6×6×6Ñ6ˆ1×6×6Õ6�×6×6×6×6×6×6×6Ò6 1¨×6×6×6×6×6Õ6 1×6×6×6Ñ6 1×6×6Õ6¨×6×6×6×6×6×6×6×6×6×6×6×6×6Ó6ò xÚ	GÚ	Mùs2   ‚H›HœH³H´+HÁHÁ F7HÈHÈHc              ƒ   ó  #   • U R                  SSSS00US9I S h  v•N   U R                  SUS9I S h  v•N R                  5       S   n/ o2oB(       a  US	   S
   S   S   nSoeU:H  ownU(       Gd	  SSS[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS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=pvg  GNg GNR7f)Nr&   r(   r-   z
Audit Testr   z'/api/admin/audit?action=settings.updater'   Úeventsr   ÚdetailsÚtoz%(py2)sr   Úevr   )z%(py5)s == %(py8)s)r   rW   ú%(py10)sÚpy10úassert %(py13)sÚpy13)rr   r?   r   r7   r8   r5   r9   r:   r�   r6   rŽ   r=   r>   )r@   rs   r›   rC   rH   rD   Ú@py_assert7Ú@py_assert6rc   r[   Ú@py_format11Ú@py_format12Ú@py_format14s                rM   Útest_settings_change_is_auditedr¥   R   s  é € Ø
�*‰*Ð*°*Ð?RÐT`Ð>aÐ1bÐlyˆ*Ð
z×zÐzØ—
‘
ÐDÈm�
Ð\×
\×	bÑ	bÓ	dÐemÑ	n€BÚM�2�"�Q‘%˜	Ñ"Ð#6Ñ7¸Ñ=ÐMÀÐMÀÑM×M×M×M×M×M×MÔMˆ2×M×M×MÑMˆ2×M×M×MÑMŽ2×M×MÓMÐ=À×M×MÔMÐ=×M×MÓMÀ×M×M×M×M×M×M×M×M×M×M×M×M×MÑMò {Ú
\ùs    ‚F›FœF³F´EFÆFc              ƒ   óÒ  #   • SSU 30nU R                  SSSS.US9I S h  v•N R                  5       S   S	   nU R                  S
SUS.S9I S h  v•N R                  5       S   nSSKJn  SSKJn  U" 5        nUR                  SU" 5       X6" 5       45        UR                  5         S S S 5        U R                  S5      I S h  v•N oˆR                  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 R                  SU 3SS0US9I S h  v•N   U R                  S5      I S h  v•N oˆR                  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 R                  SSSU 30S9I S h  v•N oˆR                  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 R                  S
SUS.S9I S h  v•N oˆR                  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ºg  GN  GNt! , (       d  f       GN&= f GN GNX GNB GN† NË7f) Nr   r   r	   zA Fermerr
   r   r   r   r   r.   r/   r1   Útokenr   ©Úget_db)Ú
utcnow_isozmINSERT INTO families (code, family_name, created_at, school_id, consent_at) VALUES ('CLO-5005','Ferme',?,?,?)z /api/portal/photos?code=CLO-5005r   r   rS   rT   rV   rW   z/api/admin/schools/ÚactiveFi”  z/api/director/dashboardr'   i‘  )r3   r   Úcore.dbr©   Úcore.timeutilrª   ÚexecuteÚcommitr?   r4   r5   r6   r:   r=   r>   Úpatch)r@   rA   rB   Úsidr§   r©   rª   ÚconnrH   rI   rZ   rD   rK   r[   s                 rM   Ú2test_deactivated_school_blocks_portal_and_directorr³   X   sà  é € Ø	˜G K =Ð1Ð2€AØ—‘Ð1ÀÐbpÑ8qØ%&ð ð (÷ (ß)-©«°ñ:Ø:>ñ@€Cà—;‘;Ð1À^Ð_bÑ8c�;Ðd×d×jÑjÓlÐmtÑu€EÝÝ(Ù	Œ�TØ�‰ð  EÙ “l C¨«Ð6ô	8à�‰Œ÷ 
ð —*‘*Ð?Ó@×@Ð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Ø
�,‰,Ð,¨S¨EÐ2¸(ÀEÐ9JÐTUˆ,Ð
V×VÐVØ—*‘*Ð?Ó@×@Ð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Ø—*‘*Ð6ÀÐT[Ð\aÐ[bÐRcÐ@d�*Ð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Ø—+‘+Ð0ÀNÐ^aÑ7b�+Ð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ò(âd÷ 
Žúò AÚVÚ@ÚeÙcùs‘   ‚O'¡O¢.O'ÁOÁ(O'Á9/OÂ(O'ÃOÃB?O'ÆOÆO'ÆOÆB>O'ÉO"ÉB<O'ÌO%ÌB(O'ÏO'Ï
OÏ	O'ÏO'ÏO'Ï"O'Ï%O'c              ƒ   ó  #   • U R                  SSSU 30S9I S h  v•N nUR                  5       S    Vs0 s H  o3S   U_M
     nn/ n[        U;   ofov(       a
  [        U;   oˆnU(       Gdù  [        R
                  " SU4S[        U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S
.-  n	SSU	0-  o¥R                  U
5        U(       aÙ  [        R
                  " SW4S[        U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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=phU[           S   nSogU:¬  oÿ(       do  [        R
                  " SU4SXv45      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=pög  GNÜs  snf 7f)Nr	   r   r   r'   Úschoolsr   ©Úin)z%(py2)s in %(py4)sr   )r   r!   z%(py6)sr#   )z%(py8)s in %(py10)sr   )rW   r�   z%(py12)srˆ   r   zassert %(py15)sÚpy15Úfamiliesé   )ú>=)z%(py1)s >= %(py4)sr   r"   )r?   r   r   r   r5   r6   r7   r8   r9   r:   r�   rŽ   r=   r>   )r@   rA   r   rL   rµ   rC   rE   rH   Ú@py_assert9rJ   rK   r¢   r’   r¤   r”   rI   s                   rM   Útest_schools_listing_has_countsr½   j   sŸ  é € Ø�j‰jÐ-¸È7ÐS^ÐR_ÐI`Ð7aˆjÐb×b€AØ#$§6¡6£8¨IÒ#6Ó7Ò#6˜a�‰w˜ŠzÑ#6€GÐ7Ù8Œ6�WÑ×8¤°Ñ!8×8×8×8Õ8Œ6�W×8×8×8×8×8Õ8Œ6×8×8×8Ñ8Œ6×8×8×8×8×8Ö8�W×8×8×8Ñ8�W×8×8×8×8×8×8×8Ô8¤°×8×8×8×8×8Õ8¤×8×8×8Ñ8¤×8×8×8×8×8Ö8°×8×8×8Ñ8°×8×8×8×8×8×8×8×8×8×8×8×8×8Ð8Ø”6‰?˜:Ñ&Ð+¨!Ð+¨!Ñ+×+×+×+Ò+Ð&×+×+Ô+Ð&×+×+Ó+¨!×+×+×+×+×+×+Ô+ò 	cùÚ7ùs!   ‚K?›K7œK?µK:ÁJ4K?Ë:K?c              ƒ   óŠ  #   • U R                  SUS9I S h  v•N R                  5       S    Vs1 s H  o3S   iM	     nnU R                  SUS9I S h  v•N R                  5       S    Vs1 s H  o3S   iM	     nn/ nSowU;   oˆo˜(       a  SoªU;  o»n	U	(       Gdt  [        R                  " SU4SXt4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        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=p«/ nSowU;   oˆo˜(       a  SoªU;  o»n	U	(       Gds  [        R                  " SU4SXu4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        U(       a–  [        R                  " SU4SX¥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=p«g  GN�s  snf  GNjs  snf 7f)Nz/api/admin/familiesr'   r¹   ÚcodezTST-1001zOTH-2002r¶   )z%(py3)s in %(py5)sÚmine)rU   r   r†   r   )únot in)z%(py10)s not in %(py12)s)r�   rˆ   r‰   rŠ   r   r‹   rŒ   Útheirs)r?   r   r5   r6   r:   r7   r8   r9   r�   rŽ   r=   r>   )r@   rs   r�   ÚfrÀ   rÂ   rC   rI   rD   rH   r¼   r�   rF   rG   r’   r“   r”   r•   s                     rM   Ú*test_families_are_isolated_between_schoolsrÄ   q   s  é € Ø&,§j¡jÐ1FÐP] jÐ&^× ^×dÑdÓfÐgqÒrÓsÒr˜!ˆfŒIÑr€DÐsØ(.¯
©
Ð3HÐRe¨
Ð(f×"f×!lÑ!lÓ!nÐoyÒ!zÓ{Ò!z˜A�ŒiÑ!z€FÐ{Ù8ˆ:Ð8˜Ñ×8 *Ð8°DÑ"8×8×8×8Õ8ˆ:×8×8Ô8ˆ:×8×8×8×8×8Ô8˜×8×8×8Ñ8˜×8×8×8×8×8×8×8Ô8 *°D×8×8Ô8 *×8×8×8×8×8Ô8°D×8×8×8Ñ8°D×8×8×8×8×8×8×8×8×8×8×8×8×8Ô8Ù<ˆ:Ð<˜Ñ×< JÐ<°fÑ$<×<×<×<Õ<ˆ:×<×<Ô<ˆ:×<×<×<×<×<Ô<˜×<×<×<Ñ<˜×<×<×<×<×<×<×<Ô< J×<×<Ô< J×<×<×<×<×<Ô<°f×<×<×<Ñ<°f×<×<×<×<×<×<×<×<×<×<×<×<×<Õ<ò !_ùÒsÚ"fùÒ{ùs>   ‚O–N3—O®N6¼OÁN;ÁOÁ)N>Á7L=OÎ6OÎ>Oc              ƒ   ó  #   • SSK nSSKJn  U S-  nUR                  U5      nUR	                  S5        UR                  5         UR                  5         UR                  USU5        SSKnSSK	J
n  SSKJn  UR                  5         UR                  5       n	/ n
[        U	5      nS	oËU:H  oÝoí(       a  U	S   S
   nSnUU:H  nUnU(       Gd¨  [         R"                  " SU4SX¼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      [         R*                  " U5      S.-  nSSU0-  nU
R-                  U5        U(       ab  [         R"                  " SW4SWW45      [         R*                  " U5      [         R*                  " U5      S.-  nSSU0-  nU
R-                  U5        [         R.                  " U
S5      0 -  nSSU0-  n[1        [         R2                  " U5      5      eS=n=n
=n=n=n=n=nnU	S   S   nUR5                  U5      S   nSnUU:H  nU(       dp  [         R"                  " SU4SUU45      [         R*                  " U5      [         R*                  " U5      S.-  nSSU0-  n[1        [         R2                  " U5      5      eS=n=nnUR5                  U5      S    nS!nUU:H  nU(       dp  [         R"                  " SU4SUU45      [         R*                  " U5      [         R*                  " U5      S.-  nSSU0-  n[1        [         R2                  " U5      5      eS=n=nnU" 5        nUR7                  S"5      R9                  5       S#   oîU:H  nU(       d¦  [         R"                  " SU4S$U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-  n[1        [         R2                  " U5      5      eS=nnUR7                  S)5      R9                  5       S#   oîU:H  nU(       d¦  [         R"                  " SU4S$U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-  n[1        [         R2                  " U5      5      eS=nnSSS5        g! , (       d  f       g= f7f)*uM   Une base d'avant le multi-Ã©cole (table settings globale) devient une Ã©cole.r   N)Úconfigz	legacy.dbuô  
        CREATE TABLE settings (key TEXT PRIMARY KEY, value TEXT);
        INSERT INTO settings VALUES ('school_name','Ã‰cole Historique'),('rgpd_days','30'),('partner_name','APEL Histo');
        CREATE TABLE families (code TEXT PRIMARY KEY, family_name TEXT NOT NULL, email TEXT, created_at TEXT);
        INSERT INTO families VALUES ('OLD-1111','Ancien',NULL,'2026-01-01');
        CREATE TABLE orders (id TEXT PRIMARY KEY, family_code TEXT NOT NULL, customer_name TEXT, customer_email TEXT,
            shipping_address TEXT, total REAL NOT NULL, status TEXT NOT NULL DEFAULT 'pending', items_json TEXT NOT NULL,
            created_at TEXT NOT NULL);
        INSERT INTO orders VALUES ('o1','OLD-1111','n','e',NULL,9,'pending','[]','2026-01-02');
    ÚDB_PATHr¨   ©Úschool_serviceé   r   u   Ã‰cole Historiquer   )z0%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
} == %(py8)sÚlenrµ   )r   rU   r   rW   rœ   r�   )z%(py13)s == %(py16)s)rŸ   Úpy16z%(py18)sÚpy18zassert %(py21)sÚpy21r   rk   Ú30r   r   r"   r#   r,   z
APEL Histoz4SELECT school_id FROM families WHERE code='OLD-1111'Ú	school_idr{   r±   r}   r~   r   z*SELECT school_id FROM orders WHERE id='o1')Úsqlite3ÚcorerÆ   ÚconnectÚexecutescriptr¯   ÚcloseÚsetattrÚmainr¬   r©   ÚservicesrÉ   Úinit_allÚlist_schoolsrË   r5   r6   r7   r8   r9   r:   r�   rŽ   r=   r>   Úget_settingsr®   Úfetchone) Útmp_pathÚmonkeypatchrÑ   rÆ   ÚlegacyÚcr×   r©   rÉ   rµ   rC   rD   r    r¡   rH   Ú@py_assert12Ú@py_assert15Ú@py_assert14r[   r¢   Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22r±   rE   rI   rJ   rK   r²   r€   rF   s                                    rM   Ú.test_legacy_single_school_database_is_migratedrè   x   sP  é € ãÝØ˜Ñ#€FØ�‰˜Ó€AØ‡O�Oð 	ô 		ð ‡H�H„J�—‘”	Ø×Ñ˜ 	¨6Ô2ÛÝÝ'Ø‡M�M„OØ×)Ñ)Ó+€GÙJŒ3ˆw‹<ÐJ˜1ÐJ˜1Ñ×J ¨¡¨FÑ!3ÐJÐ7JÐJÐ!3Ð7JÑ!J×J×J×JÖJˆ<×J×J×J×J×JÕJŒ3×J×J×JÑJŒ3×J×J×J×J×JÖJˆw×J×J×JÑJˆw×J×JÕJˆ<×J×JÓJ˜1×J×J×J×J×J×J×JÓJÐ!3Ð7J×J×JÔJÐ!3×J×JÓJÐ7J×J×J×J×J×J×J×J×J×J×J×J×J×J×JÐJØ
�!‰*�TÑ
€CØ×&Ñ& sÓ+¨KÑ8Ð@¸DÐ@Ð8¸DÑ@×@×@×@Ó@Ð8¸D×@×@Ô@Ð8×@×@Ó@¸D×@×@×@×@×@×@Ô@Ø×&Ñ& sÓ+¨NÑ;ÐK¸|ÐKÐ;¸|ÑK×K×K×KÓKÐ;¸|×K×KÔKÐ;×K×KÓK¸|×K×K×K×K×K×KÔKÙ	Œ�TØ�|‰|ÐRÓS×\Ñ\Ó^Ð_jÑkÐrÐorÑr×r×r×rÓrÐkÐor×r×rÔrÐk×r×r×r×r×rÔrÐor×r×r×rÑrÐor×r×r×r×r×r×rÔrØ�|‰|ÐHÓI×RÑRÓTÐU`ÑaÐhÐehÑh×h×h×hÓhÐaÐeh×h×hÔhÐa×h×h×h×h×hÔhÐeh×h×h×hÑhÐeh×h×h×h×h×h×hÔh÷ 
�Žüs   ‚N?V
ÏF/U9Õ0	V
Õ9
VÖV
c            	      ó  • SS K n SSKJn  UR                  nSnSoB" X45      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      [        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=pvS H9  n
U R                  UR                  5         UR                  SU
5        S S S 5        M;     g ! , (       d  f       MM  = f)Nr   rÈ   Úbrand_colorz#1a2b4cz#1A2B4Cr   )zZ%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s._normalize
}(%(py4)s, %(py6)s)
} == %(py11)srÉ   )r   r   r!   r#   rW   Úpy11rž   rŸ   )Úredz#12z#FFFF00z#F7F4EE)ÚpytestrØ   rÉ   Ú
_normalizer5   r6   r7   r8   r9   r:   r=   r>   ÚraisesÚSettingsError)rí   rÉ   rC   rE   rZ   r    r‘   r¼   r£   r¤   r   s              rM   Ú?test_brand_color_is_validated_and_must_keep_white_text_readablerñ   ˜   sð   € ÛÝ'Ø×$Ñ$ÐK ]ÐK°IÐKÐ$ ]Ó>ÐKÀ)ÐKÀ)ÑK×K×K×KÒKÐ>×K×K×K×K×KÕKˆ>×K×K×KÑKˆ>×K×KÕKÐ$×K×KÓK ]×K×KÓK°I×K×KÓKÐ>×K×KÓKÀ)×K×K×K×K×K×K×KÑKÛ3ˆØ�]‰]˜>×7Ñ7Õ8Ø×%Ñ% m°SÔ9÷ 9Ñ8ò 4ß8Ö8ús   ÅE2Å2
F	c            
      ó´  • SS K n SSKJn  SSKJn  [        SS/ SSSS	9nUR                  U R                  UR                  " S0 UD65      5      R                  S
5      nUR                  U R                  UR                  " S0 UDSS0D65      5      R                  S
5      nUR                  obR                  S-
  S4ov" U5      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      [        R"                  " U5      [        R"                  " U	5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=n=n=p©UR                  obR                  S-
  S4ov" U5      nSo˜U	:g  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      [        R"                  " U5      [        R"                  " U	5      S.-  nSSU0-  n[%        [        R&                  " U5      5      eS =n=n=n=p©g )Nr   )ÚImage)Úcard_servicezMAR-AAA-BBBÚTestrP   zhttps://p.exampleÚ60)r¿   Úfamily_nameÚstudentsr)   Ú
portal_urlrk   ÚRGBrê   z#0B6B3Aé   é
   )é   ék   é:   r   )zN%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getpixel
}(%(py4)s)
} == %(py9)sÚgreen)r   r   r!   r#   r‡   zassert %(py11)srë   r_   )zN%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getpixel
}(%(py4)s)
} != %(py9)sÚplain© )ÚioÚPILró   rØ   rô   ÚdictÚopenÚBytesIOÚrender_cardÚconvertÚgetpixelÚCARD_Wr5   r6   r7   r8   r9   r:   r=   r>   )r  ró   rô   Úkwr  r   rC   rE   rZ   Ú@py_assert8r    Ú@py_format10r£   s                rM   Ú'test_card_header_uses_the_school_colourr  ¡   s×  € ÛÝÝ%Ü	�=¨f¸rÈsØ,¸ñ
>€Bà�J‰J�r—z‘z ,×":Ò":Ñ"@¸RÑ"@ÓAÓB×JÑJÈ5ÓQ€EØ�J‰J�r—z‘z ,×":Ò":Ñ"W¸RÑ"WÈYÒ"WÓXÓY×aÑaÐbgÓh€EØ�>‰>ÐJ×.Ñ.°Ñ3°RÐ8ÐJˆ>Ð8Ó9ÐJ¸]ÐJ¸]ÑJ×J×J×JÒJÐ9×J×J×J×J×JÕJˆ5×J×J×JÑJˆ5×J×JÕJˆ>×J×JÓJÐ8×J×JÓJÐ9×J×JÓJ¸]×J×J×J×J×J×J×JØ�>‰>ÐJ×.Ñ.°Ñ3°RÐ8ÐJˆ>Ð8Ó9ÐJ¸]ÐJ¸]ÑJ×J×J×JÒJÐ9×J×J×J×J×JÕJˆ5×J×J×JÑJˆ5×J×JÕJˆ>×J×JÓJÐ8×J×JÓJÐ9×J×JÓJ¸]×J×J×J×J×J×J×JÐJó    )Ú__doc__Úbuiltinsr7   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter5   Úconftestr   r   r   rN   r\   rd   rt   r�   r„   r–   r¥   r³   r½   rÄ   rè   rñ   r  r  r  rM   Ú<module>r     sa   ðÙ Nß  „ × <Ñ <ò ò&Eòò\ò$iò ò
7òNòxò$,ò=òiò@:ó	Kr  