# 스테이징 재고 플로우 검증 시나리오

## 전제 조건
- 스테이징 API 서버가 기동되어 있고, 테스트용 토큰이 발급되어 있어야 합니다.
- 아래 환경 변수에 대응하는 실 ID가 존재해야 합니다.
  - `STAGING_API_BASE_URL`
  - `STAGING_API_TOKEN`
  - `STAGING_TRANSACTION_TYPE_ID`
  - `STAGING_TRANSACTION_STATUS_ID`
  - `STAGING_WAREHOUSE_ID`
  - `STAGING_EMPLOYEE_ID`
  - `STAGING_PRODUCT_ID`
  - `STAGING_CUSTOMER_ID`
- 임시 데이터 생성/삭제가 허용된 스테이징 계정을 사용하세요.

## 테스트 데이터 구성
- 스테이징 콘솔 또는 API를 사용해 전용 QA 데이터를 사전에 확보합니다.
  1. `/api/v1/warehouses`, `/api/v1/employees`, `/api/v1/products`, `/api/v1/customers` 목록을 조회해 테스트에 사용할 고정 ID를 선택하거나 새 레코드를 생성합니다.
  2. `/api/v1/transaction-types`와 `/api/v1/transaction-statuses`에서 submit/approve/complete 플로우를 지원하는 타입·상태 조합을 확인합니다.
  3. `/api/v1/stock-transactions`에 임시 트랜잭션을 생성해 라인/고객/승인 데이터가 정상 저장되는지 점검한 뒤, 성공한 요청 본문을 재사용 가능한 fixture로 저장합니다.
  4. 테스트 종료 후 `/api/v1/stock-transactions/{id}` DELETE 요청으로 데이터를 정리해 다른 시나리오에 영향을 주지 않도록 합니다.
- 각 ID는 `.env.staging` 또는 CI 시크릿에 명시해 실행 시점에 자동으로 주입합니다.

## 자동화 테스트 실행 방법
1. 루트에서 다음 명령으로 환경 변수를 전달합니다.
   ```bash
   flutter test integration_test/stock_transaction_state_flow_test.dart \
     --dart-define=STAGING_RUN_TRANSACTION_FLOW=true \
     --dart-define=STAGING_API_BASE_URL=https://staging.superport.example \
     --dart-define=STAGING_API_TOKEN=<token> \
     --dart-define=STAGING_TRANSACTION_TYPE_ID=1 \
     --dart-define=STAGING_TRANSACTION_STATUS_ID=1 \
     --dart-define=STAGING_WAREHOUSE_ID=3 \
     --dart-define=STAGING_EMPLOYEE_ID=5 \
     --dart-define=STAGING_PRODUCT_ID=11 \
     --dart-define=STAGING_CUSTOMER_ID=7
   ```
2. 테스트는 다음 흐름을 검증합니다.
   - 재고 트랜잭션 생성 → 상신(submit) → 취소(cancel) → 삭제(delete)
   - 실패 시 HTTP 응답을 출력하므로, 로그를 토대로 API 상태를 점검합니다.

## 수동 검증 체크리스트
1. **생성**: 입고/출고/대여 중 하나를 생성하고, 작성자·창고·라인·고객 정보가 정확히 저장되는지 확인합니다.
2. **상태 전이**: 작성중 → 상신 → 승인/완료 → 취소 순으로 버튼이 활성화되는지와 API 응답 코드를 확인합니다.
3. **보고서 다운로드**: 동일한 조건으로 보고서를 다운로드하여 URL/파일이 정상 동작하는지 브라우저에서 재확인합니다.
4. **정리**: 테스트용 데이터는 취소 후 삭제하여 스테이징 목록을 정리합니다.

## 장애 대응 메모
- 4xx 발생 시 API 로그와 `feature_flag` 값을 우선 확인합니다.
- 5xx 또는 타임아웃은 백엔드 담당자에게 API 경로와 요청 페이로드를 공유합니다.
