
    [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	Z	ddl
m
Z
mZ e	j                  j                  dej                  j                  ej                  j                  e      d             ddlZd Zd Zd Zd Zd	 Zd
 Zd Zd Zy)u/   P2-5: 모델 매핑 테이블 단위 테스트.    N)datetime	timedeltaz..c                     ddl m}  h d}| j                         D ch c]  }|j                  d      r| }}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      ndd	z  }d
d|iz  }t        t	        j                  |            d}yc c}w )u5   MODEL_MAP에 필수 역할이 존재하는지 확인.r   	MODEL_MAP>      팀장	   백엔드	   테스터   보안리뷰   프론트엔드UX/UIQCgit_==)z%(py0)s == %(py2)srequired_rolesactual_rolespy0py2zassert %(py4)spy4N)prompts.team_promptsr   keys
startswith
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r   r   kr   @py_assert1@py_format3@py_format5s          +/home/jay/workspace/tests/test_model_map.pytest_model_map_keysr)      s    .rN(~~/I!q||C7HAILI\))))>\))))))>)))>))))))\)))\))))))) Js
   D
D
c                  L   ddl m}  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
)u:   MODEL_MAP에 _updated 메타키가 존재하는지 확인.r   r   _updatedinz%(py1)s in %(py3)sr   py1py3assert %(py5)spy5Nz5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancestr)r   r   r1   r3   )r   r   r   r   r!   r   r   r    r"   r#   r4   r5   )r   @py_assert0@py_assert2@py_format4@py_format6r%   @py_assert4s          r(   test_model_map_has_updatedr;      s    .":"""":""":""""""""""""""""
+1:+S11111111:111:111+111111S111S1111111111    c                     ddl m}  | j                         D ]  \  }}|j                  d      r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)u>   각 역할에 default 모델이 정의되어 있는지 확인.r   r   r   defaultr,   r.   configr/   u   에 default 모델 없음z
>assert %(py5)sr3   N)r   r   itemsr   r   r   r!   r   r   r    _format_assertmsgr"   r#   )r   roler?   r6   r7   r8   r9   s          r(   test_model_map_default_modelsrC      s    .!) Gf??3FyF"FFFyFFFFyFFFFFFFFFFFFFFFtf,E$FFFFFFFGr<   c                     ddl m} m}  |       }| D ]  }|j                  d      r||v}|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }t	        j                  d	| d
      dz   d|iz  }t        t	        j                  |            d}||v }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  |      rt	        j                  |      nddz  }t	        j                  d| d      dz   d|iz  }t        t	        j                  |            d} y)uG   _build_model_guide() 출력에 모든 역할이 포함되는지 확인.r   r   _build_model_guider   not in)z%(py0)s not in %(py2)srB   guider   u
   메타키 u   이 출력에 노출됨z
>assert %(py4)sr   Nr,   )z%(py0)s in %(py2)su   역할 u   이 출력에 없음)r   r   rF   r   r   r   r   r   r    r!   rA   r"   r#   )r   rF   rI   rB   r%   r&   r'   s          r(   )test_build_model_guide_contains_all_rolesrJ   (   s#   B E G??3u$PPP4uPPPPPP4PPP4PPPPPPuPPPuPPPP
4&8O&PPPPPPP5=FFF45FFFFFF4FFF4FFFFFF5FFF5FFFFGD61E"FFFFFFF	Gr<   c                  h   ddl m}   |        }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}}y
)uM   메타키(_updated 등)가 출력 텍스트에 노출되지 않는지 확인.r   )rF   r+   rG   )z%(py1)s not in %(py3)srI   r/   r2   r3   N)
r   rF   r   r   r!   r   r   r    r"   r#   )rF   rI   r6   r7   r8   r9   s         r(   "test_build_model_guide_no_metakeysrL   4   sf    7 E":U"""":U""":""""""U"""U"""""""r<   c                 z   ddl m}m} |d   }t        j                         t        d      z
  j                  d      }||d<   | j                  t        j                        5   |        ddd       ||d<   d | j                  D        }t        |      }|sd	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   xY w)u9   staleness 7일 초과 시 경고 메시지 발생 확인.r   rE   r+      )days%Y-%m-%dNc              3   X   K   | ]"  }d |j                   v xr d|j                   v  $ yw)r      경과N)message).0records     r(   	<genexpr>z5test_staleness_warning_over_7_days.<locals>.<genexpr>I   s+     iPV{fnn,KV^^1KKis   (*z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)r   r   r   )r   r   rF   r   nowr   strftimeat_levelloggingWARNINGrecordsrW   r   r   r   r    r!   r"   r#   )caplogr   rF   originalold_dater%   @py_assert3r'   s           r(   "test_staleness_warning_over_7_daysrb   <   s    B$H!33==jIH$Ij		)  %IjiZ`ZhZhii3iiiiiiiii3iii3iiiiiiiiiiiiii s   "D11D:c                    ddl m}m} |d   }t        j                         j                  d      |d<   | j                  t        j                        5   |        ddd       ||d<   | j                  D cg c]"  }d|j                  v sd|j                  v s!|$ }}t        |      }d}||k(  }|st        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  }	dd|	iz  }
t%        t        j&                  |
            dx}x}}y# 1 sw Y   WxY wc c}w )u/   staleness 7일 이하 시 경고 없음 확인.r   rE   r+   rP   Nr   rR   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenmodel_map_warnings)r   r0   r1   py6zassert %(py8)spy8)r   r   rF   r   rX   rY   rZ   r[   r\   r]   rS   rd   r   r   r   r   r    r!   r"   r#   )r^   r   rF   r_   rre   r7   @py_assert5r:   @py_format7@py_format9s              r(   'test_staleness_no_warning_within_7_daysrl   L   s1   B$H$LLN33J?Ij		)  %Ij >>[AII%=(aiiBW  !"'a'"a''''"a''''''3'''3''''''!'''!'''"'''a''''''' 
s   F06F=
F=F=0F:c                     ddl m}   | d      }g }d}||v }|}|sd}||v }|}|sXt        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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}}y)uI   feature_flag OFF 시 기존 _build_cowork_section() 동작 유지 확인.r   )_build_cowork_sectionz	dev1-teamu   모델 선택 가이드u   모델 가이드r,   )z%(py3)s in %(py5)sresult)r1   r3   z%(py7)spy7)z%(py10)s in %(py12)s)py10py12z%(py14)spy14   zassert %(py17)spy17N)r   rn   r   r   r!   r   r   r    append_format_boolopr"   r#   )rn   ro   r%   r7   r:   r6   @py_assert9@py_assert11r9   @py_format8@py_format13@py_format15@py_format16@py_format18s                 r(   $test_feature_flag_off_keeps_existingr   ^   s    :";/FN$N$.N2DN2D2NNNNN$NNN$NNNNNNNNNNNNNNNN2DNNN2DNNNNNNNNNNNNNNNNNNNNNNNr<   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   r[   ossysr   r   pathinsertjoindirname__file__pytestr)   r;   rC   rJ   rL   rb   rl   r    r<   r(   <module>r      su    5    	 
 ( 277<< 94@ A *2G	G#j ($Or<   