"""进度卡规则:total 固定为队列长度;skip 只切卡不推进度;进度卡无 skip 动作。""" from __future__ import annotations from fastapi.testclient import TestClient from app.enrichment_modules import module_by_name from app.fsm_enrichment import ( ensure_enrichment_state, enrichment_progress, mark_completed, skip_module, ) from test_api import BASE, active_component from test_enrichment_flow import ( continue_enriching, created_session, find_component, skip_current, ) def _campus_profile() -> dict: return {"job_type": "campus", "anchor_type": "education", "anchor": {}, "experiences": []} def test_progress_fixed_total_and_skip_does_not_advance(): profile = _campus_profile() ensure_enrichment_state(profile) mark_completed(profile, "internship") progress = enrichment_progress(profile) assert progress["total"] == 5 assert progress["ratio"] == 1 / 5 skip_module(profile, module_by_name("competition")) progress = enrichment_progress(profile) assert progress["total"] == 5 assert progress["completed"] == 1 assert progress["skipped"] == 1 assert progress["ratio"] == 1 / 5 def test_skip_keeps_total_fixed_and_progress_card_has_no_skip(client: TestClient): session_id, body = created_session(client) body = continue_enriching(client, session_id, body) stale_block = active_component(body) body = skip_current(client, session_id, body) progress = find_component(body, "progress_card") assert progress["data"]["total"] == 5 assert progress["data"]["skipped"] == 1 assert progress["data"]["completed"] == 0 assert progress["data"]["percent"] == 0 assert progress["data"]["actions"] == ["defer"] replay = client.post( f"{BASE}/sessions/{session_id}/component-events", json={ "component_id": stale_block["id"], "event": "submit", "payload": { "company": "星河科技", "position": "后端实习生", "start_date": "2024-03", "end_date_or_present": "2024-09", }, }, ) assert replay.status_code == 409