# tdc114plus 테스트 정책

작성일: 2026-07-02
최종 개정일: 2026-07-09
상태: v2.1

목적: `tdc114plus` Flutter 앱의 mock 기반 개발, Swagger 계약 검증, 실제 API 연동 검증 기준을 단계별로 정의한다.

상위 기준 문서:

- `docs/00_policy_tdc114plus_decoupled_api_migration_2026-07-07.md`
- `docs/00_policy_tdc114plus_development_2026-07-02.md`
- `docs/00_contract_tdc114plus_api_2026-07-02.md`

## 1. 적용 범위

본 정책은 아래 영역에 적용한다.

- Flutter 앱 화면, 라우팅, 상태관리
- API client, repository, provider
- API 계약 기반 model, DTO, JSON 변환
- Baron SSO Hosted Login + PKCE 시작/callback/token 교환 흐름
- 직원검색, 조직도, 직원 상세
- 즐겨찾기 로컬 저장
- 전화걸기, 문자보내기 등 플랫폼 액션

## 2. 기본 검증 게이트

Flutter 앱 코드를 변경한 모든 작업은 아래 검증을 통과해야 한다.

```bash
./scripts/flutter-docker.sh analyze
./scripts/flutter-docker.sh test
```

필요 시 formatter를 적용한다.

```bash
./scripts/format-dart.sh
```

검증 실패 상태의 코드는 `main` 브랜치에 반영하지 않는다.

## 3. 테스트 레이어

### 3.1 Mock 레이어

목적:

- 백엔드 미구현 상태에서도 화면과 상태 흐름을 개발 가능하게 유지한다.

대상:

- widget test
- fake/mock repository
- local mock data

핵심 검증:

- 로그인 화면 표시
- Baron SSO 로그인 시작 버튼 렌더링
- 앱 내부에서 휴대폰번호를 직접 입력받지 않는지 확인
- callback token 교환 완료 후 첫 화면 진입
- 직원검색, 조직 탐색, 즐겨찾기, 상세 화면 흐름

### 3.2 계약 레이어

목적:

- Swagger 기준 request/response DTO와 앱 모델 간 불일치를 조기에 찾는다.

대상:

- `fromJson`, `toJson`
- API error parsing
- request body 생성
- polling 상태값 파싱

핵심 검증:

- OIDC authorization URL query 생성
- PKCE `state`, `nonce`, `code_verifier` 저장/검증
- token endpoint 응답 DTO
- 세션 저장 모델
- directory/organization DTO
- 400/401/403/429/timeout 처리

### 3.3 실제 API 레이어

목적:

- mock 구조가 실제 API와 동일한 사용자 흐름을 유지하는지 확인한다.

대상:

- smoke test
- integration test
- staging 또는 동등 환경 점검

핵심 검증:

- Hosted Login authorization endpoint 진입
- App Link callback 수신
- PKCE token 교환 후 세션 저장
- 로그인 후 직원검색 첫 화면 진입
- directory/organization 실제 응답 정합성

## 4. 우선 테스트 대상

강한 단위 테스트가 필요한 영역:

- API model `fromJson`, `toJson`
- API error parsing
- authorization URL 생성 규칙
- 로그인 상태 전이
- `state`, `nonce`, `code_verifier` 처리
- 세션 저장/삭제/복원
- 직원검색 query/filter 생성
- 가족사/조직 필터 상태
- 즐겨찾기 추가/삭제/조회
- API 실패, 401, 403, 429, timeout 처리

화면 테스트가 필요한 영역:

- 앱 실행 후 로그인 화면 표시
- 앱 내부 전화번호 입력창 미노출
- callback 처리 완료 후 직원검색 진입
- 직원 검색어 입력과 결과 표시
- 가족사 필터 선택/해제
- 조직도 탐색
- 직원 상세 표시
- 전화걸기/문자보내기 액션 노출
- 즐겨찾기 토글

## 5. 단계별 테스트 전략

### 5.1 Phase A: Mock 우선 개발

목표:

- API 없이도 앱의 핵심 화면 흐름을 검증한다.

완료 기준:

- `flutter analyze` 통과
- `flutter test` 통과
- mock repository 기반 주요 widget test 존재

### 5.2 Phase B: 계약 정합성 검증

목표:

- Swagger 기준 DTO와 앱 모델의 구조를 맞춘다.

완료 기준:

- DTO 파싱/직렬화 테스트 통과
- 에러 응답 테스트 통과
- 로그인 흐름 상태값 테스트 통과

### 5.3 Phase C: 실제 API 연동

목표:

- Hosted Login + PKCE 흐름이 실제 Baron SSO RP 설정과 맞물리는지 확인한다.

실행 원칙:

- 실제 API smoke는 환경 준비 확인 후 실행한다.
- local, staging, 기타 검증 환경 중 어떤 환경을 쓰더라도 동일한 계약 기준을 적용한다.
- 실제 검증은 `authorization URL 열기 -> Baron SSO Hosted Login에서 인증 -> App Link callback -> state 검증 -> token 교환 -> 세션 저장 -> 첫 화면 진입` 흐름 완료를 기준으로 본다.
- `phone-login`, `link/poll`은 개발용 fallback 또는 Baron SSO 내부 구현 참고일 뿐, 신규 앱 기본 로그인 검증 완료로 간주하지 않는다.

완료 기준:

- authorization URL query 확인
- callback 수신과 state 검증 확인
- token 교환 후 세션 저장 확인
- 로그인 후 첫 화면 진입 확인
- directory/organization 응답 필드 정합성 확인

## 6. 수동 검증 원칙

- Android target 검증은 mock 검증과 별도로 본다.
- 로그인 완료 가정 세션 주입 경로는 post-login 기능 점검용으로만 사용한다.
- 실제 승인 완료 검증을 세션 bootstrap 경로로 대체하지 않는다.
- staging 반영 검토 전에는 승인 완료 end-to-end를 최소 1회 이상 확인하는 것을 목표로 한다.

## 7. 문서 및 로그 반영 원칙

- 테스트 기준이 바뀌면 정책 문서를 먼저 갱신한다.
- 중요한 실행 결과는 `docs/test-logs/`에 기록한다.
- 실패 시에는 원인, 재현 조건, 후속 조치를 함께 남긴다.
- mock 기준 통과와 real API 기준 통과를 구분해서 기록한다.
