
     i0E                     :   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                  dd            Z ee      ej                   vr"ej                   j#                  d ee             ddlmZmZmZmZmZmZmZmZmZ  G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Z  G d d      Z! G d d      Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z& G d d      Z' G d d       Z( G d! d"      Z)y)#uD  
test_image_workflow_v25.py

image_workflow.py v2.5 변경 사항 검증 테스트 (아르고스 작성)

테스트 항목:
- T1: PIPELINE_TOKENS에 KNOWHOW_PRELOAD_OK, DESIGN_QC_OK 존재
- T2: ESCALATION_RULES에 plan_qc_immediate_pass=12, design_qc_immediate_pass=9
- T3: build_phase_minus1_prompt() - 3개 노하우 파일 경로 포함
- T4: build_phase1_5_prompt() - 담당자 "마아트+로키", "아마테라스" 미포함
- T5: build_phase1_5_prompt() - 항목7 "세계 최고" + 학습 기록 + 즉시 PASS
- T6: build_phase3_5_prompt() - DQ-01~DQ-05 전항목 + 사이클별 임계값
- T7: build_phase3_5_prompt() - 학습 기록 knowhow-design.md + DESIGN_QC_OK 토큰
- T8: build_phase5_prompt() - 종합 검토 + 교차 인사이트 + 3개 노하우 파일
- T9: build_workflow_overview_prompt() - 시작 조건 "제이회장님 승인 필수"
- T10: build_image_workflow_prompt() 라우터 - Phase -1, 3.5, 5 정상 라우팅
- T11: build_image_workflow_prompt() 라우터 - 잘못된 Phase 시 ValueError
- T12: dispatch.py에 이미지/광고 키워드 경고 로직 존재
    N)PathWORKSPACE_ROOTz/home/jay/workspace)	ESCALATION_RULESPIPELINE_TOKENSbuild_image_workflow_promptbuild_phase0_5_promptbuild_phase1_5_promptbuild_phase3_5_promptbuild_phase5_promptbuild_phase_minus1_promptbuild_workflow_overview_promptc                   "    e Zd ZdZd Zd Zd Zy)TestPipelineTokensu   T1: PIPELINE_TOKENS 검증c                 n   d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}y )NKNOWHOW_PRELOAD_OKinz%(py1)s in %(py3)sr   py1py3assert %(py5)spy5	r   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationself@py_assert0@py_assert2@py_format4@py_format6s        4/home/jay/workspace/tests/test_image_workflow_v25.py!test_knowhow_preload_ok_in_tokensz4TestPipelineTokens.test_knowhow_preload_ok_in_tokens0   s^    #6#6666#666#6666666666666666    c                 n   d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}y )NDESIGN_QC_OKr   r   r   r   r   r   r   r#   s        r)   test_design_qc_ok_in_tokensz.TestPipelineTokens.test_design_qc_ok_in_tokens3   s[    0~0000~000~0000000000000000r+   c                    t        j                  d      }t        j                  d      }||k  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
}y
)u5   KNOWHOW_PRELOAD_OK이 BRIEF_QC_OK보다 앞에 위치r   BRIEF_QC_OK)<)z%(py0)s < %(py2)sidx_knowhow	idx_brief)py0py2zassert %(py4)spy4N)
r   indexr   r   r   r   r    r   r!   r"   )r$   r2   r3   @py_assert1@py_format3@py_format5s         r)   test_tokens_order_knowhow_firstz2TestPipelineTokens.test_tokens_order_knowhow_first6   s    %++,@A#))-8	Y&&&&{Y&&&&&&{&&&{&&&&&&Y&&&Y&&&&&&&r+   N)__name__
__module____qualname____doc__r*   r.   r;    r+   r)   r   r   -   s    $71'r+   r   c                       e Zd ZdZd Zd Zy)TestEscalationRulesu'   T2: ESCALATION_RULES 즉시 PASS 규칙c                    t         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}}y )Nplan_qc_immediate_passZ   ==z%(py1)s == %(py4)sr   r6   assert %(py6)spy6r   r   r   r   r!   r"   r$   r%   @py_assert3r&   r:   @py_format7s         r)   test_plan_qc_immediate_passz/TestEscalationRules.test_plan_qc_immediate_pass@   sU     89?R?9R????9R???9???R???????r+   c                    t         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}}y )Ndesign_qc_immediate_passa   rF   rH   rI   rJ   rK   rL   rM   s         r)   test_design_qc_immediate_passz1TestEscalationRules.test_design_qc_immediate_passC   sU     :;ArA;rAAAA;rAAA;AAArAAAAAAAr+   N)r<   r=   r>   r?   rP   rT   r@   r+   r)   rB   rB   =   s    1@Br+   rB   c                   "    e Zd ZdZd Zd Zd Zy)TestPhaseMinus1zT3: build_phase_minus1_prompt()c                    t        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  }dd|iz  }t        t        j                  |            d x}}d	}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}y )Ntest-001design-qc-knowhow.mdr   r   resultr   r   r   knowhow-marketing.mdknowhow-design.md	r   r   r   r   r   r   r    r!   r"   r$   rZ   r%   r&   r'   r(   s         r)   !test_contains_three_knowhow_filesz1TestPhaseMinus1.test_contains_three_knowhow_filesJ   s    *:6%/%////%///%////////////////%/%////%///%////////////////","f,,,,"f,,,",,,,,,f,,,f,,,,,,,r+   c                 d   t        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  }dd|iz  }t        t        j                  |            d x}}y )	NrX   r   r   r   rZ   r   r   r   r]   r^   s         r)   #test_contains_knowhow_preload_tokenz3TestPhaseMinus1.test_contains_knowhow_preload_tokenP   sh    *:6#-#v----#v---#------v---v-------r+   c                    t        d      }g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }	|j                  |	       |st        j                  dfd
|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u7   2차, 3차 위임 시에도 반복 수행 안내 포함rX   u   2차u   반복 수행r   z%(py3)s in %(py5)srZ   r   r   %(py7)spy7z%(py10)s in %(py12)spy10py12%(py14)spy14   assert %(py17)spy17N)r   r   r   r   r   r   r    append_format_boolopr!   r"   r$   rZ   r8   r&   @py_assert4r%   @py_assert9@py_assert11r(   @py_format8@py_format13@py_format15@py_format16@py_format18s                 r)   test_contains_repeat_warningz,TestPhaseMinus1.test_contains_repeat_warningT   s    *:6<v<v<?<?f#<<<<<v<<<v<<<<<<<<<<<<<<<<?f<<<?<<<<<<f<<<f<<<<<<<<<<<<<<r+   N)r<   r=   r>   r?   r_   ra   r{   r@   r+   r)   rV   rV   G   s    )-.=r+   rV   c                   "    e Zd ZdZd Zd Zd Zy)TestPhase1_5Assigneeu   T4: Phase 1.5 담당자 변경c                 f   t        d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  }dd	|iz  }t        t        j                  |            d x}}y )
NrX   /tmp/draft.md   로키r   r   rZ   r   r   r   	r	   r   r   r   r   r   r    r!   r"   r^   s         r)   test_contains_lokiz'TestPhase1_5Assignee.test_contains_loki]   sg    &z?C!x6!!!!x6!!!x!!!!!!6!!!6!!!!!!!r+   c                 f   t        d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  }dd	|iz  }t        t        j                  |            d x}}y )
NrX   r   u   아마테라스not inz%(py1)s not in %(py3)srZ   r   r   r   r   r^   s         r)   test_no_amaterasuz&TestPhase1_5Assignee.test_no_amaterasua   sj    &z?C . .... ... ................r+   c                 f   t        d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  }dd	|iz  }t        t        j                  |            d x}}y )
NrX   r   u   3자 평가r   r   rZ   r   r   r   r   r^   s         r)   test_third_party_eval_notez/TestPhase1_5Assignee.test_third_party_eval_notee   sg    &z?C&}&&&&}&&&}&&&&&&&&&&&&&&&&r+   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r}   r}   Z   s    ("/'r+   r}   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestPhase1_5Contentu3   T5: Phase 1.5 항목7 + 학습 기록 + 즉시 PASSc                 f   t        d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  }dd	|iz  }t        t        j                  |            d x}}y )
NrX   r   u   세계 최고r   r   rZ   r   r   r   r   r^   s         r)   test_item7_world_classz*TestPhase1_5Content.test_item7_world_classm   sg    &z?C(&((((&(((((((((&(((&(((((((r+   c                    t        d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  }dd	|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )NrX   r      학습 기록r   r   rZ   r   r   r   r[   r   r^   s         r)   test_learning_recordz(TestPhase1_5Content.test_learning_recordq   s    &z?C(&((((&(((((((((&(((&(((((((%/%////%///%////////////////r+   c                    t        dd      }g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }	|j                  |	       |st        j                  dfd|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}}y )NrX   r   u   90점 이상   즉시 PASSr   rc   rZ   rd   re   rf   rg   rh   rk   rl   rm   rn   ro   )r	   r   r   r   r   r   r    rp   rq   r!   r"   rr   s                 r)   test_immediate_pass_rulez,TestPhase1_5Content.test_immediate_pass_rulev   s    &z?CB~B~'B=B=F+BBBBB~BBB~BBBBBBBBBBBBBBBB=FBBB=BBBBBBFBBBFBBBBBBBBBBBBBBr+   c                    t        d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  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u"   실패+성공+체크리스트 3종rX   r   u   실패 패턴r   r   rZ   r   r   r   Nu   성공 패턴u   체크리스트r   r^   s         r)    test_learning_record_three_typesz4TestPhase1_5Content.test_learning_record_three_typesz   s   &z?C(&((((&(((((((((&(((&((((((((&((((&(((((((((&(((&((((((( * F**** F*** ******F***F*******r+   c                    t        dd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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u0   Phase 1.5 Cycle 상한 '/3' 표시 제거 확인rX   r   rm   cycle/3r   r   rZ   r   r   r   N   PASS까지 반복r   r   r   r^   s         r)   test_no_cycle_cap_phase1_5z.TestPhase1_5Content.test_no_cycle_cap_phase1_5   s    &z?!L!t6!!!!t6!!!t!!!!!!6!!!6!!!!!!!","f,,,,"f,,,",,,,,,f,,,f,,,,,,,r+   c                 6   t        ddd      }t        ddd      }t        dd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  }dd|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd	||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd	||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)u1   Phase 1.5 모든 Cycle 동일 85점 기준 적용rX   r   rm   r         	   85/100점r   r   r1r   r   r   Nr2r3r   r$   r   r   r   r%   r&   r'   r(   s           r)   test_uniform_threshold_phase1_5z3TestPhase1_5Content.test_uniform_threshold_phase1_5   s7   ":aH":aH":aH {b    {b   {      b   b        {b    {b   {      b   b        {b    {b   {      b   b       r+   c                 f   t        d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  }dd	|iz  }t        t        j                  |            d
x}}y
)u(   Phase 1.5 조건부 승인 제거 확인rX   r   	   조건부r   r   rZ   r   r   r   Nr   r^   s         r)   %test_no_conditional_approval_phase1_5z9TestPhase1_5Content.test_no_conditional_approval_phase1_5   sg    &z?C({&(((({&((({((((((&(((&(((((((r+   N)r<   r=   r>   r?   r   r   r   r   r   r   r   r@   r+   r)   r   r   j   s)    =)0
C+-!)r+   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestPhase3_5DQItemsu2   T6: Phase 3.5 DQ-01~DQ-05 + 사이클별 임계값c                    t        ddg      }t        dd      D ]  }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d      dz   d|iz  }t        t        j                  |            d x}} y )NrX   /tmp/img.pngrm      zDQ-02dr   r   rZ   r   u    누락z
>assert %(py5)sr   )r
   ranger   r   r   r   r   r    _format_assertmsgr!   r"   )r$   rZ   ir%   r&   r'   r(   s          r)   test_all_dq_itemsz%TestPhase3_5DQItems.test_all_dq_items   s    &zN3CDq" 	AA3=@=F*@@@=F@@@=@@@@@@F@@@F@@@@c!C,@@@@@@@	Ar+   c                    t        ddg      }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )NrX   r   u   레퍼런스 재현도r   r   rZ   r   r   r   u   시각적 계층 구조u   프로 완성도u   피드 차별화u   감정적 임팩트u   여백/레이아웃 밸런스u   색상 가시성/조화u   타이포그래피 품질u   CTA 효과성u   브랜드 일관성	r
   r   r   r   r   r   r    r!   r"   r^   s         r)   test_dq_contentz#TestPhase3_5DQItems.test_dq_content   s   &zN3CD'1'61111'6111'111111611161111111(2(F2222(F222(222222F222F2222222!+!V++++!V+++!++++++V+++V+++++++!+!V++++!V+++!++++++V+++V+++++++$.$....$...$.................8.&8888.&888.888888&888&8888888(2(F2222(F222(222222F222F2222222*4*f4444*f444*444444f444f4444444(&((((&(((((((((&(((&((((((($.$....$...$................r+   c                 <   t        ddgd      }t        ddgd      }t        ddg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  }dd|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd	||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd	||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}y)u7   모든 Cycle에서 동일한 93점 기준 적용 확인rX   r   rm   r   r   r   93r   r   r   r   r   r   Nr   r   r   r   s           r)   test_cycle_thresholdsz)TestPhase3_5DQItems.test_cycle_thresholds   s=   ":/?qI":/?qI":/?qItrztrtrrtrztrtrrtrztrtrrr+   c                    t        ddg      }g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }	|j                  |	       |st        j                  dfd|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}}y )NrX   r      97점 이상r   r   rc   rZ   rd   re   rf   rg   rh   rk   rl   rm   rn   ro   )r
   r   r   r   r   r   r    rp   rq   r!   r"   rr   s                 r)   test_immediate_passz'TestPhase3_5DQItems.test_immediate_pass   s    &zN3CDB~B~'B=B=F+BBBBB~BBB~BBBBBBBBBBBBBBBB=FBBB=BBBBBBFBBBFBBBBBBBBBBBBBBr+   c                    t        ddg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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u&   Cycle 상한 '/3' 표시 제거 확인rX   r   rm   r   r   r   r   r   r   r   r   Nr   r   r   r   )r$   r   r%   r&   r'   r(   s         r)   test_no_cycle_capz%TestPhase3_5DQItems.test_no_cycle_cap   s    ":/?qIt2~t2t22"("b(((("b((("((((((b(((b(((((((r+   c                    t        ddg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  }d
d|iz  }t        t        j                  |            dx}}d}||v}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)uT   Cycle 3 미달 시 에스컬레이션 문구 제거 확인 (일반 참조는 유지)rX   r   r   r   u   미달 시 에스컬레이션r   r   r   r   r   r   Nu   제이회장님 보고r   )r$   r   r%   r&   r'   r(   s         r)   test_no_escalation_textz+TestPhase3_5DQItems.test_no_escalation_text   s    ":/?qI.8.b8888.b888.888888b888b8888888'1'r1111'r111'111111r111r1111111r+   c                    t        ddg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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u,   Cycle 4 이상에서도 정상 동작 확인rX   r      r   r   r   r   r5r   r   r   Nr   r   )r$   r   r%   r&   r'   r(   s         r)   test_cycle_beyond_3z'TestPhase3_5DQItems.test_cycle_beyond_3   s    ":/?qItrztrtrr"("b(((("b((("((((((b(((b(((((((r+   N)r<   r=   r>   r?   r   r   r   r   r   r   r   r@   r+   r)   r   r      s*    <A
/C)2)r+   r   c                   "    e Zd ZdZd Zd Zd Zy)TestPhase3_5Learningu$   T7: Phase 3.5 학습 기록 + 토큰c                    t        ddg      }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )NrX   r   r   r   r   rZ   r   r   r   r\   r   r^   s         r)   test_learning_record_designz0TestPhase3_5Learning.test_learning_record_design   s    &zN3CD(&((((&(((((((((&(((&(((((((","f,,,,"f,,,",,,,,,f,,,f,,,,,,,r+   c                 h   t        ddg      }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )
NrX   r   r-   r   r   rZ   r   r   r   r   r^   s         r)   test_design_qc_ok_tokenz,TestPhase3_5Learning.test_design_qc_ok_token   sj    &zN3CD'~''''~'''~''''''''''''''''r+   c                    t        ddg      }d}||v}|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )NrX   r   u	   마아트r   r   rZ   r   r   r   r   r   r   r   r^   s         r)   test_assignee_loki_onlyz,TestPhase3_5Learning.test_assignee_loki_only   s    &zN3CD({&(((({&((({((((((&(((&(((((((!x6!!!!x6!!!x!!!!!!6!!!6!!!!!!!r+   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r   r      s    .-
("r+   r   c                   "    e Zd ZdZd Zd Zd Zy)
TestPhase5u#   T8: Phase 5 노하우 종합 검토c                 d   t        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  }dd|iz  }t        t        j                  |            d x}}y )	NrX   u   종합 검토r   r   rZ   r   r   r   	r   r   r   r   r   r   r    r!   r"   r^   s         r)   test_comprehensive_reviewz$TestPhase5.test_comprehensive_review   se    $Z0(&((((&(((((((((&(((&(((((((r+   c                 d   t        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  }dd|iz  }t        t        j                  |            d x}}y )	NrX   u   교차 인사이트r   r   rZ   r   r   r   r   r^   s         r)   test_cross_insightzTestPhase5.test_cross_insight   sh    $Z0$.$....$...$................r+   c                    t        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  }dd|iz  }t        t        j                  |            d x}}d	}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}y )NrX   r[   r   r   rZ   r   r   r   r\   rY   r   r^   s         r)   test_three_knowhow_filesz#TestPhase5.test_three_knowhow_files   s    $Z0%/%////%///%////////////////","f,,,,"f,,,",,,,,,f,,,f,,,,,,,%/%////%///%////////////////r+   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r   r      s    -)/0r+   r   c                   "    e Zd ZdZd Zd Zd Zy)TestWorkflowOverviewu   T9: 시작 조건c                 d   t        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  }dd|iz  }t        t        j                  |            d x}}y )	NrX   u   제이회장님 승인 필수r   r   rZ   r   r   r   	r   r   r   r   r   r   r    r!   r"   r^   s         r)   test_approval_requiredz+TestWorkflowOverview.test_approval_required   sh    /
;.8.&8888.&888.888888&888&8888888r+   c                    t        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  }dd|iz  }t        t        j                  |            d x}}d	}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d x}}y )NrX   Phase -1r   r   rZ   r   r   r   	Phase 3.5Phase 5r   r^   s         r)   test_all_phases_listedz+TestWorkflowOverview.test_all_phases_listed   s   /
;#zV####zV###z######V###V#######${f$$$${f$$${$$$$$$f$$$f$$$$$$$"yF""""yF"""y""""""F"""F"""""""r+   c                    t        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  }dd|iz  }t        t        j                  |            d	x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d	x}}y	)u>   '3사이클' 문구가 'PASS까지 반복'으로 변경 확인rX   u
   3사이클r   r   rZ   r   r   r   Nr   r   r   r   r^   s         r)   test_no_3cycle_textz(TestWorkflowOverview.test_no_3cycle_text   s    /
;)|6))))|6)))|))))))6)))6)))))))","f,,,,"f,,,",,,,,,f,,,f,,,,,,,r+   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r   r      s    9#-r+   r   c                   "    e Zd ZdZd Zd Zd Zy)TestRouterNewPhasesu   T10: 라우터 Phase -1, 3.5, 5c                 h   t        d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  }d	d
|iz  }t        t        j                  |            d x}}y )NrX   phaser   r   r   rZ   r   r   r   	r   r   r   r   r   r   r    r!   r"   r^   s         r)   test_phase_minus1z%TestRouterNewPhases.test_phase_minus1  sg    ,ZrB#zV####zV###z######V###V#######r+   c                 l   t        dddg      }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            d x}}y )NrX         @z
/tmp/a.png)r   image_pathsr   r   r   rZ   r   r   r   r   r^   s         r)   test_phase_3_5z"TestRouterNewPhases.test_phase_3_5  sm    ,ZsQ]P^_${f$$$${f$$${$$$$$$f$$$f$$$$$$$r+   c                 h   t        d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  }d	d
|iz  }t        t        j                  |            d x}}y )NrX   r   r   r   r   r   rZ   r   r   r   r   r^   s         r)   test_phase_5z TestRouterNewPhases.test_phase_5  sg    ,ZqA"yF""""yF"""y""""""F"""F"""""""r+   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r   r     s    )$%#r+   r   c                   "    e Zd ZdZd Zd Zd Zy)TestRouterErrorsu   T11: 라우터 에러 케이스c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)Nu   지원하지 않는 PhasematchrX   c   r   pytestraises
ValueErrorr   r$   s    r)   test_invalid_phase_raisesz*TestRouterErrors.test_invalid_phase_raises  s0    ]]:-HI 	>'
"=	> 	> 	>   3<c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)Nz
-1.*3.5.*5r   rX   r   r   r   r   s    r)   &test_error_message_includes_new_phasesz7TestRouterErrors.test_error_message_includes_new_phases  s/    ]]:\: 	>'
"=	> 	> 	>r   c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)Nr   r   rX   r   r   r   r   s    r)   #test_phase_3_5_requires_image_pathsz4TestRouterErrors.test_phase_3_5_requires_image_paths  s/    ]]:]; 	?'
#>	? 	? 	?r   N)r<   r=   r>   r?   r   r   r   r@   r+   r)   r   r     s    )>>?r+   r   c                       e Zd ZdZd Zy)TestDispatchWarningu%   T12: dispatch.py 경고 로직 존재c                    t         dz  }|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  }d	d
|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            d x}}y )Nzdispatch.pyzutf-8)encoding_image_keywordsr   r   contentr   r   r   uF   이미지/광고 작업에 --workflow image-qc-gate가 필수입니다)
	workspace	read_textr   r   r   r   r   r    r!   r"   )r$   dispatch_pathr  r%   r&   r'   r(   s          r)   test_warning_logic_existsz-TestDispatchWarning.test_warning_logic_exists'  s    !M1))7); + G++++ G+++ ++++++G+++G+++++++WbW[bbbbbW[bbbbWbbbbbb[bbbb[bbbbbbbbr+   N)r<   r=   r>   r?   r  r@   r+   r)   r   r   $  s    /cr+   r   c                   R    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)TestFeedbackV26u:   제이회장님 피드백 4건 반영 검증 (task-1268.1)c                    ddl m} d}|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   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)u%   A-07 대비율 기준 WCAG AAA 상향r   QC_CATEGORY_AAAAzA-07checkr   z%(py1)s in %(py4)srI   rJ   rK   N7:1prompts.image_workflowr  r   r   r   r!   r"   r$   r  r%   rN   r&   r:   rO   s          r)   test_a07_wcag_aaaz!TestFeedbackV26.test_a07_wcag_aaa1  s    86f-g66u66666u6666u666666666666f-g66u66666u6666u66666666666r+   c                    ddl m} d}|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   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   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)u&   A-08 최소 폰트 40px, 예외 없음r   r  40pxzA-08r  r   r  rI   rJ   rK   Nu   예외 없음14pxr   )z%(py1)s not in %(py4)sr  r  s          r)   test_a08_min_40px_no_exceptionz.TestFeedbackV26.test_a08_min_40px_no_exception8  s
   87v.w77v77777v7777v77777777777@-"7"@@"@@@@@"@@@@@@@"@@@@@@@@;]627;;v;;;;;v;;;;v;;;;;;;;;;;r+   c                 b   ddl m} d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}|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   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
)u    A-09 폰트 두께 항목 존재r   r  A-09r   r   r  r   r   r   N300r  r  rI   rJ   rK   400)
r  r  r   r   r   r   r   r    r!   r"   )	r$   r  r%   r&   r'   r(   rN   r:   rO   s	            r)   test_a09_font_weight_existsz+TestFeedbackV26.test_a09_font_weight_exists@  s   8&v&&&&v&&&v&&&&&&&&&&&&&&&&6f-g66u66666u6666u666666666666f-g66u66666u6666u66666666666r+   c                 Z   ddl m} d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u$   FONT_WEIGHT_FAIL 카테고리 추가r   )FAIL_CATEGORIESFONT_WEIGHT_FAILr   r   r   r   r   r   N)
r  r   r   r   r   r   r   r    r!   r"   )r$   r   r%   r&   r'   r(   s         r)   test_font_weight_fail_categoryz.TestFeedbackV26.test_font_weight_fail_categoryH  sa    :!4!_4444!_444!444444_444_4444444r+   c                    ddl m}  |d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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u3   Phase 3 프롬프트에 폰트 두께 규칙 포함r   build_phase3_promptrX   /tmp/plan.mdzfont-weight 300r   r   rZ   r   r   r   Nr  
r  r%  r   r   r   r   r   r    r!   r"   r$   r%  rZ   r%   r&   r'   r(   s          r)   test_phase3_font_weight_rulez,TestFeedbackV26.test_phase3_font_weight_ruleN  s    >$Z@ * F**** F*** ******F***F*******vvvr+   c                    ddl m}  |d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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u.   Phase 3 프롬프트에 WCAG AAA 규칙 포함r   r$  rX   r&  r  r   r   rZ   r   r   r   Nr  r'  r(  s          r)   test_phase3_wcag_aaa_rulez)TestFeedbackV26.test_phase3_wcag_aaa_ruleV  s    >$Z@uuuuuur+   c                     ddl m}  |d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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u;   Phase 3 프롬프트에 글래스모피즘 가이드 포함r   r$  rX   r&  u   글래스모피즘r   r   rZ   r   r   r   Nzbackdrop-filteropacityr'  r(  s          r)   test_phase3_glassmorphism_guidez/TestFeedbackV26.test_phase3_glassmorphism_guide^  s"   >$Z@#-#v----#v---#------v---v------- * F**** F*** ******F***F*******"yF""""yF"""y""""""F"""F"""""""r+   c                    ddl m}  |d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  }d
d|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u?   Phase 3 프롬프트에 서울대보험쌤 로고 규칙 포함r   r$  rX   r&  zlogo-snuinsurancer   r   rZ   r   r   r   Nzlogo-snuinsurance-whiter'  r(  s          r)   test_phase3_logo_rulez%TestFeedbackV26.test_phase3_logo_ruleg  s    >$Z@","f,,,,"f,,,",,,,,,f,,,f,,,,,,,(2(F2222(F222(222222F222F2222222r+   c                    ddl m}  |ddg 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  }dd|iz  }t        t        j                  |            dx}}d}||v}|st        j                  d|fd||f      t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
dz  }dd|iz  }t        t        j                  |            dx}}y)u"   Phase 2.5 프롬프트 40px 참조r   r   rX         @z/tmp/pilot1.pngz/tmp/pilot2.pngz/tmp/pilot3.pngr   pilot_image_pathsr  r   r   rZ   r   r   r   Nr  r   r   )
r  r   r   r   r   r   r   r    r!   r"   )r$   r   rZ   r%   r&   r'   r(   s          r)   test_phase2_5_40px_referencez,TestFeedbackV26.test_phase2_5_40px_referenceo  s    F,W

 vvv#vV####vV###v######V###V#######r+   c                     ddl m}  |ddg d      }g }d}||v }|}|sd}||v }|}|sXt        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }	dd|	iz  }
|j                  |
       |st        j                  d	fd|f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u!   Phase 2.5 프롬프트 AAA 참조r   r2  rX   r3  r4  r5  r  r  r   rc   rZ   rd   re   rf   rg   rh   rk   rl   rm   rn   ro   N)r  r   r   r   r   r   r   r    rp   rq   r!   r"   )r$   r   rZ   r8   r&   rs   r%   rt   ru   r(   rv   rw   rx   ry   rz   s                  r)   test_phase2_5_aaa_referencez+TestFeedbackV26.test_phase2_5_aaa_reference{  s    F,W

 	2u1u1%1%6/1111u111u1111111111111111%6111%1111116111611111111111111r+   c                    ddl m}  |ddg      }g }d}||v }|}|sd}||v }|}|sXt        j                  d|fd||f      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }	dd|	iz  }
|j                  |
       |st        j                  dfd|f      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)u:   Phase 3.5 프롬프트에서 A 카테고리 9항목 참조r   )r
   rX   r   r  u   9항목r   rc   rZ   rd   re   rf   rg   rh   rk   rl   rm   rn   ro   N)r  r
   r   r   r   r   r   r    rp   rq   r!   r"   )r$   r
   rZ   r8   r&   rs   r%   rt   ru   r(   rv   rw   rx   ry   rz   s                  r)   test_phase3_5_a09_referencez+TestFeedbackV26.test_phase3_5_a09_reference  s    @&zN3CD6v6v6969#66666v666v66666666666666669666966666666666666666666666r+   N)r<   r=   r>   r?   r  r  r  r"  r)  r+  r.  r0  r7  r9  r;  r@   r+   r)   r
  r
  .  s<    D7<75 #3
$	27r+   r
  c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestScoreUnification100u:   QC 점수 체계 100점 만점 통일 검증 (task-1335.1)c                 H   ddl m}  |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  }d	d
|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}y)u$   Phase 0.5 브리프 QC 100점 만점r   r   rX      100점 만점r   r   rZ   r   r   r   Nu   85점 이상 통과u   X/20점   총점: X/100
r  r   r   r   r   r   r   r    r!   r"   r$   r   rZ   r%   r&   r'   r(   s          r)   test_phase0_5_total_100z/TestScoreUnification100.test_phase0_5_total_100  sv   @&z2(&((((&(((((((((&(((&((((((($.$....$...$................"yF""""yF"""y""""""F"""F"""""""(&((((&(((((((((&(((&(((((((r+   c                    ddl m}  |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  }d	d
|iz  }t        t        j                  |            dx}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}d}||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}y)u)   Phase 0.5 판정 범위 PASS/FAIL 2단계r   r?  rX   u   85점 이상r   r   rZ   r   r   r   Nu   84점 이하r   r   r   rB  rC  s          r)   test_phase0_5_scoring_rangesz4TestScoreUnification100.test_phase0_5_scoring_ranges  s   @&z2'~''''~'''~'''''''''''''''''~''''~'''~''''''''''''''''({&(((({&((({((((((&(((&(((((((r+   c                    t        d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  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u!   Phase 1.5 기획 QC 100점 만점rX   r   r@  r   r   rZ   r   r   r   Nr   rA  r   r^   s         r)   test_phase1_5_total_100z/TestScoreUnification100.test_phase1_5_total_100  s   &z?C(&((((&(((((((((&(((&(((((((${f$$$${f$$${$$$$$$f$$$f$$$$$$$(&((((&(((((((((&(((&(((((((r+   c                 j   ddl m}  |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  }d	d
|iz  }t        t        j                  |            dx}}y)u(   Phase 0.5 조건부 승인 제거 확인r   r?  rX   r   r   r   rZ   r   r   r   NrB  rC  s          r)   test_phase0_5_no_conditionalz4TestScoreUnification100.test_phase0_5_no_conditional  sh    @&z2({&(((({&((({((((((&(((&(((((((r+   c                 D   t        d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  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)uP   Phase 1.5 항목별 배점: 상위 2항목 15점 + 하위 5항목 14점 = 100점rX   r   u'   PQ-01 | 메시지 계층 구조 | 15점r   r   rZ   r   r   r   Nu$   PQ-02 | 감정적 훅 존재 | 15점u   PQ-03 | CTA 명시 | 14점u5   PQ-07 | 세계 최고 전문가/프로 수준 | 14점r   r^   s         r)   test_phase1_5_item_scoresz1TestScoreUnification100.test_phase1_5_item_scores  s~   &z?C8B8FBBBB8FBBB8BBBBBBFBBBFBBBBBBB5?5????5???5????????????????+5+v5555+v555+555555v555v5555555FPF&PPPPF&PPPFPPPPPP&PPP&PPPPPPPr+   c                 f   t        d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  }dd	|iz  }t        t        j                  |            d
x}}y
)u#   Phase 1.5 즉시 PASS 기준: 90점rX   r   u   90점 이상 = 즉시 PASSr   r   rZ   r   r   r   Nr   r^   s         r)   test_phase1_5_immediate_pass_90z7TestScoreUnification100.test_phase1_5_immediate_pass_90  sj    &z?C+5+v5555+v555+555555v555v5555555r+   c                    t        ddg      }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}g }d}||v }|}|sd}||v }	|	}|sXt        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }
|j                  |
       |st        j                  d	fd|f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d
x}x}x}x}x}}	y
)u1   Phase 3.5 DQ 10항목 100점 체계 유지 확인rX   r   zDQ-01r   r   rZ   r   r   r   Nu   10점r   r   rc   rd   re   rf   rg   rh   rk   rl   rm   rn   ro   )r
   r   r   r   r   r   r    r!   r"   rp   rq   )r$   rZ   r%   r&   r'   r(   r8   rs   rt   ru   rv   rw   rx   ry   rz   s                  r)   test_phase3_5_unchanged_100z3TestScoreUnification100.test_phase3_5_unchanged_100  s   &zN3CD w&    w&   w      &   &        w&    w&   w      &   &       B~B~'B=B=F+BBBBB~BBB~BBBBBBBBBBBBBBBB=FBBB=BBBBBBFBBBFBBBBBBBBBBBBBBr+   c                    t         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}}t         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}}y)z,ESCALATION_RULES plan_qc_immediate_pass = 90rD   rE   rF   rH   rI   rJ   rK   NrR   rS   rL   rM   s         r)   test_escalation_rules_updatedz5TestScoreUnification100.test_escalation_rules_updated  s     89?R?9R????9R???9???R??????? :;ArA;rAAAA;rAAA;AAArAAAAAAAr+   c                    t        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  }dd|iz  }t        t        j                  |            d	x}}d
}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d	x}}y	)u'   워크플로우 오버뷰 100점 표기rX   u   5항목 100점r   r   rZ   r   r   r   Nu   7항목 100점r   r^   s         r)   test_workflow_overview_100z2TestScoreUnification100.test_workflow_overview_100  s    /
;)6))))6)))))))))6)))6))))))))6))))6)))))))))6)))6)))))))r+   N)r<   r=   r>   r?   rD  rF  rH  rJ  rL  rN  rP  rR  rT  r@   r+   r)   r=  r=    s5    D))))Q6
CB
*r+   r=  )*r?   builtinsr   _pytest.assertion.rewrite	assertionrewriter   ossyspathlibr   r   environgetr  strpathinsertr  r   r   r   r   r	   r
   r   r   r   r   rB   rV   r}   r   r   r   r   r   r   r   r   r
  r=  r@   r+   r)   <module>ra     s  (  	 
    02GHI	y>!HHOOAs9~&
 
 
' ' B B= =&' ' *) *)Z2) 2)j" "$0 0$- -(# # ? ? c c]7 ]7@>* >*r+   