ó
    ˆƒEjH  ã                  óæ   • S SK Jr  S SKrS SKJs  Jr  S SKrS SK	J
r
Jr  S SKrS SKrS SKJrJrJrJr  \R&                  " SS9S 5       rS r\
" S	5      S
 5       rS rS rS r\
" S	5      S 5       rg)é    )ÚannotationsN)ÚpatchÚ	MagicMock)Úhandle_backup_createÚhandle_backup_deleteÚhandle_backup_listÚhandle_backup_restoreT)Úautousec              #  ó4  #   • [         R                  R                  n[        U 5      [         R                  l        [        R
                  R                  S5      n[        U 5      [        R
                  S'   [         R                  R                  n[        U 5      [         R                  l        U v •  U[         R                  l        U[         R                  l        U(       a  U[        R
                  S'   g[        R
                  R                  SS5        g7f)zDOverride BACKUP_BASE_DIR with a temporary folder for isolated tests.ÚWOLFPANEL_DEV_HOMEN)	ÚactionsÚbackupÚBACKUP_BASE_DIRÚstrÚosÚenvironÚgetÚDEV_HOMEÚpop)Útmp_pathÚoriginal_baseÚoriginal_dev_homeÚoriginal_backup_dev_homes       Ú?D:\Programs\laragon\www\wolf\agent\tests\test_actions_backup.pyÚsetup_temp_backup_dirr      s±   é € ô —N‘N×2Ñ2€MÜ%(¨£]„G‡N�NÔ"ô Ÿ
™
Ÿ™Ð';Ó<ÐÜ'*¨8£}„B‡J�JÐ#Ñ$Ü&Ÿ~™~×6Ñ6ÐÜ! (›m„G‡N�NÔà
‚Nà%2„G‡N�NÔ"Ø6„G‡N�NÔÞØ+<Œ�
‰
Ð'Ò(ä
�
‰
�‰Ð+¨TÕ2ùs   ‚DDc                ó†  • [         R                  R                  [        U 5      SSS5      n[	        SUS.5      nUS   nSoCUL 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=pTSo2S   oCU;   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 )NÚvarÚwwwÚtestzinvalid/domain)ÚdomainÚdocrootÚsuccessF©Úis©z%(py1)s is %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6zInvalid domain name formatÚerror©Úin©z%(py1)s in %(py4)s)
r   ÚpathÚjoinr   r   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanation)r   r!   ÚresÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7s           r   Ú!test_backup_create_invalid_domainr<   &   sÈ   € Ü�g‰g�l‰lœ3˜x›=¨%°¸Ó?€GÜ
Ð*:ÀwÑOÓ
P€CØˆy‰>Ð"˜UÐ"˜UÐ"×"×"×"Ò"ˆ>×"×"Ô"ˆ>×"×"Ó"˜U×"×"×"×"×"×"Ó"Ø'Ð7¨w©<Ð7¨<Ñ7×7×7×7Ò7Ð'×7×7Ô7Ð'×7×7Ó7¨<×7×7×7×7×7×7Ô7ó    zsubprocess.runc                ó0  • Sn[         R                  R                  [        U5      SSS5      n[         R                  " USS9  [        SSS	9   [        UUSS
S.5      nUS   nSoeUL ow(       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=pvUS   nSoeU:H  ow(       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=pvUS   oUR                  or S3o§" U
5      o»(       dy  S[        R                  " U5      [        R                  " U5      [        R                  " U
5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n=p«US   oUR                  nSo§" U
5      o»(       dy  S[        R                  " U5      [        R                  " U5      [        R                  " U
5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n=p«U R                  nSo­U
:H  of(       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=pjS S S 5        g ! , (       d  f       g = f)!Núexample.comr   r   r!   T©Úexist_okzos.path.getsizei90  ©Úreturn_valueF)r    r!   Úinclude_filesÚ
include_dbr"   r#   r%   r&   r)   r*   Ú
size_bytes©ú==©z%(py1)s == %(py4)sÚfilenameÚ_zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})r'   Úpy3Úpy5Úpy7z.tar.gzzJassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.endswith
}(%(py5)s)
}é   )z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)sÚmock_run©Úpy0Úpy2rM   úassert %(py7)srN   )r   r/   r0   r   Úmakedirsr   r   r1   r2   r3   r4   r5   Ú
startswithÚendswithÚ
call_countÚ@py_builtinsÚlocalsÚ_should_repr_global_name)rP   r   r    r!   r6   r7   r8   r9   r:   r;   Ú@py_assert4Ú@py_assert6Ú@py_format8Ú@py_assert1Ú@py_format6s                  r   Útest_backup_create_successra   -   sG  € à€FÜ�g‰g�l‰lœ3˜x›=¨%°¸	ÓB€GÜ‡K‚K� $Ò'ô 
Ð ¨uÓ	5Ü"ØØØ!Øñ	$
ó ˆð �9‰~Ð% Ð% Ð%×%×%×%Ò%ˆ~×%×%Ô%ˆ~×%×%Ó% ×%×%×%×%×%×%Ó%Ø�<Ñ Ð) EÐ) EÑ)×)×)×)Ò)Ð ×)×)Ô)Ð ×)×)Ó) E×)×)×)×)×)×)Ó)Ø�:‰Ð7×)Ñ)Ð7¨H°A¨,Ð7Ð)¨,Ó7Ð7Õ7×7×7Ð7ˆ×7×7Ó7Ð)×7×7Ó7¨,×7×7Ó7Ð7×7×7×7×7×7Ö7Ø�:‰Ð2×'Ñ'Ð2¨	Ð2Ð'¨	Ó2Ð2Õ2×2×2Ð2ˆ×2×2Ó2Ð'×2×2Ó2¨	×2×2Ó2Ð2×2×2×2×2×2Ö2Ø×"Ñ"Ð' aÐ' aÑ'×'×'×'Ò'Ð"×'×'×'×'×'Õ'ˆx×'×'×'Ñ'ˆx×'×'Õ'Ð"×'×'Ó' a×'×'×'×'×'×'Ó'÷ 
6×	5Ö	5ús   ÁL1NÎ
Nc                ó‚  • [         R                  R                  [        U 5      SS5      n[	        SU05      nUS   nSoCUL 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=pTSo2S   oCU;   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 )Nz..zoutside.tar.gzÚbackup_pathr"   Fr#   r%   r&   r)   r*   z outside of backup base directoryr+   r,   r.   )
r   r/   r0   r   r   r1   r2   r3   r4   r5   )r   Úoutside_filer6   r7   r8   r9   r:   r;   s           r   Ú!test_backup_delete_path_traversalre   B   sÆ   € Ü—7‘7—<‘<¤ H£¨tÐ5EÓF€LÜ
 ¨|Ð<Ó
=€CØˆy‰>Ð"˜UÐ"˜UÐ"×"×"×"Ò"ˆ>×"×"Ô"ˆ>×"×"Ó"˜U×"×"×"×"×"×"Ó"Ø-Ð=°W±Ð=°Ñ=×=×=×=Ò=Ð-×=×=Ô=Ð-×=×=Ó=°×=×=×=×=×=×=Ô=r=   c                ó*  • [         R                  R                  [        U 5      S5      n[         R                  " USS9  [         R                  R                  US5      n[        US5       nUR                  S5        S S S 5        [         R                  oDR                  oU" U5      of(       Gd  SS[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        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 =n=pV[        SU05      nUS   n	SoYU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S   n	SoYUL oª(       do  [        R                   " SU
4SX•45      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=p¥[         R                  oDR                  oU" U5      of(       + oÝ(       Gd  SS[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U5      [        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 =n=n=pmg ! , (       d  f       GN�= f)Nr?   Tr@   ú"example.com_20260101_120000.tar.gzÚwúmock backup contentzbassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}r   Úbackup_file)rR   rS   r(   rM   rN   rc   r"   r#   r%   r&   r)   r*   Údeletedzfassert not %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
})r   r/   r0   r   rU   ÚopenÚwriteÚexistsrY   rZ   r1   r[   r3   r4   r5   r   r2   )r   Ú
domain_dirrj   Úfr_   r8   r]   r^   r6   r7   r9   r:   r;   Ú@py_assert8Ú@py_format9s                  r   Útest_backup_delete_successrs   I   sA  € Ü—‘—‘œc (›m¨]Ó;€JÜ‡K‚K�
 TÒ*Ü—'‘'—,‘,˜zÐ+OÓP€KÜ	ˆk˜3Ô	 1Ø	�‰Ð%Ô&÷ 
 ô �7‰7Ð&�>‰>Ð&ˆ>˜+Ó&Ð&Ö&×&×&×&×&×&Ñ&Œ2×&×&×&Ñ&Œ2×&×&Õ&ˆ7×&×&Ó&ˆ>×&×&×&×&×&Ô&˜+×&×&×&Ñ&˜+×&×&Õ&Ð&×&×&×&×&×&Ô&Ü
 ¨{Ð;Ó
<€CØˆy‰>Ð!˜TÐ!˜TÐ!×!×!×!Ò!ˆ>×!×!Ô!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Ó!Øˆy‰>Ð!˜TÐ!˜TÐ!×!×!×!Ò!ˆ>×!×!Ô!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Ó!Ü�w‰wÐ*�~‰~Ð*ˆ~˜kÓ*Ð*Ô*Ð*Ö*×*×*×*×*×*Ñ*Œr×*×*×*Ñ*Œr×*×*Õ*ˆw×*×*Ó*ˆ~×*×*×*×*×*Ô*˜k×*×*×*Ñ*˜k×*×*Õ*Ð*×*×*×*×*×*×*÷ 
 Ö	ús   Á+PÐ
Pc                óÚ  • Sn[         R                  R                  [        U 5      U5      n[         R                  " USS9  [         R                  R                  US5      n[        US5       nUR                  S5        S S S 5        [        SU05      nUS   nSovUL oˆ(       do  [        R                  " S	U4S
Xg45      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=p‡US   n[        U5      nSoÇU:H  oÝ(       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      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pÜUS   S   S   nSovU:H  oˆ(       do  [        R                  " SU4SXg45      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=p‡US   S   S   ofU:H  oˆ(       d¥  [        R                  " SU4SXc4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 =phg ! , (       d  f       GNã= f)Nr?   Tr@   rg   rh   ri   r    r"   r#   r%   r&   r)   r*   Úbackupsé   rG   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen)rR   rS   r(   rN   zassert %(py9)sÚpy9r   rJ   rI   r/   )z%(py1)s == %(py3)srj   )r'   rL   zassert %(py5)srM   )r   r/   r0   r   rU   rl   rm   r   r1   r2   r3   r4   r5   rw   rY   rZ   r[   )r   r    ro   rj   rp   r6   r7   r8   r9   r:   r;   r_   r]   Ú@py_assert5r^   Ú@py_format10Ú@py_format4r`   s                     r   Útest_backup_listr|   W   s  € Ø€FÜ—‘—‘œc (›m¨VÓ4€JÜ‡K‚K�
 TÒ*ä—'‘'—,‘,˜zÐ+OÓP€KÜ	ˆk˜3Ô	 1Ø	�‰Ð%Ô&÷ 
 ô ˜h¨Ð/Ó
0€CØˆy‰>Ð!˜TÐ!˜TÐ!×!×!×!Ò!ˆ>×!×!Ô!ˆ>×!×!Ó!˜T×!×!×!×!×!×!Ó!Ø�9‰~Ð#Œ3ˆ~ÓÐ# !Ð# !Ñ#×#×#×#Ò#Ð×#×#×#×#×#Õ#Œ3×#×#×#Ñ#Œ3×#×#Õ#ˆ~×#×#Ó#Ð×#×#Ó# !×#×#×#×#×#×#Õ#Øˆy‰>˜!Ñ˜ZÑ(ÐPÐ,PÐPÐ,PÑP×P×P×PÒPÐ(×P×PÔPÐ(×P×PÓPÐ,P×P×P×P×P×P×PÓPØˆy‰>˜!Ñ˜VÑ$Ð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÷ 
 Ö	ús   Á-MÍ
M*c                óÚ  • Sn[         R                  R                  [        U5      U5      n[         R                  " USS9  [         R                  R                  US5      n[        US5       nUR                  S5        S S S 5        [         R                  R                  [        U5      SSS	5      n[         R                  " USS9  [        S
SS9   [        UUSSS.5      nUS   nSo˜U	L oª(       do  [        R                  " SU
4SX‰45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p©US   nSo˜U	L oª(       do  [        R                  " SU
4SX‰45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=p©U R                  nSoíU:¬  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 S S 5        g ! , (       d  f       GNR= f! , (       d  f       g = f)Nr?   Tr@   rg   rh   ri   r   r   r!   zos.path.existsrB   F)rc   r!   Úrestore_filesÚ
restore_dbr"   r#   r%   r&   r)   r*   ÚrestoredrO   )ú>=)z2%(py2)s
{%(py2)s = %(py0)s.call_count
} >= %(py5)srP   rQ   rT   rN   )r   r/   r0   r   rU   rl   rm   r   r	   r1   r2   r3   r4   r5   rX   rY   rZ   r[   )rP   r   r    ro   rj   rp   r!   r6   r7   r8   r9   r:   r;   r_   r\   r`   r^   s                    r   Útest_backup_restore_successr‚   g   sÝ  € à€FÜ—‘—‘œc (›m¨VÓ4€JÜ‡K‚K�
 TÒ*Ü—'‘'—,‘,˜zÐ+OÓP€KÜ	ˆk˜3Ô	 1Ø	�‰Ð%Ô&÷ 
 ô �g‰g�l‰lœ3˜x›=¨%°¸	ÓB€GÜ‡K‚K� $Ò'ô 
Ð¨dÓ	3Ü#Ø&ØØ!Øñ	%
ó ˆð �9‰~Ð% Ð% Ð%×%×%×%Ò%ˆ~×%×%Ô%ˆ~×%×%Ó% ×%×%×%×%×%×%Ó%Ø�:‰Ð& $Ð& $Ð&×&×&×&Ò&ˆ×&×&Ô&ˆ×&×&Ó& $×&×&×&×&×&×&Ó&Ø×"Ñ"Ð' aÐ' aÑ'×'×'×'Ò'Ð"×'×'×'×'×'Õ'ˆx×'×'×'Ñ'ˆx×'×'Õ'Ð"×'×'Ó' a×'×'×'×'×'×'Ó'÷ 
4Ð	3÷ 
 Ö	ú÷ 
4Õ	3ús   Á-K
ÃG0KË

KË
K*)Ú
__future__r   ÚbuiltinsrY   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter1   r   Úunittest.mockr   r   ÚpytestÚactions.backupr   r   r   r   r	   Úfixturer   r<   ra   re   rs   r|   r‚   © r=   r   Ú<module>r�      s‡   ðÝ "ç  „ ƒ	ß *Û ã ÷ó ð ‡‚˜Ññ3ó ð3ò*8ñ ÐÓñ(ó ð(ò(>ò+ò4ñ  ÐÓñ(ó ñ(r=   