
    Mii                     2   d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlZ e
e      j                         j                  j                  j                  dz  dz  Zde
de
de
d	efd
Zde
defdZde
defdZdde
dededz  fdZd Zd Zd Zd Zd Zd Zy)uH   
test_extension_version_bump.py — task-2447 CI guard 회귀 테스트
    N)Pathscriptszextension_version_bump.pyextension_dirconfig_file
popup_filemodec                     t        j                  t        j                  t	        t
              |dt	        |       dt	        |      dt	        |      g	dd      }|S )u<   스크립트를 subprocess로 실행하고 결과를 반환.z--extension-dirz--config-filez--popup-fileT)capture_outputtext)
subprocessrunsys
executablestrSCRIPT)r   r   r   r   results        @/home/jay/workspace/tests/scripts/test_extension_version_bump.py_runr      sR    ^^NNKs=1S-C
O	
 F M    versionc                     | j                  dd       dd|d}| dz  j                  t        j                  |d      d	
       y)u6   임시 extension 디렉토리에 manifest.json 생성.Tparentsexist_ok   zInsuRo Helper)manifest_versionnamer   zmanifest.json   indentutf-8encodingN)mkdir
write_textjsondumps)r   r   manifests      r   _make_manifestr)      sO    t4H
 _$00

8A& 1 r   has_hardcoded_versionc                 r    | j                   j                  dd       |rd}nd}| j                  |d       y)uE   popup.html 생성. has_hardcoded_version=True 이면 'v0.1.0' 포함.Tr   u4   <div class="footer">v0.1.0 · 인카 FA 전용</div>u*   <div class="footer">인카 FA 전용</div>r!   r"   N)parentr$   r%   )r   r*   contents      r   _make_popupr.   *   s;    D48H>'G4r   download_urlc                     | j                   j                  dd       |	d| d| d}|||d| d| d	}| j                  t        j                  |d
      d       y)u   extension_version.json 생성.Tr   NzDhttps://github.com/JonghyukJeon/InsuRo/releases/download/extension-vz/insuro-helper-z.zipzExtension vz?https://github.com/JonghyukJeon/InsuRo/releases/tag/extension-v)latest_versionr   r/   release_notesrelease_notes_urlr   r   r!   r"   )r,   r$   r%   r&   r'   )r   r   r/   configs       r   _make_configr5   4   s    TD9!/'$@ 	
 "$&wi0^_f^ghF 4::fQ7'Jr   c                 &   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |d       t        |||d      }|j                  }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}y)uS   manifest(0.4.1) + popup(no version) + config(version=0.4.1 + GitHub URL) → exit 0	extensionr4   extension_version.json
popup.html0.4.1Fr*   --checkr   ==z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sr   py0py2py5Expected exit 0, got 	
stdout: 	
stderr: 
>assert %(py7)spy7NPASSinz.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
}py1py3rC   assert %(py7)sr)   r.   r5   r   
returncode
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgstdoutstderrAssertionError_format_explanationtmp_pathext_dirr   r   r   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2s               r   test_check_passes_when_alignedrh   H      $GX%(@@K<'J7G$
%8g&';
I>F  A  A!  A  A  A  A  A  A  A  A  A6  A  A  A6  A  A  A  A  A  A  A  A  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A  A  A  A  A  A  A"V]]"6]""""6]"""6""""""V"""V"""]"""""""r   c                    | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |d       t        |||d      }|j                  }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}y)u(   popup.html에 'v0.1.0' 포함 → exit 1r7   r4   r8   r9   r:   Tr;   r<      r=   r?   r   r@   Expected exit 1, got rE   rF   rG   rH   NFAILrJ   rL   rM   rP   zhardcoded versionrQ   r^   s               r   1test_check_fails_when_popup_has_hardcoded_versionrn   W   s7   $GX%(@@K<'J7G$
$7g&';
I>F  A  A!  A  A  A  A  A  A  A  A  A6  A  A  A6  A  A  A  A  A  A  A  A  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A  A  A  A  A  A  A"V]]"6]""""6]"""6""""""V"""V"""]"""""""/&--/-////-/////////&///&///-///////r   c                 &   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |d       t        |||d	      }|j                  }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}y)u+   manifest '0.4.1', config '0.1.0' → exit 1r7   r4   r8   r9   r:   Fr;   z0.1.0r<   rk   r=   r?   r   r@   rl   rE   rF   rG   rH   Nrm   rJ   rL   rM   rP   rQ   r^   s               r   .test_check_fails_when_manifest_config_mismatchrp   g   ri   r   c                    | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |dd	       t        |||d
      }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}y)uC   config download_url='/downloads/insuro-helper-0.4.1.zip' → exit 1r7   r4   r8   r9   r:   Fr;   z"/downloads/insuro-helper-0.4.1.zip)r/   r<   rk   r=   r?   r   r@   rl   rE   rF   rG   rH   Nrm   rJ   rL   rM   rP   legacyrQ   r^   s               r   )test_check_fails_when_download_url_legacyrs   v   s7   $GX%(@@K<'J7G$
%8g4XY';
I>F  A  A!  A  A  A  A  A  A  A  A  A6  A  A  A6  A  A  A  A  A  A  A  A  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A  A  A  A  A  A  A"V]]"6]""""6]"""6""""""V"""V"""]"""""""$v}}$8}$$$$8}$$$8$$$$$$v$$$v$$$}$$$$$$$r   c                    | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |||d      }|j                  }d	}||k(  }|st	        j
                  d
|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t	        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t	        j                  |	            dx}x}}d}
|j                  }|
|v }|st	        j
                  d|fd|
|f      t	        j                  |
      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}
x}}|j                  } |       }|st	        j                  d      dz   dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}}t!        |d      5 }t#        j$                  |      }ddd       d   }
d}|
|k(  }|slt	        j
                  d
|fd |
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}|d$   }
d}|
|k(  }|slt	        j
                  d
|fd |
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}d%}
|d&   }|
|v }|slt	        j
                  d|fd'|
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}d(}
|d&   }|
|v }|slt	        j
                  d|fd'|
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}d)}
|d&   }|
|v }|slt	        j
                  d|fd'|
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}|d*   }
d+}|
|k(  }|slt	        j
                  d
|fd |
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}d,}
|d-   }|
|v }|slt	        j
                  d|fd'|
|f      t	        j                  |
      t	        j                  |      d!z  }d"d#|iz  }t        t	        j                  |            dx}
x}}y# 1 sw Y   xY w).uN   --sync 실행 후 config 파일에 GitHub URL + 정확한 schema 작성 확인r7   r4   r8   r9   r:   Fr;   z--syncr   r=   r?   r   r@   rD   rE   rF   rG   rH   NrI   rJ   rL   rM   rP   u$   config 파일이 생성되어야 함zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r   )rA   rB   py4r!   r"   r1   )z%(py1)s == %(py4)s)rN   ru   zassert %(py6)spy6r   z
github.comr/   )z%(py1)s in %(py4)szextension-v0.4.1zinsuro-helper-0.4.1.zipr2   zExtension v0.4.1zreleases/tag/extension-v0.4.1r3   )r)   r.   r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   existsopenr&   load)r_   r`   r   r   r   ra   rb   rc   rd   re   rf   rg   @py_format5fdata@py_format7s                   r   test_sync_writes_correct_schemar~      s   $GX%(@@K<'J7G$
%8 ';
H=F  A  A!  A  A  A  A  A  A  A  A  A6  A  A  A6  A  A  A  A  A  A  A  A  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A  A  A  A  A  A  A"V]]"6]""""6]"""6""""""V"""V"""]""""""" GGGG!GGGGGGG;GGG;GGGGGGGGGGGG	kG	, yy|  !,W,!W,,,,!W,,,!,,,W,,,,,,,	?%g%?g%%%%?g%%%?%%%g%%%%%%%/4//</////<////<///////////5n!55!55555!5555555!55555555$<^(<<$(<<<<<$(<<<<$<<<(<<<<<<<< 6$66 $66666 $6666 666$66666666*Gd3F.GG*.GGGGG*.GGGG*GGG.GGGGGGGG s   Y**Y4c                 4   | dz  }|j                  dd       | dz  dz  }|dz  }t        |d       t        |d	       t        |||d
      }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d|j                   d|j                   d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}d}
|j                  }|
|v }|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}
x}}y)u+   extension dir에 manifest 없음 → exit 1r7   Tr   r4   r8   r9   Fr;   r:   r<   rk   r=   r?   r   r@   rl   rE   rF   rG   rH   Nrm   rJ   rL   rM   rP   )r$   r.   r5   r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   s               r   &test_check_fails_when_manifest_missingr      s   $GMM$M.X%(@@K<'J 
%8g&';
I>F  A  A!  A  A  A  A  A  A  A  A  A6  A  A  A6  A  A  A  A  A  A  A  A  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A  A  A  A  A  A  A"V]]"6]""""6]"""6""""""V"""V"""]"""""""r   )N)__doc__builtinsrU   _pytest.assertion.rewrite	assertionrewriterS   r   r&   pathlibr   r   __file__resolver,   r   r   r   r)   boolr.   r5   rh   rn   rp   rs   r~   r    r   r   <module>r      s         
	h			!	(	(	/	/	6	6	BE`	` 4 T  "
$ 
 
5D 5 5Kd KS Kd
 K(#0 #% H8#r   