generated from kgod/ai-review-template
79 lines
2.8 KiB
Python
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"
|