---
task_id: task-1974
type: context
scope: task
created: 2026-04-20
updated: 2026-04-20
status: in-progress
---

# 맥락 노트: task-1974

**task**: task-1974

---

## 결정 근거

### 3 Step Why

**1st Why**: "왜 E2E 테스트가 필요한가?"
→ 전수조사(task-1967+1)에서 테스트 부재가 구조적 문제로 확인됨. 주요 API 엔드포인트에 통합 테스트가 없어 회귀 버그 미탐지 위험.

**2nd Why**: "왜 mock/fixture 기반 통합 테스트가 최선인가?"
→ 외부 API(Supabase, Claude CLI) 실제 호출은 비용/환경 의존성 문제. mock으로 격리하면 CI에서 안정적 실행 가능.

**3rd Why**: "왜 이 접근이 다른 대안보다 나은가?"
→ 대안1(실제 외부 호출)은 비용/속도 문제, 대안2(단위 테스트만)는 엔드포인트 간 통합 검증 불가. FastAPI TestClient + mock이 비용/커버리지 최적 균형.

### 테스트 파일 구조 결정
- 신규 파일 `test_e2e_flows.py`에 E2E 테스트를 집중
- 기존 `test_main.py`와 중복 방지: test_main.py는 개별 엔드포인트 단위 테스트, test_e2e_flows.py는 플로우 통합 테스트

### mock 전략
- verify_jwt: dependency_overrides로 고정 payload 반환
- get_user_plan: 플랜별 시나리오에 맞게 패치
- anu_provider.generate: AnuAIResult mock 반환
- _get_supabase_client: MagicMock Supabase 클라이언트

## 참조 자료

- 전수조사 보고서: `memory/reports/task-1967+1.md`
- 기존 테스트: `/home/jay/projects/InsuRo/server/tests/test_main.py`
- API 엔드포인트: `/home/jay/projects/InsuRo/server/main.py`

## 주의사항

- premiumOnly 미완성 디자인 절대 건드리지 말 것
- 기존 테스트 127건 회귀 금지
- 외부 API 실제 호출 금지 — mock/fixture 사용
