
    SiK                        d Z ddlZddl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  ee
dz        Z ee
dz        Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Zy)u}  
test_qc_integration.py - Phase 1-3 통합 테스트 (아르고스 작성)

테스트 항목:
1. team_prompts normal 레벨: selfcheck + QC-RULES.md 참조 확인
2. team_prompts critical 레벨: 마아트 키워드 + QC-RULES.md 참조
3. team_prompts security 레벨: 마아트 + 로키 키워드 + QC-RULES.md 참조
4. 기존 테스트 회귀: tests/test_team_prompts.py 전체 통과 확인
5. qc_verify.py end-to-end: task-4.4로 실행하여 JSON 출력 확인

Note: 경량화 리팩토링(task-210.1) 이후 _build_verification_section()은
인라인 대신 QC-RULES.md 파일 참조 + 레벨별 요약 1줄만 출력합니다.
    N)PathWORKSPACE_ROOTz/home/jay/workspacezteams/dev1/qc/qc_verify.pyztests/test_team_prompts.pyc                   (    e Zd ZdZd Zd Zd Zd Zy)TestVerificationSectionNormalu-   normal 레벨: selfcheck + QC-RULES.md 참조c                 :    t        j                  d      }d|v sJ y )Nnormal	   셀프 QCtp_build_verification_sectionselfresults     J/home/jay/workspace/.worktrees/task-2117-dev1/tests/test_qc_integration.pytest_normal_contains_selfcheckz<TestVerificationSectionNormal.test_normal_contains_selfcheck*   s     //9f$$$    c                 :    t        j                  d      }d|v sJ y )Nr   QC-RULES.mdr
   r   s     r   !test_normal_contains_qc_rules_refz?TestVerificationSectionNormal.test_normal_contains_qc_rules_ref.   s     //9&&&r   c                 :    t        j                  d      }d|v sJ y )Nr   u   자동 검증r
   r   s     r   (test_normal_contains_auto_verify_keywordzFTestVerificationSectionNormal.test_normal_contains_auto_verify_keyword2   s     //9&(((r   c                 z    t        j                  d      }d|v r|j                  d      d   n|}d|vsJ d|vsJ y )Nr   u   ## 게이트 지시r   	   마아트   로키)r   r   split)r   r   base_sections      r   test_normal_no_maat_no_lokiz9TestVerificationSectionNormal.test_normal_no_maat_no_loki6   sM    //9AVZ`A`v||$9:1=fl,...|+++r   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r   '   s    7%'),r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestVerificationSectionCriticalu?   critical 레벨: 마아트 + 독립 검증 + QC-RULES.md 참조c                 :    t        j                  d      }d|v sJ y )Ncriticalr   r
   r   s     r   test_critical_contains_maatz;TestVerificationSectionCritical.test_critical_contains_maatF        //
;f$$$r   c                 :    t        j                  d      }d|v sJ y )Nr&   u   독립 검증r
   r   s     r   /test_critical_contains_independent_verificationzOTestVerificationSectionCritical.test_critical_contains_independent_verificationJ        //
;&(((r   c                 :    t        j                  d      }d|v sJ y )Nr&   r   r
   r   s     r   #test_critical_contains_qc_rules_refzCTestVerificationSectionCritical.test_critical_contains_qc_rules_refN        //
;&&&r   c                 :    t        j                  d      }d|vsJ y )Nr&   r   r
   r   s     r   test_critical_no_lokiz5TestVerificationSectionCritical.test_critical_no_lokiR   s     //
;v%%%r   c                 :    t        j                  d      }d|v sJ y )Nr&   r	   r
   r   s     r    test_critical_contains_selfcheckz@TestVerificationSectionCritical.test_critical_contains_selfcheckV   r(   r   N)	r   r   r    r!   r'   r*   r-   r0   r2   r"   r   r   r$   r$   C   s    I%)'&%r   r$   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestVerificationSectionSecurityu8   security 레벨: 마아트 + 로키 + QC-RULES.md 참조c                 :    t        j                  d      }d|v sJ y )Nsecurityr   r
   r   s     r   test_security_contains_maatz;TestVerificationSectionSecurity.test_security_contains_maatc   r(   r   c                 :    t        j                  d      }d|v sJ y )Nr6   r   r
   r   s     r   test_security_contains_lokiz;TestVerificationSectionSecurity.test_security_contains_lokig   s     //
;6!!!r   c                 :    t        j                  d      }d|v sJ y )Nr6   u   보안 감사r
   r   s     r   $test_security_contains_audit_keywordzDTestVerificationSectionSecurity.test_security_contains_audit_keywordk   r+   r   c                 :    t        j                  d      }d|v sJ y )Nr6   r   r
   r   s     r   #test_security_contains_qc_rules_refzCTestVerificationSectionSecurity.test_security_contains_qc_rules_refo   r.   r   c                 :    t        j                  d      }d|v sJ y )Nr6   r	   r
   r   s     r    test_security_contains_selfcheckz@TestVerificationSectionSecurity.test_security_contains_selfchecks   r(   r   N)	r   r   r    r!   r7   r9   r;   r=   r?   r"   r   r   r4   r4   `   s    B%")'%r   r4   c                       e Zd ZdZd Zy)TestRegressionTeamPromptsuT   기존 test_team_prompts.py 전체가 여전히 통과하는지 subprocess로 검증c           	      H   t        j                  dddt        ddgdddt        t                    }|j
                  d	k(  s'J d
|j                  dd   d|j                  dd          d|j                  j                         vsd|j                  j                         v sJ y y )Npython3z-mpytestz-vz
--tb=shortTx   )capture_outputtexttimeoutcwdr   u,   기존 test_team_prompts.py 실패!
stdout: iz	
stderr: ifailedz0 failed)	
subprocessrun_TEST_TEAM_PROMPTS_PATHstr
_WORKSPACE
returncodestdoutstderrlowerr   procs     r    test_team_prompts_tests_all_passz:TestRegressionTeamPrompts.test_team_prompts_tests_all_pass   s    ~~h(?|TJ
 !# 	
?EF@S?TTbcgcncnosotcubvw	
# t{{0022jDKKDUDUDW6WWW6W2r   N)r   r   r    r!   rV   r"   r   r   rA   rA   }   s    ^Xr   rA   c                   r    e Zd ZdZ ej
                  d      d        Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)TestEndToEndQCVerifyuT   qc_verify.py --task-id task-4.4 --skip api_health,test_runner 실행 및 JSON 검증class)scopec                     t        j                  dt        ddddgddd      }|t        j                  |j
                  j                               fS )	NrC   z	--task-idtask-4.4z--skipz'api_health,test_runner,full_suite_checkT   )rF   rG   rH   )rK   rL   _QC_VERIFY_PATHjsonloadsrQ   striprT   s     r   	qc_resultzTestEndToEndQCVerify.qc_result   sU    ~~9  
 TZZ 1 1 3444r   c                 <    |\  }}t        |t              sJ d       y )Nu%   stdout가 유효한 JSON이어야 함)
isinstancedictr   rb   rU   parseds       r   test_e2e_outputs_valid_jsonz0TestEndToEndQCVerify.test_e2e_outputs_valid_json   s!     f&$'P)PP'r   c                 "    |\  }}|d   dk(  sJ y )Ntask_idr\   r"   r   rb   _rg   s       r   test_e2e_task_id_correctz-TestEndToEndQCVerify.test_e2e_task_id_correct   s    	6i J...r   c                 ^    |\  }}|j                  di       }dD ]  }||v rJ d| d        y )Nchecks)
api_health
file_checkdata_integritytest_runneru   checks에 'u   ' 누락get)r   rb   rl   rg   ro   
check_names         r   test_e2e_has_all_check_keysz0TestEndToEndQCVerify.test_e2e_has_all_check_keys   sH    	6Hb)W 	LJ'K;zl()KK'	Lr   c                 f    |\  }}|d   }|d   d   dk(  sJ |d   d   dv sJ d|d   d           y )Nro   rp   statusSKIPrs   )FAILrz   u[   test_runner는 MANDATORY — skip 차단으로 FAIL 또는 정상 실행 SKIP 기대, got: r"   )r   rb   rl   rg   ro   s        r    test_e2e_skipped_checks_are_skipz5TestEndToEndQCVerify.test_e2e_skipped_checks_are_skip   sv    	6!l#H-777m$X.2BB 	Lijpq~j  AI  kJ  jK  L	LBr   c                 .    |\  }}|d   d   d   dk(  sJ y)uG   task-4.4는 completed지만 .done 파일 없음 → data_integrity=FAILro   rr   ry   r{   Nr"   rk   s       r   test_e2e_data_integrity_is_failz4TestEndToEndQCVerify.test_e2e_data_integrity_is_fail   s)    	6h 01(;vEEEr   c                 "    |\  }}|d   dk(  sJ y)u(   FAIL 항목이 있으므로 overall=FAILoverallr{   Nr"   rk   s       r   test_e2e_overall_is_failz-TestEndToEndQCVerify.test_e2e_overall_is_fail   s    	6i F***r   c                 :    |\  }}d|j                  dd      v sJ y )Nr{   summary rt   rk   s       r   test_e2e_summary_contains_failz3TestEndToEndQCVerify.test_e2e_summary_contains_fail   s$    	6Ir2222r   c                 B    |\  }}|d   dk(  r|j                   dk(  sJ y y )Nr   r{      )rP   rf   s       r   test_e2e_exit_code_nonzeroz/TestEndToEndQCVerify.test_e2e_exit_code_nonzero   s/     f)&??a''' 'r   N)r   r   r    r!   rD   fixturerb   rh   rm   rw   r|   r~   r   r   r   r"   r   r   rX   rX      sN    ^V^^'"5 #5 Q/LLF
+
3(r   rX   )r!   r_   osrK   syspathlibr   rD   environru   rO   rN   pathinsertprompts.team_promptsteam_promptsr   r^   rM   r   r$   r4   rA   rX   r"   r   r   <module>r      s     	  
  "**..!13HIJ
z?#(("HHOOAs:' !j#??@j+GGH , ,8% %:% %:X X,;( ;(r   