
    Si                         d Z ddlZddlZddlmZ dZej                  j                  edd      Zde	de
fd	Zd
e	de	f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d Zd Zd Zd Zy)u   
test_finish_task_lv4_audit.py — finish-task.sh L369~L444 Lv.4 보안 감사 검증 테스트
작성자: 벨레스 (QA 테스터)
태스크: task-2089
    N)patchz/home/jay/workspacescriptszfinish-task.shtask_file_contentreturnc                     t        j                  d| t         j                        }|rL|j                  d      j	                         j                         }d|v sd|v st        j                  d|      ryy)u<   finish-task.sh L371-L388의 Lv.4 판정 Python 로직 재현u   ## 레벨\s*\n(.*?)(?=\n## |\Z)   criticalsecurityzlv\.?4|level\s*4TF)researchDOTALLgroupstriplower)r   msections      Q/home/jay/workspace/.worktrees/task-2117-dev1/tests/test_finish_task_lv4_audit.pyis_lv4r      s`    
		46GSA''!*""$**, J'$9RYYGZ\c=d    report_contentc                     t        t        j                  d|             }t        t        j                  d| t        j                              }|r|ry|ryy)uZ   finish-task.sh L405-L421의 로키 보안 감사 참여 기록 파싱 Python 로직 재현u   로키|Loki|lokiu0   보안 감사|security audit|레드팀|red.?teamPASSPARTIALMISSING)boolr   r   
IGNORECASE)r   has_lokihas_securitys      r   check_loki_securityr      sI    BII1>BCH		"UWegigtgtuvLL	r   c                  &    d} t        |       du sJ y)u'   ## 레벨 섹션에 'critical' → Trueu>   # task-2089

## 레벨
- critical

## 작업 목록
- 항목1
TNr   contents    r   test_is_lv4_criticalr$   -       UG'?d"""r   c                  &    d} t        |       du sJ y)u'   ## 레벨 섹션에 'security' → Trueu>   # task-2089

## 레벨
- security

## 작업 목록
- 항목1
TNr!   r"   s    r   test_is_lv4_securityr'   3   r%   r   c                  &    d} t        |       du sJ y)u#   ## 레벨 섹션에 'lv.4' → Trueu:   # task-2089

## 레벨
- lv.4

## 작업 목록
- 항목1
TNr!   r"   s    r   test_is_lv4_lv_dot_4r)   9   s    QG'?d"""r   c                  &    d} t        |       du sJ y)u"   ## 레벨 섹션에 'lv4' → Trueu7   # task-2089

## 레벨
lv4

## 작업 목록
- 항목1
TNr!   r"   s    r   test_is_lv4_lv4_no_dotr+   ?   s    NG'?d"""r   c                  &    d} t        |       du sJ y)u&   ## 레벨 섹션에 'level 4' → Trueu=   # task-2089

## 레벨
- level 4

## 작업 목록
- 항목1
TNr!   r"   s    r   test_is_lv4_level_4_with_spacer-   E   s    TG'?d"""r   c                  &    d} t        |       du sJ y)u&   ## 레벨 섹션에 'normal' → Falseu<   # task-2089

## 레벨
- normal

## 작업 목록
- 항목1
FNr!   r"   s    r    test_is_lv4_normal_returns_falser/   K   s    SG'?e###r   c                  &    d} t        |       du sJ y)u$   ## 레벨 섹션에 'lv.3' → Falseu:   # task-2089

## 레벨
- lv.3

## 작업 목록
- 항목1
FNr!   r"   s    r   test_is_lv4_lv3_returns_falser1   Q   s    QG'?e###r   c                  &    d} t        |       du sJ y)u!   ## 레벨 섹션 없음 → FalseuA   # task-2089

## 개요
내용 없음

## 작업 목록
- 항목1
FNr!   r"   s    r   *test_is_lv4_no_level_section_returns_falser3   W   s    XG'?e###r   c                  (    d} t        |       dk(  sJ y)u   로키 + 보안 감사 → PASSu1   로키가 보안 감사에 참여하였습니다.r   Nr   r"   s    r   7test_check_loki_security_korean_loki_and_security_auditr6   a   s    AGw'6111r   c                  (    d} t        |       dk(  sJ y)u   로키만 포함 → PARTIALu*   로키가 작업을 완료하였습니다.r   Nr5   r"   s    r   )test_check_loki_security_korean_loki_onlyr8   g   s    :Gw'9444r   c                  (    d} t        |       dk(  sJ y)u2   로키 및 보안 감사 모두 없음 → MISSINGu(   일반 작업 완료 보고서입니다.r   Nr5   r"   s    r    test_check_loki_security_missingr:   m   s    8Gw'9444r   c                  (    d} t        |       dk(  sJ y)u'   Loki + security audit (영문) → PASSz(Loki participated in the security audit.r   Nr5   r"   s    r   8test_check_loki_security_english_loki_and_security_auditr<   s   s    8Gw'6111r   c                  (    d} t        |       dk(  sJ y)u   로키 + 레드팀 → PASSu4   로키가 레드팀 활동에 참여하였습니다.r   Nr5   r"   s    r   0test_check_loki_security_korean_loki_and_redteamr>   y   s    DGw'6111r   c                  (    d} t        |       dk(  sJ y)u   loki + red team → PASSz"loki joined the red team exercise.r   Nr5   r"   s    r   4test_check_loki_security_lowercase_loki_and_red_teamr@      s    2Gw'6111r   c                      t         j                  j                  t        dd      } t	        dd      5 }t         j                  j                  |       }|j                  |        |du sJ 	 ddd       y# 1 sw Y   yxY w)ub   security-audit 파일 경로에 대해 os.path.isfile이 True를 반환하는지 mock으로 확인reportssecurity-audit.mdos.path.isfileTreturn_valueNospathjoinWORKSPACE_ROOTr   isfileassert_called_once_withaudit_file_pathmock_isfileresults      r   $test_security_audit_file_exists_mockrR      sg    ggll>9>QRO	d	3 {0++O<~~     7A44A=c                      t         j                  j                  t        dd      } t	        dd      5 }t         j                  j                  |       }|j                  |        |du sJ 	 ddd       y# 1 sw Y   yxY w)u`   security-audit 파일이 없을 때 os.path.isfile이 False를 반환하는지 mock으로 확인rB   rC   rD   FrE   NrG   rN   s      r   %test_security_audit_file_missing_mockrU      sg    ggll>9>QRO	e	4 0++O<  rS   )__doc__r   rH   unittest.mockr   rK   rI   rJ   FINISH_TASK_PATHstrr   r   r   r$   r'   r)   r+   r-   r/   r1   r3   r6   r8   r:   r<   r>   r@   rR   rU    r   r   <module>r[      s    
 	 &77<<	;KL c d 	 	 	 #####$$$255222r   