
    1Ej                        S SK Jr  S SKrS SKJs  Jr  S SK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JrJr  \R,                  " SS9S 5       rS rS	 rS
 rS rS rS rS rg)    )annotationsN)patch	MagicMock)handle_file_listhandle_file_readhandle_file_writehandle_file_deletehandle_file_renamehandle_file_createT)autousec              #     #    [         R                  R                  n[        U 5      [         R                  l        U v   U[         R                  l        g7f)z>Override BASE_PATH with a temporary folder for isolated tests.N)actionsfile_manager	BASE_PATHstr)tmp_pathoriginal_bases     ED:\Programs\laragon\www\wolf\agent\tests\test_actions_file_manager.pysetup_temp_base_pathr      s=      ((22M%(]G"
N%2G"s   AA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=pT[        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o8S   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..outside_dirpathsuccessFisz%(py1)s is %(py4)spy1py4assert %(py6)spy6zoutside of base directoryerrorinz%(py1)s in %(py4)s)osr   joinr   r   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationr   )	r   outside_pathres@py_assert0@py_assert3@py_assert2@py_format5@py_format7res_reads	            r   +test_verify_safe_path_blocks_path_traversalr5      st   77<<Ht]CL
FL1
2Cy>"U"U""""">""">"""U"""""""&6g,6,66666&666&666,6666666 67HI'%'%'''''''''''%'''''''&;7*;;*;;;;;;&;;;&;;;*;;;;;;;;    c                .   [         R                  " [         R                  R                  [	        U 5      S5      SS9  [        [         R                  R                  [	        U 5      S5      SSS9 nUR                  S5        S S S 5        [        S	S
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=pTUS   n[        U5      nSoU	:H  o(       Gd  [        R                  " SU
4SXY45      S[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pU Vs/ sH  oS   PM	     nnSo3U;   oU(       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 =p5So3U;   oU(       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 =p5[#        S  U 5       5      nU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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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=pT[#        S) U 5       5      nU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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=pTg ! , (       d  f       GN= fs  snf )+NpublicTexist_oktest.txtwutf-8encodingzhello worldr   /r   r   r   r   r    r!   items   ==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slen)py0r   py3r!   zassert %(py8)spy8namer#   )z%(py1)s in %(py3)snames)r   rG   zassert %(py5)spy5c              3  8   #    U H  oS    S:X  d  M  Uv   M     g7f)rI   r;   N .0is     r   	<genexpr>0test_handle_file_list_success.<locals>.<genexpr>9   s     @u!&	Z(?AAu   	typefilez%(py1)s == %(py4)ssizez11 Bmodified_at)is not)z%(py1)s is not %(py4)sc              3  8   #    U H  oS    S:X  d  M  Uv   M     g7f)rI   r8   NrM   rN   s     r   rQ   rR   >   s     >u!&	X(=AAurS   folder)r&   makedirsr   r'   r   openwriter   r(   r)   r*   r+   r,   rE   @py_builtinslocals_should_repr_global_namenext)r   fr.   r/   r0   r1   r2   r3   rA   @py_assert5@py_assert4@py_format9rP   rJ   @py_format4@py_format6txt_itemdir_items                     r   test_handle_file_list_successrk   )   s   KKS]H5E	bggll3x=*5sW	MQR	 
N FC=
)Cy>!T!T!!!!!>!!!>!!!T!!!!!!!LEu:?:33uu: %&1vYE&u88uu::@u@@HF%v%v%%%%%%%%%%%v%%%%%%%F%v%v%%%%%%%%%%%v%%%%%%%M".$.$....."..."...$.......>u>>HF'x'x'''''''''''x'''''''F#t#t###########t#######) 
N	M 's   /Z Z 
Zc                   [         R                  R                  [        U 5      S5      n[	        USSS9 nUR                  S5        S S S 5        [        SS05      nUS   nSoTUL of(       do  [        R                  " S	U4S
XE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peUS   nSoTU:H  of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pe[        SSS9   [        SS05      nUS   nSoTUL of(       do  [        R                  " S	U4S
XE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peSoCS   oTU;   of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peS S S 5        [	        US5       nUR                  S5        S S S 5        [        SS05      nUS   nSoTUL of(       do  [        R                  " S	U4S
XE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peSoCS   oTU;   of(       do  [        R                  " SU4SXE45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=peg ! , (       d  f       GN= f! , (       d  f       GN]= f! , (       d  f       GNI= f)Nr;   r<   r=   r>   zcontent of text filer   r   Tr   r   r   r    r!   contentrC   rV   zos.path.getsize   )return_valueF#exceeds maximum allowed size of 2MBr"   r#   r%   wbs   some binary   contentzBinary files are not allowed)r&   r   r'   r   r]   r^   r   r(   r)   r*   r+   r,   r   )	r   	file_pathrc   r.   r/   r0   r1   r2   r3   s	            r   (test_handle_file_read_success_and_limitsrs   C   s   S]J7I 
iw	/1	&' 
0 FJ/
0Cy>!T!T!!!!!>!!!>!!!T!!!!!!!y>333333333>333>33333333333 
 /B	C
349~&&&&&&&~&&&~&&&&&&&&&&4DGDDDDDD4DDD4DDDDDDDDDD 
D 
i	!	+, 

FJ/
0Cy>"U"U""""">""">"""U""""""")9\9\99999)999)999\9999999% 
0	/ 
D	C 
	s$   O	/DOO-	
O
O*-
O<c                L	   [         R                  R                  [        U 5      S5      n[	        SS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=pTU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=pT[         R                  oR                  oD" U5      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=pI[        USSS9 nUR                  o" 5       nSoU	:H  o(       d  [
        R                  " SU4SXI4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=pS S S 5        SS-  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o?S   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 ! , (       d  f       GN+= f) Nznew_file.txtzatomic content)r   rm   r   Tr   r   r   r    r!   writtenbassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}r&   rr   rF   py2r   rK   py7rr=   r>   rC   )zC%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read
}()
} == %(py7)src   )rF   rx   r   ry   zassert %(py9)spy9arn   Frp   r"   r#   r%   )r&   r   r'   r   r   r(   r)   r*   r+   r,   existsr_   r`   ra   r]   read)r   rr   r.   r/   r0   r1   r2   r3   @py_assert1@py_assert6@py_format8rc   rd   @py_format10huge_contentres_huges                   r   test_handle_file_write_atomicr   \   s   S]N;I
^@PQ
RCy>!T!T!!!!!>!!!>!!!T!!!!!!!y>!T!T!!!!!>!!!>!!!T!!!!!!!77$>>$>)$$$$$$$$$2$$$$2$$$7$$$>$$$$$$)$$$$)$$$$$$$$$$	iw	/1vv+vx+++++++++x++++++q++++q+++v+++x+++++++++++ 
0 -.L .\!RSHI'%'%'''''''''''%'''''''0EW4EE4EEEEEE0EEE0EEE4EEEEEEEE 
0	/s   ;C5R
R#c                d   [         R                  R                  [        U 5      S5      n[         R                  R                  [        U 5      S5      n[	        US5       o3R                  S5        S S S 5        [         R                  " USS9  [        SS0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=pv[         R                  oR                  of" U5      o(       + 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=p[        SS0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=pv[         R                  oR                  of" U5      o(       + 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=pg ! , (       d  f       GN= f)Nr;   subr<   xTr9   r   r   r   r   r   r    r!   fassert not %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}r&   rr   rw   folder_path)r&   r   r'   r   r]   r^   r\   r	   r(   r)   r*   r+   r,   r}   r_   r`   ra   )r   rr   r   rc   r.   r/   r0   r1   r2   r3   r   r   @py_assert8rf   res_dirs                  r   test_handle_file_deleter   n   sV   S]J7I'',,s8}e4K	i	GGCL	KKd+ fj1
2Cy>!T!T!!!!!>!!!>!!!T!!!!!!!ww(~~(~i(((((((((((r((((r(((w(((~((((((i((((i(((((((((( !&%1G9%%%%%%%%%%%%%%%%%%%%ww*~~*~k***********r****r***w***~******k****k********** 
	s   P  
P/c                6	   [         R                  R                  [        U 5      S5      n[         R                  R                  [        U 5      S5      n[	        US5       o3R                  S5        S S S 5        [        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=pv[         R                  oR                  of" U5      o(       + 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=p[         R                  oR                  of" U5      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
=pk[        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=pvSo_S   oeU;   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=pvg ! , (       d  f       GN = f)Nzold.txtznew.txtr<   test)old_pathnew_namer   Tr   r   r   r    r!   r   r&   rr   rw   rv   new_pathz../traversal.txtFzInvalid file name formatr"   r#   r%   )r&   r   r'   r   r]   r^   r
   r(   r)   r*   r+   r,   r}   r_   r`   ra   )r   rr   r   rc   r.   r/   r0   r1   r2   r3   r   r   r   rf   r   res_invalids                   r   test_handle_file_renamer      s   S]I6Iww||CM95H	i	GGFO	 )K
LCy>!T!T!!!!!>!!!>!!!T!!!!!!!ww(~~(~i(((((((((((r((((r(((w(((~((((((i((((i((((((((((77#>>#>(#########2####2###7###>######(####(########## %)I[%\]Ky!*U*U*****!***!***U*******%=W)==)======%===%===)======== 
	s   R		
Rc                ,   [        SSS.5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[	        [        R
                  " U5      5      eS =n=pC[        R                  owR                  n[        R                  oR                  n	[        U 5      n
So" X5      o" U5      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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U
5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[	        [        R
                  " U5      5      eS =n=n=n=n	=n
=n=p[        SSS.5      nUS   nSo2UL oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[	        [        R
                  " U5      5      eS =n=pC[        R                  owR                  n[        R                  oR                  n	[        U 5      n
So" X5      o" U5      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                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U
5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n[	        [        R
                  " U5      5      eS =n=n=n=n	=n
=n=pg )Nzcreated.txtrU   )r   rT   r   Tr   r   r   r    r!   zassert %(py19)s
{%(py19)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py17)s
{%(py17)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.path
}.join
}(%(py13)s
{%(py13)s = %(py10)s(%(py11)s)
}, %(py15)s)
})
}r&   r   r   )rF   rx   r   rK   ry   r{   py10py11py13py15py17py19created_dirr[   zassert %(py19)s
{%(py19)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.isdir
}(%(py17)s
{%(py17)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.path
}.join
}(%(py13)s
{%(py13)s = %(py10)s(%(py11)s)
}, %(py15)s)
})
})r   r(   r)   r*   r+   r,   r&   r   r}   r'   r   r_   r`   ra   isdir)r   r.   r/   r0   r1   r2   r3   r   r   r   @py_assert12@py_assert14@py_assert16@py_assert18@py_format20r   s                   r   test_handle_file_creater      s;   
mVD
ECy>!T!T!!!!!>!!!>!!!T!!!!!!!77E>>E"''E,,Es8}EmE,}DE>DEEEEEEEEE2EEEE2EEE7EEE>EEEEEE"EEEE"EEE'EEE,EEEEEEsEEEEsEEEEEE8EEEE8EEE}EEEmEEEDEEEEEEEEEEE !-!JKG9%%%%%%%%%%%%%%%%%%%%77D==DDDc(mD]DmCD=CDDDDDDDDD2DDDD2DDD7DDD=DDDDDDDDDDDDDDDDDDDDDDcDDDDcDDDDDD(DDDD(DDDmDDD]DDDCDDDDDDDDDDDr6   )
__future__r   builtinsr_   _pytest.assertion.rewrite	assertionrewriter(   r&   shutilunittest.mockr   r   pytestactions.file_managerr   r   r   r   r	   r
   r   fixturer   r5   rk   rs   r   r   r   r   rM   r6   r   <module>r      sg    "   	  *    3 3
<$4:2F$+$>"	Er6   