baodan/tests/ppt_parse_route_test.py

51 lines
1.6 KiB
Python
Raw Normal View History

"""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