
    1j10                     z    S SK rS SKJs  Jr  S SKrS SKrS SKrS SK	J
r
  S	S jrS r " S S5      r " S S5      rg)
    N)Pathc                 |   [         R                  " 5       n[        [        U5      U -  5      nUGc  SnSnSnSn[	        XG-  5      n/ n	[        U5       Hh  n
[	        [        R                  " S[        R                  -  S-  U
-  U-  5      S-  S	-  5      nU	R                  [        R                  " S
U5      5        Mj     SR                  U	5      n[        U5      nSU-   n[        5       nUS-  nU[        R                  " SU5      -  nUS-  nUS-  nU[        R                  " SS5      -  nU[        R                  " SS5      -  nU[        R                  " SU5      -  nU[        R                  " SU5      -  nU[        R                  " SXF-  U-  S-  5      -  nU[        R                  " SXe-  S-  5      -  nU[        R                  " SU5      -  nUS-  nU[        R                  " SU5      -  nX-  n[        U5      n[!        US5       nUR#                  U5        SSS5        U$ ! , (       d  f       U$ = f)z;Create a temporary WAV file for testing. Name is preserved.ND        g      ?   i  g333333?i  z<h    $   s   RIFFz<Is   WAVEs   fmt z<H   s   datawb)tempfile
gettempdirstrr   intrangemathsinpiappendstructpackjoinlen	bytearraybytesopenwrite)namecontenttmpdirpathsrbitschannelsdurationnum_samplessamplesivaldata	data_size	file_sizebuffs                    //DATA/Downloads/kitmaker/tests/test_kitmaker.pycreate_test_wav_filer0      s     "FtF|d"#D"-({#Adhhq477{S014r9:S@5HICNN6;;tS12 $ xx I	N	kwv{{4++wwv{{4$$v{{4##v{{4**v{{4$$v{{4!5!:;;v{{4A!566v{{4&&wv{{4++*	dD	Q	 
K 
	Ks   H,,
H;c                 X     [        U 5      R                  5         g! [         a     gf = f)zClean up temporary WAV file.N)r   unlinkFileNotFoundError)r!   s    r/   cleanup_test_wav_filer4   1   s)    T
 s    
))c                   `    \ 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S rSrg)TestFrontend9   z-Playwright interaction tests for Kitmaker UI.c                    UR                  S5      nUR                  o3" 5       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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=peUR                  S	5      n	U	R                  o3" 5       oD(       d  S
S[        R
                  " 5       ;   d  [        R                  " U	5      (       a  [        R                  " U	5      OS[        R                  " U5      [        R                  " U5      S.-  n
[        [        R                  " U
5      5      eS =p4g )Nh1zRazzmatazz Kitmaker==)zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.text_content
}()
} == %(py7)sheaderpy0py2py4py7assert %(py9)spy9z.empty-cardzEassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_visible
}()
}pingr>   r?   r@   )locatortext_content
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
is_visible)selfpager<   @py_assert1@py_assert3@py_assert6@py_assert5@py_format8@py_format10rD   @py_format5s              r/   test_page_loadsTestFrontend.test_page_loads<   s	   d#""="$=(==(======$======v====v==="===$===(========||M*          t    t             r	   c                    UR                  S5      nUR                  o3" 5       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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=peg )	Nz.padr   r:   )zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.count
}()
} == %(py7)spadsr=   rB   rC   )
rF   countrH   rI   rJ   rK   rL   rM   rN   rO   )	rQ   rR   r]   rS   rT   rU   rV   rW   rX   s	            r/   test_pad_grid_renders"TestFrontend.test_pad_grid_rendersC   s    ||F#zz z| q q     |      t    t   z   |   q       r	   c                 $   UR                  S5      nUR                  S5      n[        UR                  5       5       Vs/ s H!  oCR                  U5      R	                  5       PM#     nnSofU;   ow(       d  [
        R                  " SU4SXe4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 =pgS
 H  n
X;   o(       d  [
        R                  " SU4SX4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M     g s  snf )N#genrePresetoptionu   — Select —inz%(py1)s in %(py3)stextspy1py3assert %(py5)spy5)808909HouseTechnozHip-Hopz%(py0)s in %(py2)spresetr>   r?   assert %(py4)sr@   )rF   r   r^   nthrG   rH   rI   rM   rJ   rK   rL   rN   rO   )rQ   rR   selectoptionsr(   rg   @py_assert0@py_assert2@py_format4@py_format6rr   rS   @py_format3rY   s                 r/   test_preset_dropdown_populated+TestFrontend.test_preset_dropdown_populatedG   s(   n-..*8=gmmo8NO8N1Q,,.8NO(5((((((((((((((5((((5(((((((BF?""""6""""""6""""6""""""U""""U""""""" C Ps   (Hc           
         Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5      R                  SS9  UR                  nSo" U	5      oR                  o" 5       nSoU:  o(       G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      [        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=n=p[!        U5        g ! , (       d  f       GN= f! [!        U5        f = f)N#fileBtn.sample-card  timeoutr   >=z%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.locator
}(%(py4)s)
}.count
}()
} >= %(py13)srR   r>   r?   r@   py6py8py10py13assert %(py15)spy15)r0   expect_file_chooserrF   clickvalue	set_fileswait_forr^   rH   rI   rJ   rK   rL   rM   rN   rO   r4   rQ   rR   
sample_wavr   r*   	temp_filefc_infofile_chooserrS   rT   rV   @py_assert7@py_assert9@py_assert12@py_assert11@py_format14@py_format16s                    r/   test_upload_single_file$TestFrontend.test_upload_single_fileO   sR   
(4			-))+wZ(..0 ,"==L""I;/LL(11$1?<<<<</<55<57<1<1<<<<<7<<<<<<4<<<<4<<<<<<<<<</<<<5<<<7<<<1<<<<<<<<!), ,+ "),s#   G1  GFG1 
G.)G1 1G>c           
         SS K nSS KnUu  pgUu  pUR                  " 5       n
UR                  R	                  X5      nUR                  R	                  X5      n[        US5       nUR                  U5        S S S 5        [        US5       nUR                  U	5        S S S 5         UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U
/5        UR                  S5      R                  R                  SS9  UR                  S5        UR                  nSnU" U5      nUR                  nU" 5       nSnUU:H  nU(       Gd  [         R"                  " S	U4S
UU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      [         R*                  " U5      [         R*                  " U5      S.-  nSSU0-  n[-        [         R.                  " U5      5      eS =n=n=n=n=n=nnUR                  S5      R1                  5       nSnUU;   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[-        [         R.                  " U5      5      eS =nnSS KnUR5                  U
SS9  g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! SS KnUR5                  U
SS9  f = f)Nr   r   z
#folderBtnr   r   r     r   r:   z%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.locator
}(%(py4)s)
}.count
}()
} == %(py13)srR   r   r   r   z#sampleCountz	2 samplesrd   rf   
count_textrh   rk   rl   T)ignore_errors)r   osmkdtempr!   r   r   r   r   rF   r   r   r   firstr   wait_for_timeoutr^   rH   rI   rJ   rK   rL   rM   rN   rO   rG   shutilrmtree)rQ   rR   r   sample_wav_kickr   r   name1data1name2data2r    tmp1tmp2r.   r   r   rS   rT   rV   r   r   r   r   r   r   r   rx   ry   rz   r{   r   s                                  r/   test_folder_uploadTestFrontend.test_folder_upload_   sw   !&!!#ww||F*ww||F*$GGEN $GGEN 	6))+w\*002 ,"==L""F8,LL(..777E!!#&<<<<</</55<57<1<71<<<<<71<<<<<<4<<<<4<<<<<<<<<</<<<5<<<7<<<1<<<<<<<<n5BBDJ,;*,,,,,;*,,,;,,,,,,*,,,,*,,,,,,,MM&M5%  ,+ MM&M5s=   $M5
N%N+ 5 NJN+ 5
N
N
N(#N+ +Oc           
         Uu  pEUu  pg[        XE5      n[        Xg5      n	 UR                  5        n
UR                  S5      R                  5         S S S 5        W
R                  nUR                  X/5        UR                  S5      R                  R                  SS9  UR                  S5        UR                  nSo" U5      oR                  o" 5       nSnUU:H  nU(       Gd  [        R                  " SU4SUU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      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[!        [        R"                  " U5      5      eS =n=n=n=n=n=nnUR                  S5      R%                  S5        UR                  S5        UR                  nSo" U5      oR                  o" 5       nSnUU:H  nU(       Gd  [        R                  " SU4SUU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      [        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[!        [        R"                  " U5      5      eS =n=n=n=n=n=nn['        U5        ['        U	5        g ! , (       d  f       GNR= f! ['        U5        ['        U	5        f = f)Nr   r   r   r   r   r   r:   r   rR   r   r   r   z#searchInputkick   r   )r0   r   rF   r   r   r   r   r   r   r^   rH   rI   rJ   rK   rL   rM   rN   rO   fillr4   )rQ   rR   r   r   r   r   r   r   
temp_file1
temp_file2r   r   rS   rT   rV   r   r   r   r   r   r   s                        r/   test_search_filterTestFrontend.test_search_filter|   sz   !&)%7
)%7
	.))+wZ(..0 ,"==L""J#;<LL(..777E!!#&<<<<</<55<57<1<71<<<<<71<<<<<<4<<<<4<<<<<<<<<</<<<5<<<7<<<1<<<<<<<<LL(--f5!!#&<<<<</<55<57<1<71<<<<<71<<<<<<4<<<<4<<<<<<<<<</<<<5<<<7<<<1<<<<<<<<!*-!*- ,+ "*-!*-s#   N-  NL4N- 
N*%N- -Oc           
      t   Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5        UR                  S5      R                  nUR                  5         UR                  S5        UR                  S5      n	U	R                  o" 5       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      [        R                  " U5      S
.-  nSSU0-  n[        [        R                   " U5      5      eS =n
=n=pUR                  n
So" U5      oR                  nU" 5       nSnUU:  nU(       Gd  [        R                  " SU4SUU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      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                   " U5      5      eS =n
=n=n=n=n=nn[#        U5        g ! , (       d  f       GN= f! [#        U5        f = f)Nr   r   .sel,  .pad.filledr   r   )zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.count
}()
} >= %(py7)sfilled_padsr=   rB   rC   z.sel.onr   rR   r   r   r   r0   r   rF   r   r   r   r   r   r^   rH   rI   rJ   rK   rL   rM   rN   rO   r4   )rQ   rR   r   r   r*   r   r   r   selr   rS   rT   rU   rV   rW   rX   r   r   r   r   r   r   s                         r/   "test_assign_sample_to_pad_by_click/TestFrontend.test_assign_sample_to_pad_by_click   s   
(4		-))+wZ(..0 ,"==L""I;/!!#&,,v&,,CIIK!!#&,,}5K$$+$&+!+!+++++&++++++;++++;+++$+++&+++!+++++++<<7	7<	*7007027a72a777772a777777477774777<777	777*77707772777a77777777!), ,+ "),s#   L*  LKL* 
L'"L* *L7c           
         Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5        UR                  S5      R                  R                  5         UR                  S5        UR                  S5      R                  R                  5         UR                  S5        UR                  nSo" U	5      oR                  o" 5       nSoU:H  o(       G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      [        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=n=p[#        U5        g ! , (       d  f       GN= f! [#        U5        f = f)Nr   r   r   r   z.remover   r   r   r:   r   rR   r   r   r   r   r   s                    r/   test_remove_sample_from_pad(TestFrontend.test_remove_sample_from_pad   s   
(4		-))+wZ(..0 ,"==L""I;/!!#&LL &&,,.!!#&LL#))//1!!#&<<;;<.;44;46;!;!;;;;;6;;;;;;4;;;;4;;;<;;;;;;.;;;4;;;6;;;!;;;;;;;;!), ,+ "),s#   I  IG9I 
II I%c                    UR                  S5      R                  S5        UR                  S5        UR                  S5      n/ SQnX#:H  oD(       d  [        R
                  " SU4SX#4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[        R                  " SU 35      S-   SU0-  n[        [        R                  " U5      5      eS ng )Nrb   rp   r   z() => pads.map(p => p.type))r   clap	closedHatopenHattomrimpercslicer:   )z%(py0)s == %(py2)s	pad_typesexpectedrs   zPad types: z
>assert %(py4)sr@   )rF   select_optionr   evaluaterH   rI   rJ   rK   rL   rM   _format_assertmsgrN   rO   )rQ   rR   r   r   rS   r|   rY   s          r/   test_apply_presetTestFrontend.test_apply_preset   s    ^$228<c"MM"?@	Z$????y??????y????y??????H????H????I;&???????r	   c                    Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5        UR                  S5      R                  nUR                  5       (       a!  UR                  5         UR                  S5        [        U5        g ! , (       d  f       N= f! [        U5        f = f)Nr   r   z.analyze-btni  )
r0   r   rF   r   r   r   r   r   rP   r4   )	rQ   rR   r   r   r*   r   r   r   analyze_btns	            r/   test_analyze_single_sample'TestFrontend.test_analyze_single_sample   s    
(4		-))+wZ(..0 ,"==L""I;/!!#&,,~6<<K%%''!!#%%d+!), ,+ "),s#   C&  CBC& 
C#C& &C3c           
      \   Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5        UR                  S5      R                  R                  5         UR                  S5        UR                  nSo" U	5      oR                  o" 5       nSoU:  o(       G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      [        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=n=p[#        U5        g ! , (       d  f       GN= f! [#        U5        f = f)Nr   r   r   r   r   r   r   r   rR   r   r   r   r   r   s                    r/    test_upload_and_assign_drag_drop-TestFrontend.test_upload_and_assign_drag_drop   so   
(4		-))+wZ(..0 ,"==L""I;/!!#&LL &&,,.!!#&<<;;<.;44;46;!;!;;;;;6;;;;;;4;;;;4;;;<;;;;;;.;;;4;;;6;;;!;;;;;;;;!), ,+ "),s#   H  HF?H 
HH H+c                 "   Uu  p4[        X45      n UR                  5        nUR                  S5      R                  5         S S S 5        WR                  nUR                  U/5        UR                  S5        UR                  S5      R                  R                  5         UR                  S5        UR                  S5      R                  nUR                  S5        UR                  S5        UR                  o" 5       n
SoU:H  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      [        R                  " U5      S.-  nSSU0-  n[!        [        R"                  " U5      5      eS =n	=n
=p[%        U5        g ! , (       d  f       GN= f! [%        U5        f = f)Nr   r   r   r   z.pad.filled selectsnared   r:   )zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.input_value
}()
} == %(py7)stype_selectr=   rB   rC   )r0   r   rF   r   r   r   r   r   r   input_valuerH   rI   rJ   rK   rL   rM   rN   rO   r4   )rQ   rR   r   r   r*   r   r   r   r   rS   rT   rU   rV   rW   rX   s                  r/   test_change_pad_type!TestFrontend.test_change_pad_type   se   
(4		-))+wZ(..0 ,"==L""I;/!!#&LL &&,,.!!#&,,';<BBK%%g.!!#&**7*,7777777,777777;7777;777*777,7777777777!), ,+ "),s#   H  G/F"H /
G>9H H N)__name__
__module____qualname____firstlineno____doc__rZ   r_   r}   r   r   r   r   r   r   r   r   r   __static_attributes__r   r	   r/   r6   r6   9   sB    7!!#- 6:.0-*-(@-$-"-r	   r6   c                   N    \ 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)TestAPI   zAPI-level validation tests.c                 R   SS K nUR                  U S35      nUR                  oD(       d  S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UR                  oD" 5       nSS0ovU:H  o(       d  [
        R                  " SU4S	Xg4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=pg )Nr   z	/api/ping&assert %(py2)s
{%(py2)s = %(py0)s.ok
}resprs   okTr:   )zC%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.json
}()
} == %(py7)sr=   rB   rC   )requestsgetr   rJ   rK   rH   rL   rM   rN   rO   jsonrI   )rQ   serverr   r   rS   r|   rT   rU   rV   rW   rX   s              r/   	test_pingTestAPI.test_ping  s    ||vhi01wwwttwyy*y{*tTl*l*****{******t****t***y***{***l*******r	   c                    SS K nUu  pEUR                  U S3SXES40S9nUR                  ow(       d  S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UR                  5       n	U	S	   n
S
oU:H  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:H  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:H  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:H  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:  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
=pg )Nr   
/api/probefile	audio/wavfilesr   r   rs   r$   r   r:   z%(py1)s == %(py4)sri   r@   assert %(py6)sr   
sampleRater   bitDepthr   ext.wavr%   >)z%(py1)s > %(py4)sr   postr   rJ   rK   rH   rL   rM   rN   rO   r   rI   )rQ   r   r   r   r   r*   r   rS   r|   metarx   rT   ry   rY   @py_format7s                  r/   test_probe_wavTestAPI.test_probe_wav  s   
}}xz26DP[C\:]}^wwwttwyy{J$1$1$$$$$$$$$$$1$$$$$$$L!*U*U*****!***!***U*******J%2%2%%%%%%%%%%%2%%%%%%%E{$f$f$$$$${$$${$$$f$$$$$$$J#!#!###########!#######r	   c                    SS K nUu  pEUR                  U S3SXES40S9nUR                  ow(       d  S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UR                  5       n	S	oU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pSoU	;   o(       d  [
        R                  " S
U4SX4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 =pg )Nr   /api/analyzer   r   r   r   r   rs   bpmrd   rf   resultrh   rk   rl   sample_typeloop_oneshotkeypitchloudness_db	dc_offset_cachedr	  )rQ   r   r   r   r   r*   r   rS   r|   r  rx   ry   rz   r{   s                 r/   test_analyze_wavTestAPI.test_analyze_wav  sH   
}}x|4VdR]E^<_}`wwwttwuu&&&&&&}&&&}&&&&&&&&&&&&&&&&&''''''~'''~'''''''''''''''''uu &     w   w      &    &       &&&&&&}&&&}&&&&&&&&&&&&&&&&&$f$$$$${$$${$$$$$$f$$$$f$$$$$$$"F"""""y"""y""""""F""""F"""""""r	   c                    SS K nUu  pEUR                  U S3SXES40S9nUR                  ow(       d  S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UR                  U S3SXES40S9n	U	R                  ow(       d  S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U	R                  5       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
=pg )Nr   r  r   r   r   r   resp1rs   resp2r  T)is)z%(py1)s is %(py4)sr  r  r   r	  )rQ   r   r   r   r   r*   r  rS   r|   r  rx   rT   ry   rY   r  s                  r/   test_analyze_caches_result"TestAPI.test_analyze_caches_result"  s   
5ftS^F_=`axxxuux5ftS^F_=`axxxuuxzz|I&.$.$.....&...&...$.......r	   c                 2   SS K nSS KnUu  pVUR                  U S3SXVS40S9  UR                  U5      R	                  5       nUR                  Xu-   R                  5       5      R	                  5       nUR                  U S3SU/0S9n	U	R                  o(       d  S	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
U	R                  5       nX;   o(       d  [        R                  " SU
4SX4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 )Nr   r  r   r   r   z/api/lookuphashes)r   r   r   rs   rd   rq   	cache_keyresultsrt   r@   )r   hashlibr
  sha256	hexdigestencoder   rJ   rK   rH   rL   rM   rN   rO   r   rI   )rQ   r   r   r   r&  r   r*   	file_hashr$  r   rS   r|   r%  rY   s                 r/   test_lookup_bulkTestAPI.test_lookup_bulk-  s;   
-ft;>W5XY NN4(224	NNI$4#<#<#>?IIK	}}x{38i[:Q}Rwwwttw))+#####y######y####y######G####G#######r	   c                 0   SS K nUu  pEUR                  U S3SXES40S9nUR                  ow(       d  S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UR                  S	   n	SoU
:H  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[        U5      nSoU:  nU(       Gd"  [
        R                  " SU4SX4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      S.-  nSSU0-  n[        [
        R                  " U5      5      eS =n=n=nng )Nr   z/api/convertr   r   r   r   r   rs   content-typer:   r   r  r  r   ,   r  )zL%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.content
})
} > %(py8)sr   )r>   ri   rj   rl   r   zassert %(py10)sr   )r   r
  r   rJ   rK   rH   rL   rM   rN   rO   headersrI   r   r   )rQ   r   r   r   r   r*   r   rS   r|   rx   rT   ry   rY   r  @py_assert4r   rU   @py_format9@py_format11s                      r/   test_convert_wavTestAPI.test_convert_wav<  sc   
}}x|4VdR]E^<_}`wwwttw||N+:{:{:::::+:::+:::{:::::::<<%s< %2%2%%%%% %%%%%%s%%%%s%%%%%%4%%%%4%%%<%%% %%%2%%%%%%%r	   c                    SS K nUR                  U S3SSS.S9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=peSoR                  oYU;   o(       d  [        R                  " SU
4SX45      [        R                  " U	5      S
[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n	=pg )Nr   /api/exportTestKitz[]kitNameconfig)r*     r:   z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sr   r>   r?   rl   assert %(py7)srA   z
No samplesrd   )z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.text
})ri   rj   rl   )r   r
  status_coderH   rI   rJ   rK   rL   rM   rN   rO   text)rQ   r   r   r   rS   r1  rT   r{   rW   rx   ry   s              r/   test_export_empty_failsTestAPI.test_export_empty_failsD  s   }}x{3 ;
}  &3&3&&&&&&&&&&&t&&&&t&&&&&&3&&&&&&&(yy(y(((((|(((|((((((t((((t(((y(((((((r	   c                 ^   SS K nUu  pESSSSSUS./nUR                  U S3S[        S5      R                  U5      S.S	XES
40S9nUR                  o(       d  S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UR                  S   n
SoU:H  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
=pSS KnSS KnUR!                  UR#                  UR$                  5      5      nUR'                  5       nS U 5       n[)        U5      o(       d  SS[
        R                  " 5       ;   d  [        R                  " [(        5      (       a  [        R                  " [(        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =pS U 5       n[)        U5      o(       d  SS[
        R                  " 5       ;   d  [        R                  " [(        5      (       a  [        R                  " [(        5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =pg )Nr   r   Kick)	slotIndextypelabelvolumepanfilenamer7  r8  r   r9  r   r   )r*   r   r   r   rs   r.  zapplication/zipr:   r   r  r  r   c              3   B   #    U  H  oR                  S 5      v   M     g7f)r  Nendswith.0ns     r/   	<genexpr>3TestAPI.test_export_with_samples.<locals>.<genexpr>^       5u!::f%%u   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyrE   c              3   B   #    U  H  oR                  S 5      v   M     g7f)z.nnrNrM  rO  s     r/   rR  rS  _  rT  rU  )r   r
  
__import__dumpsr   rJ   rK   rH   rL   rM   rN   rO   r0  rI   zipfileioZipFileBytesIOr   namelistrV  )rQ   r   r   r   r   r*   r;  r   rS   r|   rx   rT   ry   rY   r  rZ  r[  zfnamess                      r/   test_export_with_samples TestAPI.test_export_with_samplesM  s   
VfRSaef
 }}hk"&*V2D2J2J62RST56  

 wwwttw||N+@/@@/@@@@@@+@@@+@@@/@@@@@@@@__RZZ565u55s5555555555s5555s555555555555555u55s5555555555s5555s55555555555555r	   c                    SS K nUR                  U S3SS0S9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 )Nr   r   r   )ztest.txts	   not audioz
text/plainr   r<  r:   r=  r   r>  r?  rA   )r   r
  r@  rH   rI   rJ   rK   rL   rM   rN   rO   )	rQ   r   r   r   rS   r1  rT   r{   rW   s	            r/    test_unsupported_format_rejected(TestAPI.test_unsupported_format_rejecteda  s    }}xz26Ck:l}m&3&3&&&&&&&&&&&t&&&&t&&&&&&3&&&&&&&r	   r   N)r   r   r   r   r   r   r  r  r   r+  r4  rB  ra  rd  r   r   r	   r/   r   r      s2    %+
$#	/$&)6('r	   r   )N)builtinsrJ   _pytest.assertion.rewrite	assertionrewriterH   r   r   r   pathlibr   r0   r4   r6   r   r   r	   r/   <module>rk     s9         'TB- B-Jf' f'r	   