
    Ai:                     ~   d Z ddlZddlmc m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                  Z ee      ej"                  vr"ej"                  j%                  d ee             ddlmZmZ dedededefd	Z G d
 d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)u  
test_file_check_enhanced.py - file_check 강화 및 duplicate_check 단위 테스트

테스트 항목:
1. file_check: task_id가 보고서에 포함 → PASS (기존 동작 유지)
2. file_check: task_id가 보고서에 미포함 → WARN
3. file_check: SCQA 섹션 모두 존재 → PASS
4. file_check: SCQA 섹션 누락 → WARN (FAIL 아님)
5. duplicate_check: 유사 보고서 없음 → PASS
6. duplicate_check: 유사 보고서 있음 (80%+) → WARN
7. duplicate_check: 보고서 없음 → SKIP
    N)Path)duplicate_check
file_checkreports_dirtask_idcontentreturnc                     t         j                  j                  | | d      }t        |dd      5 }|j	                  |       ddd       |S # 1 sw Y   |S xY w)uA   reports_dir에 {task_id}.md 파일을 생성하고 경로 반환.z.mdwzutf-8)encodingN)ospathjoinopenwrite)r   r   r   r   fs        C/home/jay/workspace/teams/dev1/qc/tests/test_file_check_enhanced.py_write_reportr   !   sP    77<<y_5D	dC'	* a	KKs   AAc                   &    e Zd ZdZdZd Zd Zd Zy)TestFileCheckTaskIdInReportu1   보고서 파일 내 task_id 포함 여부 검증uR   S: 상황 설명
C: 문제 발생
Q: 해결 방법은?
A: 다음과 같이 해결
c                    d}d| d| j                    }t        j                         5 }t        |||       t	        j
                  |g d|      }ddd       dj                  d         }d	}|j                  } |       }||v}	|	st        j                  d
|	fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}x}	x}}y# 1 sw Y   xY w)uI   task_id가 보고서에 포함 → warnings에 task_id 관련 WARN 없음task-792# u    완료 보고서
Tr   
file_paths	skip_done_reports_dirN
detailsztask_id not foundnot in)zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}details_str)py1py3py5py7assert %(py9)spy9)_SCQA_CONTENTtempfileTemporaryDirectoryr   r   verifyr   lower
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation)selfr   r   tmp_dirresultr"   @py_assert0@py_assert4@py_assert6@py_assert2@py_format8@py_format10s               r   test_task_id_present_no_warnz8TestFileCheckTaskIdInReport.test_task_id_present_no_warn3   s   wi243E3E2FG((* 	g'7G4&&$	F	 iiy 12"=+*;*;=*;*=="*====="*===="======+===+===*;===*========	 	s   'EEc                    d}d| j                   z   }t        j                         5 }t        |||       t	        j
                  |g d|      }ddd       d   }d}||k(  }|st        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }t        j                  d|       dz   d|iz  }	t        t        j                  |	            dx}x}}dj                  |d         }
g }d}|
j                  } |       }||v }|}|sd}||
v }|}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      ndt        j                  |      t        j                  |      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}x}x}}y# 1 sw Y   rxY w)u1   task_id가 보고서에 미포함 → WARN 반환r   u   # 다른 태스크 보고서
Tr   NstatusWARN==z%(py1)s == %(py4)sr#   py4u(   task_id 미포함 → WARN 기대, got: 
>assert %(py6)spy6r   r   r   in)zD%(py3)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.lower
}()
}r"   )r$   r%   r&   r(   z%(py11)spy11)z%(py14)s in %(py16)s)py14py16%(py18)spy18   assert %(py21)spy21)r)   r*   r+   r   r   r,   r.   r/   r0   _format_assertmsgr4   r5   r   r-   r1   r2   r3   append_format_boolop)r6   r   r   r7   r8   r9   @py_assert3r<   @py_format5@py_format7r"   @py_assert1r;   @py_assert8r:   @py_assert13@py_assert15r>   @py_format12@py_format17@py_format19@py_format20@py_format22s                          r   test_task_id_absent_warnz4TestFileCheckTaskIdInReport.test_task_id_absent_warnC   s   2T5G5GG((* 	g'7G4&&$	F	 h^6^6)^^^6^^^^^^6^^^-UV\U]+^^^^^^^^iiy 12LyLK--L-/Ly//L:L:3LLLLLy/LLLyLLLLLLKLLLKLLL-LLL/LLLLLLL:LLL:LLLLLLLLLLLLLLLLLLLLLLLL	 	s   'J==Kc                 b   d}d| j                   z   }t        j                         5 }t        |||       t	        j
                  |g d|      }ddd       dj                  d         }g }d}||v }|}	|sd}
|j                  } |       }|
|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  }|j                  |       |st        j                  d	fd
f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      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}
x}x}}y# 1 sw Y   xY w)u@   task_id 미포함 시 details에 task_id 관련 메시지 포함r   u   # 복사된 보고서입니다
Tr   Nr   r   r   rJ   z%(py3)s in %(py5)sr"   r$   r%   %(py7)sr&   zJ%(py10)s in %(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py12)s.lower
}()
}py10py12rM   rN   rO   rP   rQ   rR   rS   )r)   r*   r+   r   r   r,   r   r-   r.   r/   r0   r1   r2   r3   rU   rV   r4   r5   r6   r   r   r7   r8   r"   rZ   r<   r:   r9   @py_assert9r\   r]   @py_assert11@py_format6r=   r_   r`   ra   rb   s                       r   +test_task_id_absent_details_mention_task_idzGTestFileCheckTaskIdInReport.test_task_id_absent_details_mention_task_idS   sj   4t7I7II((* 	g'7G4&&$	F	 iiy 12LzLz[(LIL9J9JL9J9LLI9L,LLLLLz[LLLzLLLLLL[LLL[LLLLLLLI9LLLLILLLLLLLLLLLL9JLLL9LLLLLLLLLLLLLLL	 	s   'H$$H.N)__name__
__module____qualname____doc__r)   r?   rc   rp        r   r   r   .   s    ;uM> M Mrv   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestFileCheckSCQASectionsu#   보고서 SCQA 섹션 존재 검증c                 >   d}d| d}t        j                         5 }t        |||       t        j                  |g d|      }ddd       dj                  d         }g }d	}||v}|}	|s*d
}
|d   }|
|v}|}	|sd}|j                  } |       }||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  }|j                  |       |st        j                  dfd
f      t        j                  |
      t        j                  |      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t        j                        t        j                  |      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}
x}x}x}x}x}}y# 1 sw Y   PxY w)u5   SCQA 섹션 모두 존재 → SCQA 관련 WARN 없음r   r   up   
**S**: 현재 시스템 상황
**C**: 문제 발생
**Q**: 어떻게 해결?
**A**: 다음 방법으로 해결
Tr   Nr   r   SCQArB   rA   zscqa missingr    z%(py3)s not in %(py5)sr"   rf   rg   r&   )z%(py10)s not in %(py13)s)rj   py13z%(py15)spy15)zN%(py18)s not in %(py24)s
{%(py24)s = %(py22)s
{%(py22)s = %(py20)s.lower
}()
})rP   py20py22py24z%(py26)spy26rQ   zassert %(py29)spy29r*   r+   r   r   r,   r   r-   r.   r/   r0   r1   r2   r3   rU   rV   r4   r5   )r6   r   r   r7   r8   r"   rZ   r<   r:   r9   rm   @py_assert12rn   @py_assert17@py_assert21@py_assert23@py_assert19ro   r=   @py_format14@py_format16@py_format25@py_format27@py_format28@py_format30s                            r   &test_all_scqa_sections_present_no_warnz@TestFileCheckSCQASections.test_all_scqa_sections_present_no_warnk   s   	 2 2 	 ((* 	g'7G4&&$	F	 iiy 12wvwv[(wFw&:JwF:J,JwnwdoduduwdudwwndwNwwwwwv[wwwvwwwwww[www[wwwwwwwwF:JwwwFwww:Jwwwwwwwndwwwwnwwwwwwdowwwdowwwduwwwdwwwwwwwwwwwwwwww	 	s   'JJc                    d}d| d}t        j                         5 }t        |||       t        j                  |g d|      }ddd       d   }d}||k(  }|st        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }t        j                  d|       dz   d|iz  }	t        t        j                  |	            dx}x}}|d   }d}||k7  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d      dz   d|iz  }	t        t        j                  |	            dx}x}}y# 1 sw Y   :xY w)u)   SCQA 섹션 누락 → WARN (FAIL 아님)r   r   uW   
이것은 SCQA 포맷이 없는 보고서입니다.
구현 내용만 기술합니다.
Tr   NrA   rB   rC   rE   rF   u"   SCQA 누락 → WARN 기대, got: rH   rI   FAIL)!=)z%(py1)s != %(py4)su2   SCQA 누락은 FAIL이 아니라 WARN이어야 함)r*   r+   r   r   r,   r.   r/   r0   rT   r4   r5   
r6   r   r   r7   r8   r9   rW   r<   rX   rY   s
             r   (test_scqa_sections_missing_warn_not_failzBTestFileCheckSCQASections.test_scqa_sections_missing_warn_not_fail   s'   wiyz((* 	g'7G4&&$	F	 hX6X6)XXX6XXXXXX6XXX-OPVx+XXXXXXXXh_6_6)___6______6___+________	 	s   'E<<Fc                 P   d}d| d}t        j                         5 }t        |||       t        j                  |g d|      }ddd       dj                  d         }g }d	}||v }|}	|sd
}
|j                  } |       }|
|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  }|j                  |       |st        j                  dfd
f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      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}
x}x}}y# 1 sw Y   xY w)u7   SCQA 누락 시 details에 SCQA 관련 메시지 포함r   r   u#   
일반 보고서 내용입니다.
Tr   Nr   r   rz   scqarJ   re   r"   rf   rg   r&   rh   ri   rO   rP   rQ   rR   rS   r   rl   s                       r   &test_scqa_missing_details_mention_scqaz@TestFileCheckSCQASections.test_scqa_missing_details_mention_scqa   si   wiDE((* 	g'7G4&&$	F	 iiy 12EvEv$EE+2C2CE2C2EE2E(EEEEEvEEEvEEEEEEEEEEEEEEEE2EEEEEEEEEE+EEE+EEE2CEEE2EEEEEEEEEEEEEEE	 	   'HH%c                 P   d}d| d}t        j                         5 }t        |||       t        j                  |g d|      }ddd       dj                  d         }g }d	}||v}|}	|sd
}
|j                  } |       }|
|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  }|j                  |       |st        j                  dfd
f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      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}
x}x}}y# 1 sw Y   xY w)uB   Situation/Complication/Question/Answer 키워드도 SCQA로 인정r   r   uW   
## Situation
현재 상황
## Complication
문제
## Question
질문
## Answer
답변
Tr   Nr   r   rz   missingr    r{   r"   rf   rg   r&   )zN%(py10)s not in %(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py12)s.lower
}()
}ri   rO   rP   rQ   rR   rS   r   rl   s                       r   !test_scqa_with_full_word_keywordsz;TestFileCheckSCQASections.test_scqa_with_full_word_keywords   sr   	 " " 	 ((* 	g'7G4&&$	F	 iiy 12PvPv[(PIP[=N=NP=N=PPI=P,PPPPPv[PPPvPPPPPP[PPP[PPPPPPPI=PPPPIPPPPPP[PPP[PPP=NPPP=PPPPPPPPPPPPPPP	 	r   c                    d}d| d}t        j                         5 }t        |||       t        j                  |g d|      }ddd       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# 1 sw Y   xY w)u$   일부 SCQA 섹션만 있으면 WARNr   r   u   
S: 상황
C: 문제
Tr   NrA   rB   rC   rE   rF   assert %(py6)srI   )
r*   r+   r   r   r,   r.   r/   r0   r4   r5   r   s
             r   test_scqa_partial_missing_warnz8TestFileCheckSCQASections.test_scqa_partial_missing_warn   s    	   	 ((* 	g'7G4&&$	F	 h)6)6))))6))))))6)))))))	 	s   'CCN)	rq   rr   rs   rt   r   r   r   r   r   ru   rv   r   rx   rx   h   s"    -x*`FQ,*rv   rx   c                       e Zd ZdZd Zd Zy)TestDuplicateCheckNoSimilaru*   유사 보고서가 없을 때 PASS 반환c                    d}d| d}d}d}t        j                         5 }t        |||       t        |d|       t        |d|       t        j                  ||      }d	d	d	       d
   }d}||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
t        j                  d|       dz   d|
iz  }t        t        j                  |            d	x}x}	}y	# 1 sw Y   xY w)u0   완전히 다른 내용의 보고서들 → PASSr   r   u    완료 보고서
S: 새로운 검증 기능 구현 완료
C: 보고서 검증이 필요함
Q: 어떻게 자동화할까?
A: duplicate_check verifier를 추가하여 해결
u   # task-100 다른 보고서
전혀 다른 내용의 보고서입니다. API 설계 관련.
데이터베이스 스키마를 변경하였습니다.
u   # task-200 또 다른 보고서
완전히 새로운 주제의 보고서. UI 개선 관련.
사용자 경험을 향상시켰습니다.
task-100ztask-200r   NrA   PASSrC   rE   rF   u.   유사 보고서 없음 → PASS 기대, got: rH   rI   r*   r+   r   r   r,   r.   r/   r0   rT   r4   r5   )r6   r   current_contentother_content_1other_content_2r7   r8   r9   rW   r<   rX   rY   s               r   test_no_similar_reports_passz8TestDuplicateCheckNoSimilar.test_no_similar_reports_pass   s    	 C C 	G 	; 	
 ((* 	Kg'7O<':?':?$++G'JF		K
 hd6d6)ddd6dddddd6ddd-[\b[c+dddddddd	K 	Ks   ?DDc                 6   d}d| d}t        j                         5 }t        |||       t        j                  ||      }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   }	t        |	t              }
|
sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |
      dz  }t        t        j                  |            dx}	}
y# 1 sw Y   NxY w)u)   PASS 결과에 status, details 키 존재r   r      
내용
r   NrA   rJ   z%(py1)s in %(py3)sr8   r#   r$   zassert %(py5)sr%   r   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancelist)py0py2r$   r%   )r*   r+   r   r   r,   r.   r/   r0   r1   r2   r3   r4   r5   r   r   )r6   r   r   r7   r8   r9   r<   @py_format4ro   rZ   r:   s              r   "test_pass_result_has_required_keysz>TestDuplicateCheckNoSimilar.test_pass_result_has_required_keys   s   wiz*((* 	Kg'7G4$++G'JF	K !x6!!!!x6!!!x!!!!!!6!!!6!!!!!!!"yF""""yF"""y""""""F"""F""""""" +2z+T22222222z222z222+222222T222T2222222222	K 	Ks   %JJN)rq   rr   rs   rt   r   r   ru   rv   r   r   r      s    4e6	3rv   r   c                   "    e Zd ZdZd Zd Zd Zy) TestDuplicateCheckHighSimilarityu5   80% 이상 유사한 보고서 존재 시 WARN 반환c                    d}d}d| d|z   }d|z   }t        j                         5 }t        |||       t        |d|       t        j                  ||      }ddd       d	   }d
}||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
t        j                  d|       dz   d|
iz  }t        t        j                  |            dx}x}	}y# 1 sw Y   xY w)u#   거의 동일한 보고서 → WARNr   u   # 완료 보고서
S: 현재 시스템 상황 설명
C: 문제가 발생하여 해결이 필요함
Q: 어떻게 해결할까?
A: 다음 방법으로 해결하였음
구현 내용: 로직 수정 및 테스트 추가
결론: 정상 동작 확인
r   r   # task-old
task-oldr   NrA   rB   rC   rE   rF   u3   80%+ 유사 보고서 존재 → WARN 기대, got: rH   rI   r   )r6   r   base_contentr   similar_contentr7   r8   r9   rW   r<   rX   rY   s               r   test_high_similarity_warnz:TestDuplicateCheckHighSimilarity.test_high_similarity_warn   s    - 	 wir*\9(<7((* 	Kg'7O<':?$++G'JF	K hi6i6)iii6iiiiii6iii-`ag`h+iiiiiiii		K 	Ks   2C;;Dc                    d}d}d| d|z   }d|z   }t        j                         5 }t        |||       t        |d|       t        j                  ||      }ddd       d	   d
k(  rd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  }
t        j                  d|       dz   d|
iz  }t        t        j                  |            dx}}	yy# 1 sw Y   xY w)u.   WARN 시 details에 유사한 파일명 포함r   a  X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X r   r   r   r   r   NrA   rB   r   rJ   r   r"   r   u4   유사 파일명이 details에 포함되어야 함: z
>assert %(py5)sr%   )r*   r+   r   r   r,   r   r.   r/   r0   r1   r2   r3   rT   r4   r5   )r6   r   r   r   r   r7   r8   r"   r9   r<   r   ro   s               r   1test_high_similarity_details_mention_similar_filezRTestDuplicateCheckHighSimilarity.test_high_similarity_details_mention_similar_file  s   !wir*\9(<7((* 	Kg'7O<':?$++G'JF	K
 (v%))F9$56Kr:,rrr:rrr:rrrrrrrrrrrrr0depdq.rrrrrrr &	K 	Ks   2D==Ec                    d}d}d| d|z   }d|z   }t        j                         5 }t        |||       t        |d|       t        j                  ||      }ddd       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# 1 sw Y   xY w)u(   80% 이상이면 WARN, 미만이면 PASSr   uR  동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 동일한 내용 r   r   z# task-other
z
task-otherr   NrA   rB   rC   rE   rF   r   rI   
r*   r+   r   r   r,   r.   r/   r0   r4   r5   )r6   r   identical_contentr   other_contentr7   r8   r9   rW   r<   rX   rY   s               r   $test_similarity_threshold_exactly_80zETestDuplicateCheckHighSimilarity.test_similarity_threshold_exactly_80&  s    4wir*->>(+<<((* 	Kg'7O<'<?$++G'JF	K h)6)6))))6))))))6)))))))		K 	Ks   2C""C+N)rq   rr   rs   rt   r   r   r   ru   rv   r   r   r      s    ?j.s *rv   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestDuplicateCheckNoReportu-   현재 task_id의 보고서가 없으면 SKIPc                    t        j                         5 }t        |dd       t        j                  d|      }ddd       d   }d}||k(  }|st        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }t        j                  d|       dz   d|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)u(   현재 task_id 보고서 없음 → SKIPr   u   # task-100
내용
task-nonexistent-99999r   NrA   SKIPrC   rE   rF   u'   보고서 없음 → SKIP 기대, got: rH   rI   r   r6   r7   r8   r9   rW   r<   rX   rY   s           r    test_current_report_missing_skipz;TestDuplicateCheckNoReport.test_current_report_missing_skip=  s    ((* 	\g':/EF$++,DSZ[F	\ h]6]6)]]]6]]]]]]6]]]-TU[T\+]]]]]]]]		\ 	\s   %CC%c                    t        j                         5 }t        j                  d|      }ddd       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# 1 sw Y   xY w)u,   reports 디렉토리가 비어있으면 SKIPr   r   NrA   r   rC   rE   rF   r   rI   )	r*   r+   r   r,   r.   r/   r0   r4   r5   r   s           r   test_empty_reports_dir_skipz6TestDuplicateCheckNoReport.test_empty_reports_dir_skipE  s    ((* 	Ng$++JWMF	Nh)6)6))))6))))))6)))))))	N 	Ns   B66B?c                    d}d| d}t        j                         5 }t        |||       t        j                  ||      }dd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# 1 sw Y   xY w)uc   현재 보고서만 있고 비교 대상 없음 → PASS (비교 대상 없으므로 중복 없음)r   r   r   r   NrA   )r   r   rJ   )z%(py1)s in %(py4)srF   r   rI   r   r   s
             r   #test_no_other_reports_pass_not_skipz>TestDuplicateCheckNoReport.test_no_other_reports_pass_not_skipK  s    wiz*((* 	Kg'7G4$++G'JF	K h3#33#33333#3333333#33333333		K 	Ks   %C

Cc                 Z   t        j                         5 }t        j                  d|      }ddd       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}}|d   }t        |      }d}	||	kD  }
|
st	        j
                  d|
fd||	f      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      t	        j                  |	      dz  }dd|iz  }t        t	        j                  |            dx}x}x}
}	y# 1 sw Y   uxY w)u!   SKIP 시 details에 이유 포함r   r   NrA   r   rC   rE   rF   r   rI   r   r   )>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)slen)r   r   rG   r&   r'   r(   )r*   r+   r   r,   r.   r/   r0   r4   r5   r   r1   r2   r3   )r6   r7   r8   r9   rW   r<   rX   rY   rZ   r;   @py_assert5r=   r>   s                r    test_skip_details_mention_reasonz;TestDuplicateCheckNoReport.test_skip_details_mention_reasonU  s   ((* 	\g$++,DSZ[F	\h)6)6))))6))))))6))))))))$)s$%))%))))%))))))s)))s)))$)))%))))))))))	\ 	\s   F  F*c                 2   t        j                  dd      }|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)u-   reports 디렉토리 자체가 없으면 SKIPr   z /tmp/nonexistent_dir_vulcan_testr   rA   r   rC   rE   rF   r   rI   N)r   r,   r.   r/   r0   r4   r5   )r6   r8   r9   rW   r<   rX   rY   s          r   test_reports_dir_not_exist_skipz:TestDuplicateCheckNoReport.test_reports_dir_not_exist_skip\  sg     ''
Acdh)6)6))))6))))))6)))))))rv   N)	rq   rr   rs   rt   r   r   r   r   r   ru   rv   r   r   r   :  s    7^*4**rv   r   )rt   builtinsr1   _pytest.assertion.rewrite	assertionrewriter.   r   sysr*   pathlibr   pytest__file__parent_QC_DIRstrr   insert	verifiersr   r   r   r   rx   r   r   r   ru   rv   r   <module>r      s     	 
    x.


&
&w<sxxHHOOAs7|$ 1s S 3 3 2M 2Mt]* ]*J'3 '3^6* 6*|%* %*rv   