
    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      NN22M%(]GNN" 

';<'*8}BJJ#$&~~66!(mGNN
N%2GNN"6GNN+<

'(


+T2s   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    ggll3x=%?G
*:wO
PCy>"U"U""""">""">"""U"""""""'7w<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=pU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=pU R                  nSoU
:H  of(       d  [        R                  " SU4SX4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ggll3x=%	BGKK$' 
 u	5"!	$
  9~%%%%%%%~%%%~%%%%%%%%%%< )E)E))))) ))) )))E))))))):7))7HA,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	5s   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    77<<Ht5EFL
|<
=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X45      [        R                  " U	5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pUS   n	SoYUL o(       do  [        R                   " SU
4SX4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KK
T*'',,z+OPK	k3	1	%& 
  77&>>&>+&&&&&&&&&2&&&&2&&&7&&&>&&&&&&+&&&&+&&&&&&&&&&
{;
<Cy>!T!T!!!!!>!!!>!!!T!!!!!!!y>!T!T!!!!!>!!!>!!!T!!!!!!!ww*~~*~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=pUS   n[        U5      nSoU: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=pU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=pU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(mV4JKK
T*'',,z+OPK	k3	1	%& 
  h/
0C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oU	L o(       do  [        R                  " SU
4SX45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pUS   nSoU	L o(       do  [        R                  " SU
4SX45      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pU R                  nSoU:  o(       d  [        R                  " SU	4SX4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=pS 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(mV4JKK
T*'',,z+OPK	k3	1	%& 
  ggll3x=%	BGKK$' 
d	3#&!	%
  9~%%%%%%%~%%%~%%%%%%%%%%:&$&$&&&&&&&&&&&$&&&&&&&""'a'a'''''"''''''x''''x'''"'''a''''''' 
4	3 
 	 
4	3s   -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=   