
    i!                        d Z ddlZddlmZ  ee      j                  j                  dz  Zej                  j                  de      Z
e
e
j                  J ej                  j                  e
      Ze
j                  j                  e       ej                  ZdZdeded	dfd
Zdeded	dfdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)u  
test_l1_smoketest_check.py — l1_smoketest_check.py의 verify 함수 단위 테스트.

10개 시나리오:
1. 보고서 파일 없음 → SKIP
2. 보고서에 L1 섹션 없음 → FAIL
3. BLOCK 패턴 매칭 → FAIL
4. 백엔드 작업 + 해당없음 3줄 → PASS (EXEMPT)
5. 프론트 작업 + 해당없음 3줄 → FAIL (EXEMPT 무효화)
6. 증거 누락 → FAIL
7. 정상 스크린샷 증거 → PASS
8. 정상 curl 증거 → PASS
9. 정상 pytest 증거 → PASS
10. BLOCK 패턴 "N/A.*L1" 매칭 → FAIL
    N)Pathzl1_smoketest_check.pyl1_smoketest_checkztask-test-9999tmp_pathcontentreturnc                 t    | dz  dz  }|j                  dd       |t         dz  j                  |d       y)	u;   tmp_path/memory/reports/{TASK_ID}.md 에 content를 기록.memoryreportsTparentsexist_ok.mdutf-8encodingNmkdirTASK_ID
write_text)r   r   
report_dirs      K/home/jay/workspace/teams/shared/verifiers/tests/test_l1_smoketest_check.py_write_reportr   !   sB    H$y0JTD1WIS/!--g-H    c                 t    | dz  dz  }|j                  dd       |t         dz  j                  |d       y)	u9   tmp_path/memory/tasks/{TASK_ID}.md 에 content를 기록.r	   tasksTr   r   r   r   Nr   )r   r   task_dirs      r   _write_taskr   (   s?    ("W,HNN4$N/7)3++Gg+Fr   c                 Z    t        t        t        |             }|d   dk(  sJ |d   sJ y)uA   보고서 파일 자체가 없으면 SKIP을 반환해야 한다.workspace_rootstatusSKIPdetailsN)verifyr   str)r   results     r    test_no_report_file_returns_skipr'   4   s3    GCM:F(v%%%)r   c                 h    d}t        | |       t        t        t        |             }|d   dk(  sJ y)ud   보고서 파일은 있으나 L1 스모크테스트 섹션이 없으면 FAIL을 반환해야 한다.uk   ## 작업 개요

이 작업은 간단한 리팩토링입니다.

## 변경 내역

- 일부 코드 정리
r   r!   FAILNr   r$   r   r%   r   r   r&   s      r   test_no_l1_section_returns_failr,   @   s8    G (G$GCM:F(v%%%r   c                     d}t        | |       t        t        t        |             }|d   dk(  sJ t	        d |d   D              sJ y)up   보고서에 'UI 직접 확인 불가' 패턴이 있으면 FAIL이며 details에 'BLOCK 패턴'이 포함된다.uo   ## L1 스모크테스트 결과

- UI 직접 확인 불가 (원격 환경 제약)
- 스크린샷: 해당없음
r   r!   r)   c              3   $   K   | ]  }d |v  
 ywu   BLOCK 패턴N .0ds     r   	<genexpr>z<test_block_pattern_ui_direct_returns_fail.<locals>.<genexpr>`        >q~">   r#   Nr   r$   r   r%   anyr+   s      r   )test_block_pattern_ui_direct_returns_failr9   U   sQ    G (G$GCM:F(v%%%>F9,=>>>>r   c                     t        | d       d}t        | |       t        t        t	        |             }|d   dk(  sJ y)uq   
    task 파일에 UI/프론트 키워드 없고 보고서에 해당없음 3줄 이상이면 PASS (면제).
    u9   배치 스크립트 로그 포맷 개선 작업입니다.u   ## 작업 개요

배치 스크립트 수정 작업입니다.

## L1 스모크테스트 결과

- 서버 재시작: 해당없음 (배치 스크립트, 서버 코드 아님)
- API 응답 확인: 해당없음
- 스크린샷: 해당없음
r   r!   PASSNr   r   r$   r   r%   r+   s      r   1test_backend_task_three_naexclusions_returns_passr=   h   sE     UV
G (G$GCM:F(v%%%r   c                     t        | d       d}t        | |       t        t        t	        |             }|d   dk(  sJ y)u   
    task 파일에 'UI 컴포넌트' 키워드가 있고 보고서에 해당없음 3줄 + 증거 없으면 FAIL.
    (프론트 작업이므로 면제 무효화)
    u@   UI 컴포넌트 수정 작업입니다. 버튼 스타일 변경.u   ## L1 스모크테스트 결과

- 버튼 렌더링: 해당없음
- 화면 전환: 해당없음
- 레이아웃 확인: 해당없음
r   r!   r)   Nr<   r+   s      r   2test_frontend_task_three_naexclusions_returns_failr?      sE    
 \]G (G$GCM:F(v%%%r   c                     d}t        | |       t        t        t        |             }|d   dk(  sJ t	        d |d   D              sJ y)ub   L1 섹션에 '성공' 키워드가 있어도 스크린샷/curl/테스트 증거가 없으면 FAIL.uR   ## L1 스모크테스트 결과

- 서버 재시작 성공
- 동작 확인 완료
r   r!   r)   c              3   $   K   | ]  }d |v  
 yw)u   증거 부족Nr0   r1   s     r   r4   z=test_keyword_without_evidence_returns_fail.<locals>.<genexpr>   s     ?!#?r6   r#   Nr7   r+   s      r   *test_keyword_without_evidence_returns_failrB      sQ    G (G$GCM:F(v%%%?VI->????r   c                 h    d}t        | |       t        t        t        |             }|d   dk(  sJ y)uN   L1 섹션에 '성공' 키워드 + 스크린샷 경로(.png)가 있으면 PASS.u`   ## L1 스모크테스트 결과

- 화면 동작 성공
- 스크린샷: /path/to/screenshot.png
r   r!   r;   Nr*   r+   s      r   %test_screenshot_evidence_returns_passrD      8    G (G$GCM:F(v%%%r   c                 h    d}t        | |       t        t        t        |             }|d   dk(  sJ y)uI   L1 섹션에 '확인' 키워드 + 'curl 200 OK' 증거가 있으면 PASS.uX   ## L1 스모크테스트 결과

- API 응답 확인 완료
- curl 200 OK 응답 수신
r   r!   r;   Nr*   r+   s      r   test_curl_evidence_returns_passrG      rE   r   c                 h    d}t        | |       t        t        t        |             }|d   dk(  sJ y)uN   L1 섹션에 '확인' 키워드 + 'pytest 33 passed' 증거가 있으면 PASS.u_   ## L1 스모크테스트 결과

- 테스트 실행 결과 확인
- pytest 33 passed, 0 failed
r   r!   r;   Nr*   r+   s      r   !test_pytest_evidence_returns_passrI      rE   r   c                     d}t        | |       t        t        t        |             }|d   dk(  sJ t	        d |d   D              sJ y)uh   보고서에 'N/A - L1 스킵' 패턴이 있으면 FAIL이며 details에 'BLOCK 패턴'이 포함된다.u   ## 작업 개요

간단한 설정 파일 수정입니다.

## L1 스모크테스트 결과

- N/A - L1 스킵 (설정 파일 변경만)
r   r!   r)   c              3   $   K   | ]  }d |v  
 ywr/   r0   r1   s     r   r4   z8test_block_pattern_na_l1_returns_fail.<locals>.<genexpr>   r5   r6   r#   Nr7   r+   s      r   %test_block_pattern_na_l1_returns_failrL      sQ    G (G$GCM:F(v%%%>F9,=>>>>r   )__doc__importlib.util	importlibpathlibr   __file__parent_MODULE_PATHutilspec_from_file_location_specloadermodule_from_spec_moduleexec_moduler$   r   r%   r   r   r'   r,   r9   r=   r?   rB   rD   rG   rI   rL   r0   r   r   <module>r[      s       H~$$++.EE../C\RU\\5 55
..
)
)%
0    !	
ID I3 I4 IG$ G G G&*?&&4&.@&
&$
&$
&$?r   