
    i                         d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlZ e
e      j                  j                  Zej                  j!                  d ee             ddlmZ  G d d      Zy)u  
test_dispatch_phase_warn.py

dispatch._warn_phase_without_task_id() 단위 테스트 (헤임달 작성, task-1894)

테스트 항목:
1. Phase 패턴 + 자동 생성 ID → WARNING 로그 출력됨
2. Phase 패턴 + 수동 지정 ID → 경고 미출력
3. Phase 패턴 없는 일반 task → 경고 미출력
4. 다양한 Phase 패턴 매칭 (Phase 1, phase 2, Phase 1.1, Phase 2.3)
5. Phase가 없는 유사 텍스트 → 미감지 (Phases, phased)
    N)Path)_warn_phase_without_task_idc                   X    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d Zy)TestWarnPhaseWithoutTaskIdu+   _warn_phase_without_task_id() 동작 검증c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uh   Phase 패턴이 감지되고 task_id가 자동 생성 ID와 동일하면 WARNING 로그가 출력된다.auto-20240101-abcddispatchloggeru:   Phase 1 작업입니다. 기능 구현을 완료하세요.	task_desctask_idgenerated_idN   Phase 작업 감지inz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.text
}caplogpy1py3py5assert %(py7)spy7at_levelloggingWARNINGr   text
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationselfr   auto_id@py_assert0@py_assert4@py_assert2@py_format6@py_format8s           5/home/jay/workspace/tests/test_dispatch_phase_warn.py6test_phase_pattern_with_auto_generated_id_logs_warningzQTestWarnPhaseWithoutTaskId.test_phase_pattern_with_auto_generated_id_logs_warning&   s    &__W__Z_@ 	'V$	 %33$3333$333$3333333333333333333	 	   DDc                    |j                  t        j                  d      5  t        ddd       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)us   Phase 패턴이 있어도 task_id가 수동 지정(generated_id와 다름)이면 WARNING이 출력되지 않는다.r	   r
   u"   Phase 2 작업을 시작합니다.z	task-1894r   r   Nr   not inz0%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.text
}r   r   r   r   r   r)   r   r+   r,   r-   r.   r/   s          r0   1test_phase_pattern_with_manual_task_id_no_warningzLTestWarnPhaseWithoutTaskId.test_phase_pattern_with_manual_task_id_no_warning2   s    __W__Z_@ 	'>#1	 %7FKK7$K7777$K777$777777F777F777K7777777	 	   DD
c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uW   Phase 패턴이 없는 일반 작업 설명에서는 WARNING이 출력되지 않는다.r   r	   r
   uJ   일반 버그 수정 작업입니다. 로그인 오류를 고쳐주세요.r   Nr   r4   r6   r   r   r   r   r   r(   s           r0    test_no_phase_pattern_no_warningz;TestWarnPhaseWithoutTaskId.test_no_phase_pattern_no_warning=   s    &__W__Z_@ 	'f$	 %7FKK7$K7777$K777$777777F777F777K7777777	 	r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)u!   'Phase 1' 패턴이 감지된다.zauto-gen-001r	   r
   u"   Phase 1을 완료해야 합니다.r   Nr   r   r   r   r   r   r   r   r(   s           r0   $test_phase_pattern_uppercase_integerz?TestWarnPhaseWithoutTaskId.test_phase_pattern_uppercase_integerI        __W__Z_@ 	'>$	 %33$3333$333$3333333333333333333	 	r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)u+   'phase 2' 소문자 패턴이 감지된다.zauto-gen-002r	   r
   u"   phase 2 구현을 시작합니다.r   Nr   r   r   r   r   r   r   r   r(   s           r0   $test_phase_pattern_lowercase_integerz?TestWarnPhaseWithoutTaskId.test_phase_pattern_lowercase_integerU   r>   r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)u-   'Phase 1.1' 소수점 패턴이 감지된다.zauto-gen-003r	   r
   u.   Phase 1.1 디자인 리뷰를 진행합니다.r   Nr   r   r   r   r   r   r   r   r(   s           r0   test_phase_pattern_decimal_1_1z9TestWarnPhaseWithoutTaskId.test_phase_pattern_decimal_1_1a   s     __W__Z_@ 	'J$	 %33$3333$333$3333333333333333333	 	r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)u-   'Phase 2.3' 소수점 패턴이 감지된다.zauto-gen-004r	   r
   u?   이번 스프린트는 Phase 2.3 완료를 목표로 합니다.r   Nr   r   r   r   r   r   r   r   r(   s           r0   test_phase_pattern_decimal_2_3z9TestWarnPhaseWithoutTaskId.test_phase_pattern_decimal_2_3m   s     __W__Z_@ 	'[$	 %33$3333$333$3333333333333333333	 	r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uA   'Phases'(복수형)는 Phase 패턴으로 감지되지 않는다.zauto-gen-005r	   r
   z.Phases of the project are defined in the docs.r   Nr   r4   r6   r   r   r   r   r   r(   s           r0   test_phases_plural_not_detectedz:TestWarnPhaseWithoutTaskId.test_phases_plural_not_detectedy   s     __W__Z_@ 	'J$	 %7FKK7$K7777$K777$777777F777F777K7777777	 	r2   c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uA   'phased'(파생어)는 Phase 패턴으로 감지되지 않는다.zauto-gen-006r	   r
   z2This is a phased rollout plan for the new feature.r   Nr   r4   r6   r   r   r   r   r   r(   s           r0   test_phased_word_not_detectedz8TestWarnPhaseWithoutTaskId.test_phased_word_not_detected   s     __W__Z_@ 	'N$	 %7FKK7$K7777$K777$777777F777F777K7777777	 	r2   c                 n   d}t        d||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}}y)uM   함수는 경고만 출력하고 None을 반환한다 (작업 차단 없음).zauto-gen-007u)   Phase 3 배포 작업을 진행합니다.r   N)is)z%(py0)s is %(py3)sresult)py0r   zassert %(py5)sr   )	r   r    r!   r#   r$   r%   r"   r&   r'   )r)   r*   rK   r-   @py_assert1@py_format4r.   s          r0   )test_function_does_not_block_returns_nonezDTestWarnPhaseWithoutTaskId.test_function_does_not_block_returns_none   st     ,A 

 v~vvv    c                    d}|j                  t        j                  d      5  t        d||       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uK   task_id와 generated_id가 정확히 같을 때만 WARNING이 발생한다.auto-xyz-9999r	   r
   &   Phase 4 최종 검수 단계입니다.r   Nr   r   r   r   r   r   r   r   )r)   r   same_idr+   r,   r-   r.   r/   s           r0   ;test_task_id_exactly_equal_to_generated_id_triggers_warningzVTestWarnPhaseWithoutTaskId.test_task_id_exactly_equal_to_generated_id_triggers_warning   s    !__W__Z_@ 	'B$	 %33$3333$333$3333333333333333333	 	r2   c                    |j                  t        j                  d      5  t        ddd       dd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                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w)uK   task_id와 generated_id가 다를 때는 WARNING이 발생하지 않는다.r	   r
   rS   z	task-1000rR   r   Nr   r4   r6   r   r   r   r   r   r7   s          r0   1test_task_id_differs_from_generated_id_no_warningzLTestWarnPhaseWithoutTaskId.test_task_id_differs_from_generated_id_no_warning   s    __W__Z_@ 	'B#,	 %7FKK7$K7777$K777$777777F777F777K7777777	 	r9   N)__name__
__module____qualname____doc__r1   r8   r;   r=   r@   rB   rD   rF   rH   rO   rU   rW    rP   r0   r   r   "   sA    5	48	8	4	4	4	4	8	8	48rP   r   )r[   builtinsr#   _pytest.assertion.rewrite	assertionrewriter    r   syspathlibr   pytest__file__parent
_WORKSPACEpathinsertstrr	   r   r   r\   rP   r0   <module>rj      sX      
   (^""))
 3z? # 0M8 M8rP   