
    i                        d 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        Z/home/jay/workspace/.worktrees/task-2514-dev3/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(  s.J d
|j                   d|j
                   d|j                          d|j
                  v sJ 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   Expected exit 0, got 	
stdout: 	
stderr: PASSNr)   r.   r5   r   
returncodestdoutstderrtmp_pathext_dirr   r   r   s        r   test_check_passes_when_alignedrH   H       $GX%(@@K<'J7G$
%8g&';
I>F!  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A!V]]"""r   c                 H   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |d       t        |||d      }|j                  d	k(  s.J d
|j                   d|j
                   d|j                          d|j
                  v sJ d|j
                  v sJ y)u(   popup.html에 'v0.1.0' 포함 → exit 1r7   r4   r8   r9   r:   Tr;   r<      Expected exit 1, got r>   r?   FAILzhardcoded versionNrA   rE   s        r   1test_check_fails_when_popup_has_hardcoded_versionrN   W   s    $GX%(@@K<'J7G$
$7g&';
I>F!  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A!V]]"""&--///r   c                 (   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |d       t        |||d	      }|j                  d
k(  s.J d|j                   d|j
                   d|j                          d|j
                  v sJ y)u+   manifest '0.4.1', config '0.1.0' → exit 1r7   r4   r8   r9   r:   Fr;   z0.1.0r<   rK   rL   r>   r?   rM   NrA   rE   s        r   .test_check_fails_when_manifest_config_mismatchrP   g   rI   r   c                 L   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |dd	       t        |||d
      }|j                  dk(  s.J d|j                   d|j
                   d|j                          d|j
                  v sJ d|j
                  v sJ 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   rL   r>   r?   rM   legacyNrA   rE   s        r   )test_check_fails_when_download_url_legacyrS   v   s    $GX%(@@K<'J7G$
%8g4XY';
I>F!  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A!V]]"""v}}$$$r   c                 0   | dz  }| dz  dz  }|dz  }t        |d       t        |d       t        |||d      }|j                  d	k(  s.J d
|j                   d|j                   d|j
                          d|j                  v sJ |j                         sJ d       t        |d      5 }t        j                  |      }ddd       d   dk(  sJ |d   dk(  sJ d|d   v sJ d|d   v sJ d|d   v sJ |d   dk(  sJ d|d   v sJ y# 1 sw Y   LxY w)uN   --sync 실행 후 config 파일에 GitHub URL + 정확한 schema 작성 확인r7   r4   r8   r9   r:   Fr;   z--syncr   r=   r>   r?   r@   u$   config 파일이 생성되어야 함r!   r"   Nr1   r   z
github.comr/   zextension-v0.4.1zinsuro-helper-0.4.1.zipr2   zExtension v0.4.1zreleases/tag/extension-v0.4.1r3   )
r)   r.   r   rB   rC   rD   existsopenr&   load)rF   rG   r   r   r   fdatas          r   test_sync_writes_correct_schemarZ      s}   $GX%(@@K<'J7G$
%8 ';
H=F!  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A!V]]""" G!GG	kG	, yy|  !W,,,	?g%%%4////n!5555$^(<<<< $6666*d3F.GGGG s   +DDc                 6   | dz  }|j                  dd       | dz  dz  }|dz  }t        |d       t        |d	       t        |||d
      }|j                  dk(  s.J d|j                   d|j
                   d|j                          d|j
                  v sJ y)u+   extension dir에 manifest 없음 → exit 1r7   Tr   r4   r8   r9   Fr;   r:   r<   rK   rL   r>   r?   rM   N)r$   r.   r5   r   rB   rC   rD   rE   s        r   &test_check_fails_when_manifest_missingr\      s    $GMM$M.X%(@@K<'J 
%8g&';
I>F!  A%:6;L;L:MZX^XeXeWffpqwq~q~p  $A  A!V]]"""r   )N)__doc__r   r&   pathlibr   r   __file__resolver,   r   r   r   r)   boolr.   r5   rH   rN   rP   rS   rZ   r\    r   r   <module>rc      s       
	h			!	(	(	/	/	6	6	BE`	` 4 T  "
$ 
 
5D 5 5Kd KS Kd
 K(#0 #% H8#r   