
    (<i                         d Z ddlZddlmZ ddlZej
                  j                  d e ee      j                  j                  j                               ddl
mZmZ  G d d      Z G d d      Z G d	 d
      Zy)u$   utils/clarify.py 테스트 스위트    N)Path)AmbiguityReportanalyze_ambiguityc                   (    e Zd ZdZd Zd Zd Zd Zy)TestAmbiguityReportu*   AmbiguityReport dataclass 구조 테스트c                     t        dddgdg      }|j                  dk(  sJ |j                  ddgk(  sJ |j                  dgk(  sJ y)u<   score, missing_dimensions, suggested_questions 필드 존재   WhatWhyu   무엇을 원하시나요?)scoremissing_dimensionssuggested_questionsN)r   r   r   r   selfreports     I/home/jay/workspace/.worktrees/task-2057-dev2/utils/tests/test_clarify.py"test_dataclass_has_required_fieldsz6TestAmbiguityReport.test_dataclass_has_required_fields   s`      &!= >

 ||q   ((VUO;;;)).J-KKKK    c                 ^    t        d      }t        |j                  t        t        f      sJ y)u   score는 숫자형   뭔가 해줘N)r   
isinstancer   intfloatr   s     r   test_score_type_is_int_or_floatz3TestAmbiguityReport.test_score_type_is_int_or_float   s$    "?3&,,e555r   c                 R    t        d      }t        |j                  t              sJ y)u   missing_dimensions는 리스트r   N)r   r   r   listr   s     r   test_missing_dimensions_is_listz3TestAmbiguityReport.test_missing_dimensions_is_list!   s"    "?3&33T:::r   c                 R    t        d      }t        |j                  t              sJ y)u    suggested_questions는 리스트r   N)r   r   r   r   r   s     r    test_suggested_questions_is_listz4TestAmbiguityReport.test_suggested_questions_is_list&   s"    "?3&44d;;;r   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r      s    4	L6
;
<r   r   c                   d    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d Zd Zy)TestAnalyzeAmbiguityu+   analyze_ambiguity() 핵심 동작 테스트c                 >    t        d      }t        |t              sJ y)u    반환 타입은 AmbiguityReportr   N)r   r   r   )r   results     r   test_returns_ambiguity_reportz2TestAnalyzeAmbiguity.test_returns_ambiguity_report/   s    "?3&/222r   c                 <    t        d      }|j                  dk\  sJ y)u%   빈 요청은 높은 모호성 점수    Nr   r   r   s     r   test_empty_request_high_scorez2TestAnalyzeAmbiguity.test_empty_request_high_score4   s    "2&||q   r   c                 N    t        d      }t        |j                        dk(  sJ y)u'   빈 요청은 모든 5W1H 차원 누락r+      N)r   lenr   r   s     r   )test_empty_request_all_dimensions_missingz>TestAnalyzeAmbiguity.test_empty_request_all_dimensions_missing9   s%    "2&6,,-222r   c                 <    t        d      }|j                  dk\  sJ y)u!   모호한 요청은 높은 점수u   뭔가 만들어줘r	   Nr-   r   s     r   test_vague_request_high_scorez2TestAnalyzeAmbiguity.test_vague_request_high_score>   s    "#89||q   r   c                 @    d}t        |      }|j                  dk  sJ y)u+   상세한 요청은 낮은 모호성 점수u   파이썬으로 CSV 파일을 읽어서 데이터를 분석하는 스크립트를 이번 주 금요일까지 작성해줘. 팀장님 보고용으로 평균과 합계를 계산하는 방식으로 구현해줘.r	   Nr-   )r   detailedr   s      r   test_detailed_request_low_scorez4TestAnalyzeAmbiguity.test_detailed_request_low_scoreC   s*    6 	
 #8,||ar   c                 \    dD ]'  }t        |      }d|j                  cxk  rdk  r$J  J  y)u   score는 0~10 범위)r+   r   u)   상세하고 구체적인 요청입니다r   
   Nr-   )r   reqr   s      r   test_score_range_0_to_10z-TestAnalyzeAmbiguity.test_score_range_0_to_10M   s8    U 	+C&s+F******	+r   c                 N    t        d      }t        |j                        dkD  sJ y)u+   모호한 요청에는 제안 질문 포함r   r   N)r   r1   r   r   s     r   1test_suggested_questions_not_empty_when_ambiguouszFTestAnalyzeAmbiguity.test_suggested_questions_not_empty_when_ambiguousS   s%    "?36--.222r   c                 :    t        d      }d|j                  v sJ y)uA   범위/대상(What) 정보 없으면 missing_dimensions에 포함u   언제까지 해줘r
   Nr   r   r   s     r   $test_what_dimension_detected_missingz9TestAnalyzeAmbiguity.test_what_dimension_detected_missingX   s!    "#8922222r   c                 :    t        d      }d|j                  vsJ y)u=   일정(When) 정보 있으면 missing_dimensions에 미포함u'   이번 주 금요일까지 완료해줘WhenNr?   r   s     r   $test_when_dimension_detected_presentz9TestAnalyzeAmbiguity.test_when_dimension_detected_present]   s!    "#LMV66666r   c                 :    t        d      }d|j                  vsJ y)u<   목적(Why) 정보 있으면 missing_dimensions에 미포함u1   성능 향상을 위해 코드를 최적화해줘r   Nr?   r   s     r   #test_why_dimension_detected_presentz8TestAnalyzeAmbiguity.test_why_dimension_detected_presentb   s!    "#VWF55555r   c                 :    t        d      }d|j                  vsJ y)u3   이해관계자(Who) 정보 있으면 누락 아님u-   개발팀이 사용할 도구를 만들어줘WhoNr?   r   s     r   #test_who_dimension_detected_presentz8TestAnalyzeAmbiguity.test_who_dimension_detected_presentg   s!    "#RSF55555r   c                 :    t        d      }d|j                  vsJ y)u*   방법(How) 정보 있으면 누락 아님u"   REST API 방식으로 구현해줘HowNr?   r   s     r   #test_how_dimension_detected_presentz8TestAnalyzeAmbiguity.test_how_dimension_detected_presentl   s!    "#GHF55555r   c                 t    t        d      }t        |j                        t        |j                        k\  sJ y)u;   missing_dimensions 각 항목에 대응하는 질문 생성r+   N)r   r1   r   r   r   s     r   1test_suggested_questions_cover_missing_dimensionszFTestAnalyzeAmbiguity.test_suggested_questions_cover_missing_dimensionsq   s0    "2&6--.#f6O6O2PPPPr   c                     t        d      }t        |j                        t        t        |j                              k(  sJ y)u#   missing_dimensions에 중복 없음r   N)r   r1   r   setr   s     r   $test_no_duplicate_missing_dimensionsz9TestAnalyzeAmbiguity.test_no_duplicate_missing_dimensionsw   s5    "?36,,-S9R9R5S1TTTTr   N)r    r!   r"   r#   r)   r.   r2   r4   r7   r;   r=   r@   rC   rE   rH   rK   rM   rP   r$   r   r   r&   r&   ,   sM    53
!
3
!
 +3
3
7
6
6
6
QUr   r&   c                   "    e Zd ZdZd Zd Zd Zy)TestDimensions5W1Hu-   5W1H 각 차원별 키워드 감지 테스트c                 :    t        d      }d|j                  vsJ y)uJ   What 키워드(구현, 작성, 분석 등)가 있으면 What 차원 충족u&   파이썬 스크립트를 작성해줘r
   Nr?   r   s     r   test_what_keywords_reduce_scorez2TestDimensions5W1H.test_what_keywords_reduce_score   s!    "#KLV66666r   c                 :    t        d      }d|j                  vsJ y)uH   Where 키워드(서버, DB, 파일 등)가 있으면 Where 차원 충족u"   데이터베이스에 저장해줘WhereNr?   r   s     r    test_where_keywords_reduce_scorez3TestDimensions5W1H.test_where_keywords_reduce_score   s!    "#GHf77777r   c                 b    d}t        |      }|j                  dk(  sJ |j                  g k(  sJ y)u%   6개 차원 모두 충족 시 score 0u   백엔드 개발팀이 사용할 REST API를 성능 향상을 위해 파이썬으로 구현해줘. 이번 달 말까지 서버에 배포 완료해야 해.r   N)r   r   r   )r   full_requestr   s      r   +test_all_dimensions_present_gives_low_scorez>TestDimensions5W1H.test_all_dimensions_present_gives_low_score   s?    F 	
 #<0||q   ((B...r   N)r    r!   r"   r#   rT   rW   rZ   r$   r   r   rR   rR   }   s    77
8
	/r   rR   )r#   syspathlibr   pytestpathinsertstr__file__parentutils.clarifyr   r   r   r&   rR   r$   r   r   <module>rd      sd    * 
   3tH~,,33::; < << <<NU NUb/ /r   