
    i]                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
 e	d      ZdhZ G d d      Z G d d	      Z G d
 d      Zy)u   task-1058.1: Before Starting 명칭 통일 테스트

모든 SKILL.md 파일에서 "시작 전 확인" 섹션이 "Before Starting"으로 통일되었는지 검증.
    N)Pathz/home/jay/.claude/skillszconversion-copywriterc                       e Zd ZdZej
                  dee   fd       Zdee   ddfdZ	dee   ddfdZ
dee   ddfdZdee   ddfd	Zdee   ddfd
Zy)TestBeforeStartingUnificationu(   Before Starting 명칭 통일 테스트.returnc                 >    t        t        j                  d            S )u   모든 SKILL.md 파일 목록.
*/SKILL.md)list
SKILLS_DIRglob)selfs    =/home/jay/workspace/tests/test_task_1058_1_before_starting.pyskill_filesz)TestBeforeStartingUnification.skill_files   s     JOOL122    r   Nc                 R   t        |      }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d      dz   d	|iz  }t        t        j                  |            d
x}x}}y
)u$   SKILL.md 파일이 존재해야 함.r   >z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slenr   py0py1py3py6u   SKILL.md 파일이 없음
>assert %(py8)spy8N)
r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanation)r   r   @py_assert2@py_assert5@py_assert4@py_format7@py_format9s          r   test_all_skill_files_existz8TestBeforeStartingUnification.test_all_skill_files_exist   s    ;@!@!#@@@!@@@@@@s@@@s@@@@@@;@@@;@@@@@@!@@@%@@@@@@@@r   c           	         t        j                  dt         j                        }g }|D ]X  }|j                  j                  t
        v r 	 |j                  d      }|j                  |      }|r|j                  ||f       Z t        |      }d}	||	k(  }
|
s(t        j                  d|
fd||	f      d	t        j                         v st        j                  t              rt        j                   t              nd	d
t        j                         v st        j                  |      rt        j                   |      nd
t        j                   |      t        j                   |	      dz  }t        j"                  ddj%                  d |dd D              z         dz   d|iz  }t'        t        j(                  |            dx}x}
}	y# t        $ r"}|j                  |d| gf       Y d}~d}~ww xY w)uG   모든 파일에서 '시작 전 확인' 섹션 헤더가 없어야 함.u   ^## .*시작 전.*$utf-8encodingzError: Nr   ==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   
violationsr   u-   한국어 '시작 전 확인' 섹션 발견:

c              3   2   K   | ]  \  }}d | d|   yw)z  : N ).0fms      r   	<genexpr>zOTestBeforeStartingUnification.test_no_korean_before_starting.<locals>.<genexpr>/   s'      c
"ab2aSMc
s   
   r   r   )recompile	MULTILINEparentnameDEPRECATED_SKILLS	read_textfindallappend	Exceptionr   r   r   r   r   r    r!   r"   joinr#   r$   )r   r   korean_patternr1   filepathcontentmatcheser%   r&   r'   r(   r)   s                r   test_no_korean_before_startingz<TestBeforeStartingUnification.test_no_korean_before_starting   s   $:BLLI
# 	?H##'88?",,g,>(009%%x&9:	? : 	
! 	
!# 	
 	
 	
! 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
   	
 	
 		  	
 	
 		  	
 	
 		 #$ 	
 	
  (VY]YbYb c
&0"oc
 Z
 &
 	
 	
 	
 	
 	
 	
  ?!!8sm_"=>>?s   
8G	G3G..G3c                 p   t        j                  dt         j                        }g }|D ]T  }|j                  j                  t
        v r 	 |j                  d      }|j                  |      r|j                  |       V t        |      }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                   t              nddt        j                         v st        j                  |      rt        j                   |      ndt        j                   |      t        j                   |      d	z  }	t        j"                  d
      dz   d|	iz  }
t%        t        j&                  |
            dx}x}}y# t        $ r Y w xY w)uD   'Before Starting' 섹션이 있으면 일관된 형식이어야 함.z^## Before Starting$r,   r-   r   r   r   r   files_with_before_startingr   u1   Before Starting 섹션을 가진 파일이 없음r   r   N)r;   r<   r=   r>   r?   r@   rA   searchrC   rD   r   r   r   r   r   r    r!   r"   r#   r$   )r   r   patternrM   rG   rH   r%   r&   r'   r(   r)   s              r   test_before_starting_consistentz=TestBeforeStartingUnification.test_before_starting_consistent3   s*   **4bllC%'"# 
	H##'88",,g,>>>'*.55h?
	 -.gg.2ggg.ggggggsgggsgggggg-ggg-ggg.gggggg4gggggggg	  s   
4F((	F54F5c                 P   t        j                  dt         j                        }|dd D ]  }|j                  j                  t
        v r 	 |j                  d      }|j                  |      rd}|j                  dd      d	   }||v}|st        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|       dz   d|iz  }	t        t        j                  |	            dx}x}} y# t        $ r Y w xY w)u5   YAML frontmatter가 변경되지 않았는지 확인.z^---\n.*?\n---Nr:   r,   r-   u   시작 전 확인z---
   )not in)z%(py1)s not in %(py4)s)r   py4u7   YAML frontmatter 내부에 '시작 전 확인' 있음: z
>assert %(py6)sr   )r;   r<   DOTALLr>   r?   r@   rA   matchsplitr   r   r!   r"   r#   r$   rD   )
r   r   yaml_patternrG   rH   @py_assert0@py_assert3r%   @py_format5r(   s
             r   test_yaml_frontmatter_unchangedz=TestBeforeStartingUnification.test_yaml_frontmatter_unchangedG   s4   zz"3RYY?#CR( 	H##'88",,g,>%%g. ,\3:==!3LR3P\+3PP\J[J[\+3P\ \R[R[ ,\ \R[R[ 4Q\ \J[J[PQYPZ[\ \ \H[H[\ \	  s   CD	D%$D%c                    t        j                  dt         j                  t         j                  z        }|dd D ]  }|j                  j
                  t        v r!	 |j                  d      }|j                  |      }|rI|j                  d      j                         }t        |      }d}||kD  }	|	st        j                  d|	fd	||f      d
t        j                         v st        j                   t              rt        j"                  t              nd
dt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      t        j"                  |      dz  }
t        j$                  d|       dz   d|
iz  }t'        t        j(                  |            dx}x}	} y# t*        $ r Y w xY w)u+   섹션 내용이 보존되었는지 확인.z%^## Before Starting\n(.+?)(?=^## |\Z)Nr:   r,   r-      r   r   r   r   section_contentr   u(   Before Starting 섹션이 비어있음: r   r   )r;   r<   r=   rV   r>   r?   r@   rA   rN   groupstripr   r   r   r   r   r    r!   r"   r#   r$   rD   )r   r   rO   rG   rH   rW   r`   r%   r&   r'   r(   r)   s               r   test_section_content_preservedz<TestBeforeStartingUnification.test_section_content_preservedZ   sH   **Er||VXV_V_G_`#CR( 	H##'88",,g,>w/&+kk!n&:&:&<O/j!j/!3jjj/!jjjjjj3jjj3jjjjjjjjjjjj/jjj!jjj7_`h_i5jjjjjjjj	  s   E/G	GG)__name__
__module____qualname____doc__pytestfixturer	   r   r   r*   rK   rP   r]   rc   r5   r   r   r   r      s    2^^3T$Z 3 3Ad4j AT A
$t* 
 
,h4: h$ h(4: $ &$t*  r   r   c                       e Zd ZdZddZy)TestChangeSummaryu   변경 요약 테스트.Nc                    d}g d}t        |      }||k(  }|sHt        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }t        j                  d	t        |       d
|       dz   d|iz  }t        t        j                  |            dx}}|D ]  }t        |z  dz  }|j                         s |j                  d      }	d}
|
|	v }|st        j                  d|fd|
|	f      t        j                  |
      dt        j                         v st        j
                  |	      rt        j                  |	      nddz  }t        j                  d|       dz   d|iz  }t        t        j                  |            dx}
} y)u   변경된 파일 수 확인.   )zonboarding-crozpaid-adszanalytics-trackingzpaywall-upgrade-croz
cold-emailzcompetitor-alternativeszcopy-editingzlaunch-strategyzsocial-contentzfree-tool-strategyzlead-magnetsz	popup-crozad-creativezsite-architecturezform-crozchurn-preventionzreferral-programzschema-markupzab-test-setupzsales-enablementrevopszai-seozemail-sequencer/   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr   changed_filesexpected_count)r   r   r   py5u    변경된 파일 수 불일치: z != z
>assert %(py7)spy7NzSKILL.mdr,   r-   z## Before Starting)in)z%(py1)s in %(py3)srH   )r   r   u   Before Starting 섹션 없음: z
>assert %(py5)srq   )r   r   r   r   r   r    r!   r"   r#   r$   r
   existsrA   )r   rp   ro   r%   r'   @py_format6@py_format8
skill_namerG   rH   rZ   @py_format4s               r   test_change_countz#TestChangeSummary.test_change_countq   s    
4 =!  	A!^3  	A  	A  	A!^  	A  	A  	A  	A  	A  	As  	A  	A  	As  	A  	A  	A  	A  	A  	A=  	A  	A  	A=  	A  	A  	A!  	A  	A  	A  	A  	A  	A^  	A  	A  	A^  	A  	A  	A  	A7WX[\iXjWkkop~o  6A  	A  	A  	A  	A  	A  	A ( 	gJ!J.;H ",,g,>+f+w6fff+wfff+ffffffwfffwffff:YZdYe8fffffff		gr   r   N)rd   re   rf   rg   ry   r5   r   r   rk   rk   n   s    "'gr   rk   c                       e Zd ZdZddZy)TestIntegrationu   통합 테스트.Nc                    t        t        j                  d            }|D ]  }|j                  j                  t
        v r!	 |j                  d      }t        |      }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }t        j                  d
|       dz   d|iz  }t        t        j                   |            dx}x}}t"        j$                  }	d}
t"        j&                  } |	|
||      }|s`t        j                  d|       dz   dt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |	      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |      t        j                  |      dz  }t        t        j                   |            dx}	x}
x}} y# t(        $ r&}t+        j,                  d| d|        Y d}~#d}~ww xY w)u.   모든 SKILL.md 파일이 유효한지 확인.r   r,   r-   r   r   r   r   rH   r   u   빈 파일: r   r   Nz^## u   섹션 헤더 없음: z}
>assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.search
}(%(py4)s, %(py5)s, %(py8)s
{%(py8)s = %(py6)s.MULTILINE
})
}r;   )r   py2rU   rq   r   r   py10u   유효하지 않은 파일 r4   )r	   r
   r   r>   r?   r@   rA   r   r   r   r   r   r    r!   r"   r#   r$   r;   rN   r=   rD   rh   fail)r   r   rG   rH   r%   r&   r'   r(   r)   @py_assert1r[   @py_assert7@py_assert9@py_format11rJ   s                  r   test_all_skill_md_files_validz-TestIntegration.test_all_skill_md_files_valid   s   :??<89# 	KH##'88K",,g,>7|BaB|a'BBB|aBBBBBBsBBBsBBBBBB7BBB7BBB|BBBaBBB<z)BBBBBBBByyee2<<ey'<@e@eeDZ[cZdBeeeeeeereeereeeyeeeeeeeee'eee'eeeeee2eee2eee<eee@eeeeeee	K  K9(2aSIJJKs   KL	M	#MM	rz   )rd   re   rf   rg   r   r5   r   r   r|   r|      s    Kr   r|   )rg   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r;   pathlibr   rh   r
   r@   r   rk   r|   r5   r   r   <module>r      sU   
  	  ,-
 -- Z Zz*g *gZK Kr   