
    i                         d dl Z e j                  j                  d d       d dlmZ dZg dZdZdZd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy)    Nz /home/jay/workspace/teams/shared)scenario_generatoru   task-100.1: 인증 모듈 리팩터링
- setup_auth.py의 세션 생성 로직을 분리
- JWT 토큰 만료 처리 개선
- 빈 UID 입력 시 예외 처리 추가
)zauth/setup_auth.pyzapi/auth_router.pyztests/test_auth.pyu-  ```yaml
- id: SC-GEN-task-100-001
  category: smoke
  target: ["auth/setup_auth.py"]
  type: subprocess
  steps:
    - action: "python3 -c 'import auth.setup_auth'"
      expect_contains: ""
  priority: must
  automatable: false
  description: "auth 모듈 임포트 확인"

- id: SC-GEN-task-100-002
  category: edge-case
  target: ["auth/setup_auth.py"]
  type: pytest
  steps:
    - action: "pytest tests/test_auth.py::test_empty_uid -v"
      expect_contains: "passed"
  priority: should
  automatable: false
  description: "빈 UID 처리 확인"
```
u  - id: SC-GEN-task-200-001
  category: smoke
  target: ["api/auth_router.py"]
  type: curl
  steps:
    - action: "curl -s http://localhost:8000/auth/ping"
      expect_contains: "ok"
  priority: must
  automatable: false
  description: "auth router ping 확인"
c                      t        j                  t        t        ddd      } dt	        |       cxk  rdk  sn J dt	        |        d       y	)
u6   level=3 입력 시 15~30개 시나리오 생성 확인   insuwikitask-100task_contentchanged_fileslevelprojecttask_id      u4   level=3이면 15~30개 시나리오여야 하지만    개 생성됨Nr    generate_scenarios_from_templateSAMPLE_TASK_CONTENTSAMPLE_CHANGED_FILESlen	scenarioss    ^/home/jay/workspace/.worktrees/task-2116-dev1/teams/shared/qc/tests/test_scenario_generator.py$test_generate_scenarios_level3_countr   B   R    "CC(*I Y%2% 
>s9~>Nm\%    c                      t        j                  t        t        ddd      } dt	        |       cxk  rdk  sn J dt	        |        d       y	)
u6   level=4 입력 시 30~50개 시나리오 생성 확인   r   r   r   r   2   u4   level=4이면 30~50개 시나리오여야 하지만 r   Nr   r   s    r   $test_generate_scenarios_level4_countr   P   r   r   c                      t        j                  t        t        ddd      } t	        |       dkD  sJ d       | D ]A  }|j                  d      du rJ d	|j                  d
       d|j                  d       d        y)u7   모든 생성 시나리오에 automatable: false 확인r   r   r   r   r   /   시나리오가 1개 이상 생성되어야 함automatableF   시나리오 idu)   의 automatable이 False여야 하지만 u    값임Nr   r   r   r   r   get)r   scs     r   -test_generated_scenario_has_automatable_falser(   ^   s    "CC(*I y>APPP 
vvm$- 	
BFF4L>)RSUSYSYZgShRiipq	
-
r   c                      g d} t        j                  t        t        ddd      }t	        |      dkD  sJ d       |D ]+  }| D ]$  }||v rJ d|j                  d	d
       d| d        - y)ul   각 시나리오에 필수 필드(id, category, target, type, steps, description, automatable) 존재 확인)r$   categorytargettypestepsdescriptionr"   r   r   r   r   r   r!   r#   r$   ?u   에 필수 필드 'u   '가 없음Nr%   )required_fieldsr   r'   fields       r   &test_generated_scenario_yaml_structurer2   n   s    aO"CC(*I y>APPP $ 	EB; tS 122EeWKX;	r   c                  R    t        j                  ddd      } | dk(  s
J d|         y)uA   project='insuwiki', task_id='task-100.1' → 출력 경로 확인r   
task-100.1z/tmp/test_base)r   r   base_dirz;/tmp/test_base/scenarios/insuwiki/generated/task-100.1.yamlu#   출력 경로가 예상과 다름: N)r   get_output_path)paths    r   test_output_path_generationr8      s=    --!D
 PP 
-dV4Pr   c                  2   t        j                  t        t        ddd      } | D cg c]  }|j	                  d       }}t        |      t        t        |            k(  s-J d|D cg c]  }|j                  |      dkD  s| c}        yc c}w c c}w )	u=   생성된 시나리오들의 id가 모두 고유한지 확인r   r   r   r   r$   u   중복 ID 발견:    N)r   r   r   r   r&   r   setcount)r   r'   idsxs       r   test_duplicate_id_in_generatedr?      s    "CC(*I #,
,B266$<
,C
,s8s3s8}$ 
AA		!q0@aABC$ -As   B'BBc                      t        j                  t        t        d      } t	        | t
              sJ d       t        |       dkD  sJ d       d| v sJ d       t        D ]  }|| v rJ d| d	        y
)uW   빌드된 프롬프트에 변경 파일 목록과 task 내용이 포함되는지 확인r   )r	   r
   r   u&   프롬프트는 문자열이어야 함r   u*   프롬프트가 비어있지 않아야 함r4   u2   프롬프트에 task 내용이 포함되어야 함u   프롬프트에 변경 파일 'u   '이 포함되어야 함N)r   build_promptr   r   
isinstancestrr   )promptchanged_files     r   "test_build_prompt_includes_changesrF      s    ,,(*F
 fc"L$LL"v;?HHH? 6!W#WW! - 
v% 	
-l^;ST	
%
r   c                     t        j                  t              } t        | t              sJ d       t        |       dk(  sJ dt        |        d       | d   d   dk(  sJ | d   d   d	k(  sJ t        j                  t              }t        |t              sJ d       t        |      dk(  sJ d
t        |       d       |d   d   dk(  sJ t        j                  d      }t        |t              sJ d       t        |      dk(  sJ d       y)uO   LLM 응답(YAML 문자열)을 파싱하여 시나리오 리스트 반환 확인u    반환값은 리스트여야 함   u/   2개 시나리오가 파싱되어야 하지만 u   개 반환됨r   r$   zSC-GEN-task-100-001r:   zSC-GEN-task-100-002u/   1개 시나리오가 파싱되어야 하지만 zSC-GEN-task-200-001zthis is not yaml: [[[u/   파싱 실패 시 리스트를 반환해야 함u3   파싱 실패 시 빈 리스트를 반환해야 함N)r   parse_llm_responseSAMPLE_LLM_YAML_RESPONSErB   listr   SAMPLE_LLM_PLAIN_YAML_RESPONSE)r   scenarios_plaininvalids      r   "test_parse_llm_response_valid_yamlrO      s3    #556NOIi&J(JJ&y>Qo"QRUV_R`Qaan ooQ<!6666Q<!6666 );;<Z[Oot,P.PP,1${(WX[\kXlWmmz&{{$1d#'<<<< !334KLGgt$W&WW$w<1SSSr   )sysr7   insertqcr   r   r   rJ   rL   r   r   r(   r2   r8   r?   rF   rO    r   r   <module>rT      sg    
 5 6 !
   4" "
 $	
(Tr   