Skip to content

test(api): Phase 0 — 테스트 인프라 구축 (MockDatabase, 헬퍼, 픽스처) #163

@cocoyoon

Description

@cocoyoon

Context

현재 api-server 테스트 커버리지가 10%로 설정되어 있음. 80%까지 단계적으로 올리기 위한 첫 번째 단계로, 테스트 인프라를 구축한다.

현재 상태

  • 테스트 401개 존재하나 대부분 DTO 직렬화/역직렬화 검증
  • src/tests/helpers.rs에 health check 라우터 하나만 존재
  • SeaORM mock feature 미활성화 → MockDatabase 사용 불가
  • 외부 서비스 trait 추상화 완료 (SearchClient, StorageClient, EmbeddingClient, AffiliateClient)

작업 목록

1. SeaORM mock feature 활성화

  • Cargo.toml dev-dependencies에 추가:
    [dev-dependencies]
    sea-orm = { workspace = true, features = ["mock"] }

2. src/tests/helpers.rs 확장

  • create_mock_db(results)MockDatabase 빌더 래퍼
  • create_test_app_state(db, mocks) — mock DB + mock trait 클라이언트로 AppState 생성
  • mock_user() / mock_admin_user() — 테스트용 User 객체 팩토리
  • authenticated_request(method, uri, user) — JWT Extension이 주입된 Axum 테스트 요청 빌더

3. src/tests/fixtures.rs (신규)

  • 도메인별 엔티티 팩토리 함수: post_model(), user_model(), solution_model(), spot_model(), comment_model(), vote_model(), badge_model()
  • MockDatabase에 넣을 결과 셋 생성 헬퍼

4. src/tests/mod.rs 업데이트

  • fixtures 모듈 등록

검증

cargo test --lib tests::
cargo check

참고 파일

  • packages/api-server/Cargo.toml
  • packages/api-server/src/tests/helpers.rs
  • packages/api-server/src/tests/mod.rs
  • packages/api-server/src/app_state.rs (AppState 구조 참고)

예상 산출물

  • 신규 테스트: ~5개 (인프라 스모크 테스트)
  • 커버리지 변화: 없음 (인프라만 구축)
  • 후속: Phase 1~4의 전제조건

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions