Files
resume-agent/backend/tests/test_optimize_flow.py
T
hypandClaude ae2d9b128d feat: builder 简历生成 + 轻度优化 + 简历导入交付副本
自内部仓库剥离深度优化与 RAG 知识库后的交付版本:
- Builder 对话式简历生成(FSM + 意图路由 LLM 兜底增强)
- 条目级轻度优化:事实覆盖门禁 + STAR/bullet 修复链,功能/简介/成果与技术栈同级保护
- 简历导入:DOCX/PDF 解析、结构归一、手机号脱敏
- PostgreSQL 运行时 + Alembic 迁移链

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-05 11:08:30 +08:00

79 lines
2.8 KiB
Python

from __future__ import annotations
from fastapi.testclient import TestClient
from test_resume_patch_api import create_resume_with_anchor, first_entry
BASE = "/ai-api/resume-agent"
def test_optimize_confirm_undo_flow(client: TestClient) -> None:
session_id, body = create_resume_with_anchor(client)
original = first_entry(body)["description"]
entry_id = first_entry(body)["id"]
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize", json={"entry_id": entry_id}
)
assert response.status_code == 200
entry = first_entry(response.json())
proposal = entry["pending_proposal"]
assert proposal["source"] == "rule_polish"
assert proposal["optimized_description"] == "完成课程设计。"
assert entry["description"] == original
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize/confirm",
json={"entry_id": entry_id},
)
assert response.status_code == 200
entry = first_entry(response.json())
assert "pending_proposal" not in entry
assert entry["description"] == "完成课程设计。"
assert entry["provenance"] == "rule_polish"
assert entry["previous_version"]["description"] == original
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize/undo",
json={"entry_id": entry_id},
)
assert response.status_code == 200
entry = first_entry(response.json())
assert entry["description"] == original
assert "previous_version" not in entry
def test_optimize_reject(client: TestClient) -> None:
session_id, body = create_resume_with_anchor(client)
original = first_entry(body)["description"]
entry_id = first_entry(body)["id"]
client.post(f"{BASE}/sessions/{session_id}/resume/optimize", json={"entry_id": entry_id})
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize/reject",
json={"entry_id": entry_id},
)
assert response.status_code == 200
entry = first_entry(response.json())
assert "pending_proposal" not in entry
assert entry["description"] == original
def test_optimize_unknown_entry_404(client: TestClient) -> None:
session_id, _ = create_resume_with_anchor(client)
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize", json={"entry_id": "entry_nope"}
)
assert response.status_code == 404
assert response.json()["error"]["code"] == "entry_not_found"
def test_confirm_without_proposal_422(client: TestClient) -> None:
session_id, body = create_resume_with_anchor(client)
entry_id = first_entry(body)["id"]
response = client.post(
f"{BASE}/sessions/{session_id}/resume/optimize/confirm",
json={"entry_id": entry_id},
)
assert response.status_code == 422
assert response.json()["error"]["code"] == "optimize_not_pending"