From workflow-bundle
Use when: (1) "테스트 시나리오 작성해줘", (2) "테스트 계획 만들어줘", (3) "test plan 만들어줘", (4) creating test plan for new features, (5) before writing test code.
npx claudepluginhub onejaejae/skillsThis skill uses the workspace's default tool permissions.
Analyze implementation code and generate comprehensive test scenarios grouped by architectural layer.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Analyze implementation code and generate comprehensive test scenarios grouped by architectural layer.
이 스킬은 특정 feature 단위로 테스트 시나리오를 생성합니다.
사용자가 제공하는 정보:
research_favorite)src/services/research_favorite_service.py)제공된 feature를 기반으로 관련 파일만 분석:
src/controllers/{feature}.py
src/services/{feature}_service.py
src/repositories/{feature}_repository.py
tests/CLAUDE.md각 파일 분석 시 확인할 항목:
3개 이상 동일 패턴의 메서드가 있으면 @pytest.mark.parametrize로 통합:
#### Parametrized Scenario Group: get_{type}_metadata
- **Pattern**: 동일한 시그니처의 메타데이터 조회 메서드
- **Methods**: get_condition_metadata, get_medication_metadata, ...
- **Parametrize Keys**: (service_method, repo_method, response_class, pk_field, ...)
- **Cases**:
- success: 정상 조회 (parametrize across all methods)
- empty_codes: 코드 없을 때 빈 결과 (parametrize across all methods)
- not_found: 리서치 미존재 (parametrize across all methods)
- **개별 테스트 필요**: 대표 메서드 1개로 상세 로직 테스트 (예: condition_metadata)
적용 기준: tests/CLAUDE.md의 Parametrize 패턴 섹션 참조
PATCH 엔드포인트는 반드시 3가지 시나리오 포함:
None으로 전달되는지 검증공유 테스트 데이터가 많으면 클래스 상수로 정의:
#### Shared Test Data
- `CONDITION_CODES`: [{"name": "Type2 Diabetes", "codes": ["E11"]}]
- `MEDICATION_CODES`: [{"name": "Metformin", "codes": ["A10BA02"]}]
시나리오에 Factory 사용 방법을 명시:
Factory.build_response() (Pydantic Response 스키마)Factory.build() (SQLAlchemy Model) - model_validate가 실제 속성 접근 필요Factory.create() (실제 DB 저장)# Test Plan: {Feature Name}
## Summary
- Total scenarios: {count}
- Controller: {count} scenarios ({count} parametrized groups)
- Service: {count} scenarios ({count} parametrized groups)
- Repository: {count} scenarios
---
## Layer: Controller
### File: tests/controllers/test_{feature}_controller.py
#### Class: Test{Feature}Controller
#### Shared Test Data (class constants)
- `TEST_API_PREFIX`: "/api/{resources}"
- (필요한 경우 추가 상수)
#### Scenario 1: {method}_success
- **Method**: `{HTTP_METHOD} /api/{path}`
- **Description**: {테스트 목적 - 한글로}
- **Mock setup**: `mock_{service}.{method}.return_value = Factory.build_response(...)`
- **Test Steps**:
1. Arrange: {Mock 설정}
2. Act: {API 호출}
3. Assert: {응답 검증 - assert_success_response 사용}
- **Expected**: HTTP {status_code}
#### Parametrized Group: {group_name}
- **Methods**: {method1}, {method2}, ...
- **Parametrize Keys**: ({key1}, {key2}, ...)
- **Success case**: {설명}
- **Error case**: {설명}
---
## Layer: Service
### File: tests/services/test_{feature}_service.py
#### Scenario 1: {method}_success
- **Method**: `{method_name}`
- **Description**: {테스트 목적 - 한글로}
- **Dependencies to mock**: {mocking 대상}
- **Mock return type**: Factory.build() (실제 Model 인스턴스 - model_validate 필요)
- **Test Steps**:
1. Arrange: {Mock 설정}
2. Act: {메서드 호출}
3. Assert: {결과 및 호출 검증}
- **Expected**: {expected return value}
---
## Layer: Repository
### File: tests/repositories/test_{feature}_repository.py
#### Scenario 1: {method}_success
- **Method**: `{method_name}`
- **Description**: {테스트 목적 - 한글로}
- **Database setup**: Factory.create() 사용
- **Test Steps**:
1. Arrange: {테스트 데이터 생성}
2. Act: {메서드 호출}
3. Assert: {DB 상태 검증}
- **Expected**: {expected DB state/return}
assert_called_once_with 포함