
    -is                         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
Z
ddlmZ ddlZde
j                  fdZ ej                          defd       Z ej                          d        Z G d d	      Zy)
un  
test_dispatch_brainstorming_gate.py

dispatch._check_brainstorming_gate() 단위 테스트 (닌기르수 작성)

테스트 항목:
- UX 키워드 + Lv.3+ + brainstorming 파일 없음 → warning 로그
- skip_brainstorming 플래그로 스킵
- 비UX 키워드는 체크 안 함
- Lv.1(normal)은 체크 안 함
- brainstorming 파일이 있으면 warning 없음
    N)Pathreturnc                  n   t        t        j                  j                  dd            } t	        |       t
        j                  vr)t
        j                  j                  dt	        |              t        t
        j                  j                               D ]  }|dk(  s	t
        j                  |=  ddl}|S )u@   dispatch 모듈을 sys.modules에서 캐시 없이 로드한다.WORKSPACE_ROOTz/home/jay/workspacer   dispatchN)r   osenvirongetstrsyspathinsertlistmoduleskeysr   )	workspacemod_name	_dispatchs      =/home/jay/workspace/tests/test_dispatch_brainstorming_gate.py_get_dispatch_moduler      s    RZZ^^$46KLMI
9~SXX%3y>*))+, &z!H%& !    c                 6    | dz  }|j                  dd       |S )uA   테스트용 memory 디렉토리 (실제 파일 시스템 격리)memoryTparentsexist_ok)mkdir)tmp_pathds     r   
memory_dirr    /   s#     	8AGGD4G(Hr   c                 4    t               }t        |d|        |S )u<   _MEMORY_BASE_PATH가 memory_dir로 교체된 dispatch 모듈_MEMORY_BASE_PATH)r   setattr)r    mods     r   dispatch_modr%   7   s     
 CC$j1Jr   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestCheckBrainstormingGateu)   _check_brainstorming_gate() 동작 검증c                    |dz  }|j                  dd       |j                  t        j                  d      5  |j	                  ddd       d	d	d	       |j
                  D cg c]/  }|j                  t        j                  k\  rd
|j                  v r|1 }}t        |      }d}||k\  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nd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   vxY wc c}w )um   UX 키워드 + Lv.3 + brainstorming 파일 없음 → warning 로그 1개 이상 (brainstorming-gate 포함).meetingsTr   r   loggerz	task-9001   UX 개선 작업criticalNzbrainstorming-gate   )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)slenwarning_recordspy0py1py3py6uB   UX 키워드 + Lv.3 + 파일 없음인데 warning 로그가 없음
>assert %(py8)spy8)r   at_levelloggingDEBUG_check_brainstorming_gaterecordslevelnoWARNINGmessager0   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanation)selfr%   r    caplogmeetings_dirrr1   @py_assert2@py_assert5@py_assert4@py_format7@py_format9s               r   &test_ux_keyword_critical_no_file_warnszATestCheckBrainstormingGate.test_ux_keyword_critical_no_file_warnsH   sC    "J.4$7__W]]:_> 	`22;@RT^_	` ~~
yyGOO+0D		0Q 
 
 ?#nqn#q(nnn#qnnnnnnsnnnsnnnnnn?nnn?nnn#nnnqnnn*nnnnnnnn	` 	`
s   G$4GGc                 b   |j                  t        j                  d      5  |j                  dddd       ddd       |j                  D cg c]"  }|j
                  t        j                  k\  s!|$ }}t        |      }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nd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   ixY wc c}w )uH   skip_brainstorming=True이면 warning 로그 없이 즉시 반환한다.r   r*   z	task-9002r,   r-   T)skip_brainstormingNr   ==z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr0   r1   r2   u@   --skip-brainstorming 플래그인데 warning 로그가 발생함r7   r8   r9   r:   r;   r<   r=   r>   r?   r0   rA   rB   rC   rD   rE   rF   rG   rH   rI   
rJ   r%   rK   rM   r1   rN   rO   rP   rQ   rR   s
             r   'test_skip_brainstorming_flag_no_warningzBTestCheckBrainstormingGate.test_skip_brainstorming_flag_no_warningX   s   __W]]:_> 	22/PT 3 	
 '-nnU		W__8T1UU?#lql#q(lll#qllllllslllsllllll?lll?lll#lllqlll*llllllll	 	
 Vs   F"F,1F,F)c                 ^   |j                  t        j                  d      5  |j                  ddd       ddd       |j                  D cg c]"  }|j
                  t        j                  k\  s!|$ }}t        |      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  t              rt        j                  t              nd
dt        j                         v st        j                  |      rt        j                  |      nd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   ixY wc c}w )uW   비UX 키워드 + Lv.3 → brainstorming 체크를 하지 않아 warning 로그 없음.r   r*   z	task-9003u   CI 파이프라인 수정r-   Nr   rV   rX   r0   r1   r2   u1   비UX 키워드인데 warning 로그가 발생함r7   r8   rY   rZ   s
             r   'test_non_ux_keyword_critical_no_warningzBTestCheckBrainstormingGate.test_non_ux_keyword_critical_no_warningc   s   __W]]:_> 	i22;@[]gh	i '-nnU		W__8T1UU?#]q]#q(]]]#q]]]]]]s]]]s]]]]]]?]]]?]]]#]]]q]]]*]]]]]]]]		i 	i V   F"F*/F*F'c                 ^   |j                  t        j                  d      5  |j                  ddd       ddd       |j                  D cg c]"  }|j
                  t        j                  k\  s!|$ }}t        |      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  t              rt        j                  t              nd
dt        j                         v st        j                  |      rt        j                  |      nd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   ixY wc c}w )uY   level='normal'(Lv.2)이면 Lv.3 미만이므로 brainstorming 체크를 하지 않는다.r   r*   z	task-9004u   UI 버그 수정normalNr   rV   rX   r0   r1   r2   u4   normal level(Lv.2)인데 warning 로그가 발생함r7   r8   rY   rZ   s
             r   test_normal_level_no_warningz7TestCheckBrainstormingGate.test_normal_level_no_warningl   s   __W]]:_> 	^22;@RT\]	^ '-nnU		W__8T1UU?#`q`#q(```#q``````s```s``````?```?```#```q```*````````		^ 	^ Vr^   c                    |dz  }|j                  dd       |dz  }|j                  dd       |j                  t        j                  d	      5  |j                  d
dd       ddd       |j                  D cg c]"  }|j                  t        j                  k\  s!|$ }}t        |      }d}	||	k(  }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }t        j                   d      dz   d|iz  }t#        t        j$                  |            dx}x}
}	|j                  D cg c]"  }|j                  t        j&                  k(  s!|$ }}d |D        }t)        |      }|st        j                   d      dz   dt        j                         v st        j                  t(              rt        j                  t(              ndt        j                  |      t        j                  |      dz  }t#        t        j$                  |            dx}}y# 1 sw Y   exY wc c}w c c}w )u^   brainstorming 파일이 존재하면 warning 없음, info 로그에 '파일 확인됨' 포함.r)   Tr   zbrainstorming-task-9005.mdu>   # 브레인스토밍 결과
- 아이디어 1
- 아이디어 2
zutf-8)encodingr   r*   z	task-9005u   화면 레이아웃 변경r-   Nr   rV   rX   r0   r1   r2   u=   brainstorming 파일이 있는데 warning 로그가 발생함r7   r8   c              3   8   K   | ]  }d |j                   v   yw)u   brainstorming 파일 확인됨N)r@   ).0rM   s     r   	<genexpr>z]TestCheckBrainstormingGate.test_ux_keyword_critical_file_exists_no_warning.<locals>.<genexpr>   s     WQ3qyy@Ws   uU   brainstorming 파일 존재 시 info 로그에 '파일 확인됨' 메시지가 없음z.
>assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)r3   py2py4)r   
write_textr9   r:   r;   r<   r=   r>   r?   r0   rA   rB   rC   rD   rE   rF   rG   rH   rI   INFOrg   )rJ   r%   r    rK   rL   brainstorming_filerM   r1   rN   rO   rP   rQ   rR   info_records@py_assert1@py_assert3@py_format5s                    r   /test_ux_keyword_critical_file_exists_no_warningzJTestCheckBrainstormingGate.test_ux_keyword_critical_file_exists_no_warningu   s8   !J.4$7),HH%%&it{%|__W]]:_> 	j22;@\^hi	j '-nnU		W__8T1UU?#iqi#q(iii#qiiiiiisiiisiiiiii?iii?iii#iiiqiii*iiiiiiii#)>>OaQYY',,5NOOW,W 	dsWW 	dW 	dRcRcc	d 	d]c]c	d 	dKcKc  	d 	dZcZc  	d 	dZcZc X 	d 	dZcZc X 	d 	d 	dPcPc	d 	d	j 	j V Ps$   K	<"KK"K=K	KN)	__name__
__module____qualname____doc__rS   r[   r]   ra   rq    r   r   r'   r'   D   s#    3o m^adr   r'   )ru   builtinsrC   _pytest.assertion.rewrite	assertionrewriterA   r:   r   r   typespathlibr   pytest
ModuleTyper   fixturer    r%   r'   rv   r   r   <module>r      s      	 
   e.. ( D    @d @dr   