"""PPT 重复解析路由回归测试。""" from pathlib import Path from types import SimpleNamespace import json import sys from flask import Flask, request sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "api")) from insurance.generation import task_service from insurance.ppt import routes def test_reparse_creates_a_new_task_without_fixed_idempotency_key(monkeypatch): """已完成的历史任务不能阻止同一工作区再次解析。""" session = SimpleNamespace( id="session-1", user_id="user-1", title="测试计划书", status="parsed", files_json=json.dumps([{"path": "plan.pdf", "name": "plan.pdf"}]), extractions_json="[]", parse_progress=100, parse_message="处理完成", parse_error=None, parse_started_at=None, parse_finished_at=None, latest_task_id="old-task", ) captured = {} monkeypatch.setattr(routes, "_get_session", lambda _sid, _uid: session) monkeypatch.setattr(routes, "_save_session", lambda _session: None) def fake_create_task(**kwargs): captured.update(kwargs) return {"code": 0, "data": {"id": "new-task"}} monkeypatch.setattr(task_service, "create_task", fake_create_task) app = Flask(__name__) with app.test_request_context("/insurance/ppt/parse/session-1", method="POST"): request.user_id = "user-1" response = routes.parse_session.__wrapped__("session-1") body = response.get_json() assert body["data"]["taskId"] == "new-task" assert session.latest_task_id == "new-task" assert "idempotency_key" not in captured