
    i0E                         d 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                     dt         v sJ y )NKNOWHOW_PRELOAD_OKr   selfs    N/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_image_workflow_v25.py!test_knowhow_preload_ok_in_tokensz4TestPipelineTokens.test_knowhow_preload_ok_in_tokens0   s    #666    c                     dt         v sJ y )NDESIGN_QC_OKr   r   s    r   test_design_qc_ok_in_tokensz.TestPipelineTokens.test_design_qc_ok_in_tokens3   s    000r   c                 f    t        j                  d      }t        j                  d      }||k  sJ y)u5   KNOWHOW_PRELOAD_OK이 BRIEF_QC_OK보다 앞에 위치r   BRIEF_QC_OKN)r   index)r   idx_knowhow	idx_briefs      r   test_tokens_order_knowhow_firstz2TestPipelineTokens.test_tokens_order_knowhow_first6   s1    %++,@A#))-8	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(  sJ y )Nplan_qc_immediate_passZ   r   r   s    r   test_plan_qc_immediate_passz/TestEscalationRules.test_plan_qc_immediate_pass@   s     89R???r   c                      t         d   dk(  sJ y )Ndesign_qc_immediate_passa   r+   r   s    r   test_design_qc_immediate_passz1TestEscalationRules.test_design_qc_immediate_passC   s     :;rAAAr   N)r!   r"   r#   r$   r,   r0   r%   r   r   r'   r'   =   s    1@Br   r'   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 sJ d|v sJ d|v sJ y )Ntest-001design-qc-knowhow.mdknowhow-marketing.mdknowhow-design.mdr   r   results     r   !test_contains_three_knowhow_filesz1TestPhaseMinus1.test_contains_three_knowhow_filesJ   s6    *:6%///%///"f,,,r   c                 &    t        d      }d|v sJ y )Nr4   r   r8   r9   s     r   #test_contains_knowhow_preload_tokenz3TestPhaseMinus1.test_contains_knowhow_preload_tokenP   s    *:6#v---r   c                 0    t        d      }d|v sd|v sJ yy)u7   2차, 3차 위임 시에도 반복 수행 안내 포함r4   u   2차u   반복 수행Nr8   r9   s     r   test_contains_repeat_warningz,TestPhaseMinus1.test_contains_repeat_warningT   s'    *:6?f#<<<#<r   N)r!   r"   r#   r$   r;   r=   r?   r%   r   r   r2   r2   G   s    )-.=r   r2   c                   "    e Zd ZdZd Zd Zd Zy)TestPhase1_5Assigneeu   T4: Phase 1.5 담당자 변경c                 (    t        dd      }d|v sJ y )Nr4   /tmp/draft.md   로키r	   r9   s     r   test_contains_lokiz'TestPhase1_5Assignee.test_contains_loki]   s    &z?C6!!!r   c                 (    t        dd      }d|vsJ y )Nr4   rC   u   아마테라스rE   r9   s     r   test_no_amaterasuz&TestPhase1_5Assignee.test_no_amaterasua   s    &z?C ...r   c                 (    t        dd      }d|v sJ y )Nr4   rC   u   3자 평가rE   r9   s     r   test_third_party_eval_notez/TestPhase1_5Assignee.test_third_party_eval_notee   s    &z?C&&&r   N)r!   r"   r#   r$   rF   rH   rJ   r%   r   r   rA   rA   Z   s    ("/'r   rA   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                 (    t        dd      }d|v sJ y )Nr4   rC   u   세계 최고rE   r9   s     r   test_item7_world_classz*TestPhase1_5Content.test_item7_world_classm   s    &z?C&(((r   c                 4    t        dd      }d|v sJ d|v sJ y )Nr4   rC      학습 기록r6   rE   r9   s     r   test_learning_recordz(TestPhase1_5Content.test_learning_recordq   s*    &z?C&(((%///r   c                 2    t        dd      }d|v sd|v sJ y y )Nr4   rC   u   90점 이상   즉시 PASSrE   r9   s     r   test_immediate_pass_rulez,TestPhase1_5Content.test_immediate_pass_rulev   s)    &z?C'=F+BBB+B'r   c                 @    t        dd      }d|v sJ d|v sJ d|v sJ y)u"   실패+성공+체크리스트 3종r4   rC   u   실패 패턴u   성공 패턴u   체크리스트NrE   r9   s     r    test_learning_record_three_typesz4TestPhase1_5Content.test_learning_record_three_typesz   s8    &z?C&(((&((( F***r   c                 8    t        ddd      }d|vsJ d|v sJ y)u0   Phase 1.5 Cycle 상한 '/3' 표시 제거 확인r4   rC      cycle/3   PASS까지 반복NrE   r9   s     r   test_no_cycle_cap_phase1_5z.TestPhase1_5Content.test_no_cycle_cap_phase1_5   s,    &z?!L6!!!"f,,,r   c                 |    t        ddd      }t        ddd      }t        ddd      }d|v sJ d|v sJ d|v sJ y)	u1   Phase 1.5 모든 Cycle 동일 85점 기준 적용r4   rC   rX   rY         	   85/100점NrE   r   r1r2r3s       r   test_uniform_threshold_phase1_5z3TestPhase1_5Content.test_uniform_threshold_phase1_5   sV    ":aH":aH":aHb   b   b   r   c                 (    t        dd      }d|vsJ y)u(   Phase 1.5 조건부 승인 제거 확인r4   rC   	   조건부NrE   r9   s     r   %test_no_conditional_approval_phase1_5z9TestPhase1_5Content.test_no_conditional_approval_phase1_5   s    &z?C&(((r   N)r!   r"   r#   r$   rN   rQ   rT   rV   r]   rf   ri   r%   r   r   rL   rL   j   s)    =)0
C+-!)r   rL   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                 h    t        ddg      }t        dd      D ]  }d|d|v rJ d|dd        y )Nr4   /tmp/img.pngrX      zDQ-02du    누락)r
   range)r   r:   is      r   test_all_dq_itemsz%TestPhase3_5DQItems.test_all_dq_items   sN    &zN3CDq" 	AA3=F*@c!C,@@*	Ar   c                     t        ddg      }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d	|v sJ d
|v sJ d|v sJ d|v sJ y )Nr4   rm   u   레퍼런스 재현도u   시각적 계층 구조u   프로 완성도u   피드 차별화u   감정적 임팩트u   여백/레이아웃 밸런스u   색상 가시성/조화u   타이포그래피 품질u   CTA 효과성u   브랜드 일관성r
   r9   s     r   test_dq_contentz#TestPhase3_5DQItems.test_dq_content   s    &zN3CD'6111(F222!V+++!V+++$....&888(F222*f444&((($...r   c                     t        ddgd      }t        ddgd      }t        ddgd      }d|v sJ d|v sJ d|v sJ y)	u7   모든 Cycle에서 동일한 93점 기준 적용 확인r4   rm   rX   rY   r_   r`   93Nrt   rb   s       r   test_cycle_thresholdsz)TestPhase3_5DQItems.test_cycle_thresholds   sY    ":/?qI":/?qI":/?qIrzzrzzrzzr   c                 4    t        ddg      }d|v sd|v sJ y y )Nr4   rm      97점 이상rS   rt   r9   s     r   test_immediate_passz'TestPhase3_5DQItems.test_immediate_pass   s,    &zN3CD'=F+BBB+B'r   c                 :    t        ddgd      }d|vsJ d|v sJ y)u&   Cycle 상한 '/3' 표시 제거 확인r4   rm   rX   rY   r[   r\   Nrt   )r   rc   s     r   test_no_cycle_capz%TestPhase3_5DQItems.test_no_cycle_cap   s-    ":/?qI2~~"b(((r   c                 :    t        ddgd      }d|vsJ d|vsJ y)uT   Cycle 3 미달 시 에스컬레이션 문구 제거 확인 (일반 참조는 유지)r4   rm   r`   rY   u   미달 시 에스컬레이션u   제이회장님 보고Nrt   )r   re   s     r   test_no_escalation_textz+TestPhase3_5DQItems.test_no_escalation_text   s/    ":/?qI.b888'r111r   c                 :    t        ddgd      }d|v sJ d|v sJ y)u,   Cycle 4 이상에서도 정상 동작 확인r4   rm      rY   rw   r\   Nrt   )r   r5s     r   test_cycle_beyond_3z'TestPhase3_5DQItems.test_cycle_beyond_3   s-    ":/?qIrzz"b(((r   N)r!   r"   r#   r$   rr   ru   rx   r{   r}   r   r   r%   r   r   rk   rk      s*    <A
/C)2)r   rk   c                   "    e Zd ZdZd Zd Zd Zy)TestPhase3_5Learningu$   T7: Phase 3.5 학습 기록 + 토큰c                 6    t        ddg      }d|v sJ d|v sJ y )Nr4   rm   rP   r7   rt   r9   s     r   test_learning_record_designz0TestPhase3_5Learning.test_learning_record_design   s-    &zN3CD&((("f,,,r   c                 *    t        ddg      }d|v sJ y )Nr4   rm   r   rt   r9   s     r   test_design_qc_ok_tokenz,TestPhase3_5Learning.test_design_qc_ok_token   s    &zN3CD'''r   c                 6    t        ddg      }d|vsJ d|v sJ y )Nr4   rm   u	   마아트rD   rt   r9   s     r   test_assignee_loki_onlyz,TestPhase3_5Learning.test_assignee_loki_only   s-    &zN3CD&(((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                 &    t        d      }d|v sJ y )Nr4   u   종합 검토r   r9   s     r   test_comprehensive_reviewz$TestPhase5.test_comprehensive_review   s    $Z0&(((r   c                 &    t        d      }d|v sJ y )Nr4   u   교차 인사이트r   r9   s     r   test_cross_insightzTestPhase5.test_cross_insight   s    $Z0$...r   c                 >    t        d      }d|v sJ d|v sJ d|v sJ y )Nr4   r6   r7   r5   r   r9   s     r   test_three_knowhow_filesz#TestPhase5.test_three_knowhow_files   s6    $Z0%///"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                 &    t        d      }d|v sJ y )Nr4   u   제이회장님 승인 필수r   r9   s     r   test_approval_requiredz+TestWorkflowOverview.test_approval_required   s    /
;.&888r   c                 >    t        d      }d|v sJ d|v sJ d|v sJ y )Nr4   Phase -1	Phase 3.5Phase 5r   r9   s     r   test_all_phases_listedz+TestWorkflowOverview.test_all_phases_listed   s6    /
;V###f$$$F"""r   c                 2    t        d      }d|vsJ d|v sJ y)u>   '3사이클' 문구가 'PASS까지 반복'으로 변경 확인r4   u
   3사이클r\   Nr   r9   s     r   test_no_3cycle_textz(TestWorkflowOverview.test_no_3cycle_text   s(    /
;6)))"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                 *    t        dd      }d|v sJ y )Nr4   phaser   r   r9   s     r   test_phase_minus1z%TestRouterNewPhases.test_phase_minus1  s    ,ZrBV###r   c                 .    t        dddg      }d|v sJ y )Nr4         @z
/tmp/a.png)r   image_pathsr   r   r9   s     r   test_phase_3_5z"TestRouterNewPhases.test_phase_3_5  s"    ,ZsQ]P^_f$$$r   c                 *    t        dd      }d|v sJ y )Nr4   r   r   r   r   r9   s     r   test_phase_5z TestRouterNewPhases.test_phase_5  s    ,ZqA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matchr4   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   r4   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   r4   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                 R    t         dz  }|j                  d      }d|v sJ d|v sJ y )Nzdispatch.pyzutf-8)encoding_image_keywordsuF   이미지/광고 작업에 --workflow image-qc-gate가 필수입니다)	workspace	read_text)r   dispatch_pathcontents      r   test_warning_logic_existsz-TestDispatchWarning.test_warning_logic_exists'  s<    !M1))7); G+++W[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 sJ d|d   d   v sJ y)u%   A-07 대비율 기준 WCAG AAA 상향r   QC_CATEGORY_AAAAzA-07check7:1Nprompts.image_workflowr   r   r   s     r   test_a07_wcag_aaaz!TestFeedbackV26.test_a07_wcag_aaa1  s5    8f-g6666f-g6666r   c                 X    ddl m} d|d   d   v sJ d|d   d   v sJ d|d   d   vsJ y)	u&   A-08 최소 폰트 40px, 예외 없음r   r   40pxzA-08r   u   예외 없음14pxNr   r   s     r   test_a08_min_40px_no_exceptionz.TestFeedbackV26.test_a08_min_40px_no_exception8  sM    8v.w7777-"7"@@@@]627;;;;r   c                 L    ddl m} d|v sJ d|d   d   v sJ d|d   d   v sJ y)u    A-09 폰트 두께 항목 존재r   r   A-09300r   400Nr   r   s     r   test_a09_font_weight_existsz+TestFeedbackV26.test_a09_font_weight_exists@  sC    8&&&f-g6666f-g6666r   c                     ddl m} d|v sJ y)u$   FONT_WEIGHT_FAIL 카테고리 추가r   )FAIL_CATEGORIESFONT_WEIGHT_FAILN)r   r   )r   r   s     r   test_font_weight_fail_categoryz.TestFeedbackV26.test_font_weight_fail_categoryH  s    :!_444r   c                 :    ddl m}  |dd      }d|v sJ d|v sJ y)u3   Phase 3 프롬프트에 폰트 두께 규칙 포함r   build_phase3_promptr4   /tmp/plan.mdzfont-weight 300r   Nr   r   r   r   r:   s      r   test_phase3_font_weight_rulez,TestFeedbackV26.test_phase3_font_weight_ruleN  s-    >$Z@ F***r   c                 :    ddl m}  |dd      }d|v sJ d|v sJ y)u.   Phase 3 프롬프트에 WCAG AAA 규칙 포함r   r   r4   r   r   r   Nr   r   s      r   test_phase3_wcag_aaa_rulez)TestFeedbackV26.test_phase3_wcag_aaa_ruleV  s)    >$Z@r   c                 F    ddl m}  |dd      }d|v sJ d|v sJ d|v sJ y)	u;   Phase 3 프롬프트에 글래스모피즘 가이드 포함r   r   r4   r   u   글래스모피즘zbackdrop-filteropacityNr   r   s      r   test_phase3_glassmorphism_guidez/TestFeedbackV26.test_phase3_glassmorphism_guide^  s;    >$Z@#v--- F***F"""r   c                 :    ddl m}  |dd      }d|v sJ d|v sJ y)u?   Phase 3 프롬프트에 서울대보험쌤 로고 규칙 포함r   r   r4   r   zlogo-snuinsurancezlogo-snuinsurance-whiteNr   r   s      r   test_phase3_logo_rulez%TestFeedbackV26.test_phase3_logo_ruleg  s-    >$Z@"f,,,(F222r   c                 B    ddl m}  |ddg d      }d|v sJ d|vsJ y	)
u"   Phase 2.5 프롬프트 40px 참조r   r   r4         @z/tmp/pilot1.pngz/tmp/pilot2.pngz/tmp/pilot3.pngr   pilot_image_pathsr   r   Nr   r   r   r   r:   s      r   test_phase2_5_40px_referencez,TestFeedbackV26.test_phase2_5_40px_referenceo  s6    F,W

 V###r   c                 @    ddl m}  |ddg d      }d|v sd|v sJ y	y	)
u!   Phase 2.5 프롬프트 AAA 참조r   r   r4   r   r   r   r   r   Nr   r   s      r   test_phase2_5_aaa_referencez+TestFeedbackV26.test_phase2_5_aaa_reference{  s1    F,W

 %6/11/r   c                 :    ddl m}  |ddg      }d|v sd|v sJ yy)u:   Phase 3.5 프롬프트에서 A 카테고리 9항목 참조r   rt   r4   rm   r   u   9항목N)r   r
   )r   r
   r:   s      r   test_phase3_5_a09_referencez+TestFeedbackV26.test_phase3_5_a09_reference  s/    @&zN3CD9#666#6r   N)r!   r"   r#   r$   r   r   r   r   r   r   r   r   r   r   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                 P    ddl m}  |d      }d|v sJ d|v sJ d|v sJ d|v sJ y)	u$   Phase 0.5 브리프 QC 100점 만점r   r   r4      100점 만점u   85점 이상 통과u   X/20점   총점: X/100Nr   r   r   r   r:   s      r   test_phase0_5_total_100z/TestScoreUnification100.test_phase0_5_total_100  sG    @&z2&((($...F"""&(((r   c                 D    ddl m}  |d      }d|v sJ d|v sJ d|vsJ y)u)   Phase 0.5 판정 범위 PASS/FAIL 2단계r   r   r4   u   85점 이상u   84점 이하rh   Nr  r  s      r   test_phase0_5_scoring_rangesz4TestScoreUnification100.test_phase0_5_scoring_ranges  s9    @&z2''''''&(((r   c                 @    t        dd      }d|v sJ d|v sJ d|v sJ y)u!   Phase 1.5 기획 QC 100점 만점r4   rC   r   ra   r  NrE   r9   s     r   test_phase1_5_total_100z/TestScoreUnification100.test_phase1_5_total_100  s8    &z?C&(((f$$$&(((r   c                 ,    ddl m}  |d      }d|vsJ y)u(   Phase 0.5 조건부 승인 제거 확인r   r   r4   rh   Nr  r  s      r   test_phase0_5_no_conditionalz4TestScoreUnification100.test_phase0_5_no_conditional  s    @&z2&(((r   c                 L    t        dd      }d|v sJ d|v sJ d|v sJ d|v sJ y)uP   Phase 1.5 항목별 배점: 상위 2항목 15점 + 하위 5항목 14점 = 100점r4   rC   u'   PQ-01 | 메시지 계층 구조 | 15점u$   PQ-02 | 감정적 훅 존재 | 15점u   PQ-03 | CTA 명시 | 14점u5   PQ-07 | 세계 최고 전문가/프로 수준 | 14점NrE   r9   s     r   test_phase1_5_item_scoresz1TestScoreUnification100.test_phase1_5_item_scores  sF    &z?C8FBBB5???+v555F&PPPr   c                 (    t        dd      }d|v sJ y)u#   Phase 1.5 즉시 PASS 기준: 90점r4   rC   u   90점 이상 = 즉시 PASSNrE   r9   s     r   test_phase1_5_immediate_pass_90z7TestScoreUnification100.test_phase1_5_immediate_pass_90  s    &z?C+v555r   c                 L    t        ddg      }d|v sJ d|v sJ d|v sd|v sJ yy)u1   Phase 3.5 DQ 10항목 100점 체계 유지 확인r4   rm   zDQ-01u   10점rz   rS   Nrt   r9   s     r   test_phase3_5_unchanged_100z3TestScoreUnification100.test_phase3_5_unchanged_100  sH    &zN3CD&   &   '=F+BBB+B'r   c                 <    t         d   dk(  sJ t         d   dk(  sJ y)z,ESCALATION_RULES plan_qc_immediate_pass = 90r)   r*   r.   r/   Nr+   r   s    r   test_escalation_rules_updatedz5TestScoreUnification100.test_escalation_rules_updated  s*     89R??? :;rAAAr   c                 2    t        d      }d|v sJ d|v sJ y)u'   워크플로우 오버뷰 100점 표기r4   u   5항목 100점u   7항목 100점Nr   r9   s     r   test_workflow_overview_100z2TestScoreUnification100.test_workflow_overview_100  s(    /
;6)))6)))r   N)r!   r"   r#   r$   r  r  r  r
  r  r  r  r  r  r%   r   r   r   r     s5    D))))Q6
CB
*r   r   )$r$   ossyspathlibr   r   environgetr   strpathinsertr   r   r   r   r   r	   r
   r   r   r   r   r'   r2   rA   rL   rk   r   r   r   r   r   r   r   r   r%   r   r   <module>r     s   ( 
 
    02GHI	y>!HHOOAs9~&
 
 
' ' B B= =&' ' *) *)Z2) 2)j" "$0 0$- -(# # ? ? c c]7 ]7@>* >*r   