Files
portfolio-hub/docs/batches/bat-002_20260519_asset-catalog-api-completion/verification.md
T

3.7 KiB

BAT-002 Verification

  • Status: release-candidate
  • Batch: BAT-002

Acceptance Mapping

  • REQ-010:

    • AC-1: admin CLI pfhub asset create 성공 → tests/test_asset_catalog.py::test_asset_cli_create_success ✓
    • AC-2: admin CLI pfhub asset list — active/inactive 필터 → tests/test_asset_catalog.py::test_asset_cli_list_returns_all, test_asset_cli_list_active_only_filter ✓
    • AC-3: admin CLI pfhub asset update 성공 → tests/test_asset_catalog.py::test_asset_cli_update_success ✓
    • AC-4: admin CLI pfhub asset deactivate 성공 → tests/test_asset_catalog.py::test_asset_cli_deactivate_success ✓
    • AC-5: POST /v1/assets admin token → 201 AssetResponse → tests/test_asset_catalog.py::test_asset_http_create_returns_201 ✓
    • AC-6: PATCH /v1/assets/{id} admin token → 200 → tests/test_asset_catalog.py::test_asset_http_update_returns_200 ✓
    • AC-7: PATCH /v1/assets/{id}/deactivate admin token → 200 → tests/test_asset_catalog.py::test_asset_http_deactivate_returns_200 ✓
    • AC-8: non-admin으로 admin 엔드포인트 호출 시 403 → tests/test_asset_catalog.py::test_asset_http_non_admin_403 ✓
  • REQ-012:

    • AC-1: active asset 존재 시 portfolio create 성공 → tests/test_asset_catalog.py::test_portfolio_create_with_active_asset ✓
    • AC-2: 미등록 asset_id 지정 시 "asset not found" 오류, 생성 실패 → tests/test_asset_catalog.py::test_portfolio_create_unknown_asset ✓
    • AC-3: inactive asset 지정 시 "asset is inactive" 오류, 생성 실패 → tests/test_asset_catalog.py::test_portfolio_create_inactive_asset ✓
    • AC-4: --symbol로 asset_id 조회 후 portfolio create 성공 → tests/test_asset_catalog.py::test_portfolio_create_by_symbol ✓
  • REQ-013:

    • AC-1: service token(daemon_id 있음) → daemon 관리 portfolio 필터링 → tests/test_v1.py::test_v1_assets_returns_asset_list (assert_called_once_with updated) ✓
    • AC-2: service token(daemon_id 없음) → 403 → tests/test_daemon_assignment.py::test_assets_403_when_token_has_no_daemon_id (기존) ✓
    • AC-3: user token → 본인 portfolio만 반환 → tests/test_v1.py::test_v1_assets_user_token ✓
    • AC-4: admin token 기본 → admin 본인 portfolio → tests/test_v1.py::test_v1_assets_admin_token_default ✓
    • AC-5: admin token + ?user_id → 해당 user portfolio → tests/test_v1.py::test_v1_assets_admin_token_user_id_param ✓
    • AC-6: 모든 토큰 + ?market= → 필터링 → tests/test_v1.py::test_v1_assets_market_filter ✓
    • AC-7: 응답 asset_id는 UUID 형식 → tests/test_v1.py::test_v1_assets_asset_id_is_uuid ✓
  • REQ-015:

    • AC-1: docs/data-model.md에 assets 엔티티, portfolios asset_id FK 반영 → 수동 검토 ✓
    • AC-2: docs/interface-contract.md에 POST/PATCH /v1/assets, 토큰 분기 명세 포함 → 수동 검토 ✓
    • AC-3: docs/runtime-flows.md에 GET /v1/assets 토큰 분기, admin CRUD 흐름 추가 → 수동 검토 ✓
    • AC-4: docs/project-structure.md에 pfhub asset 그룹 및 asset.py 모듈 반영 → 수동 검토 ✓

Evidence

  • Test:
    • pytest 실행 결과: 180 passed, 0 failed (2026-05-19)
    • 신규 테스트: test_asset_catalog.py 18개, test_v1.py 5개 추가
    • 기존 regression: test_cli.py, test_portfolio_uuid.py, test_v1.py, test_daemon_assignment.py 전체 통과
  • Manual:
    • 수동 CLI 실행은 live DB 환경에서 별도 검증 필요 (FakeRepo 기반 테스트로 커버)
    • HTTP admin 엔드포인트는 MagicMock 기반 테스트로 커버
  • Logs:
    • tests/test_asset_catalog.py — 전체 38개 테스트 통과
    • tests/test_v1.py — 전체 통과 (기존 + 신규 5개)

Result

  • Ready for Release: true
  • Blocking Issues: 없음