51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
"""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
|