fix: 修复报告摘要生成并稳定默认端口
This commit is contained in:
@@ -5,6 +5,7 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.models import Comment, ContentItem, Hotspot, Report, Task
|
||||
from app.schemas import CreateTaskRequest
|
||||
from app.services.report_service import DEFAULT_SUMMARY
|
||||
from app.services.task_service import create_task, run_task
|
||||
from tests.helpers import make_test_client
|
||||
|
||||
@@ -28,7 +29,11 @@ class FakeXhsPlatform:
|
||||
return [CommentData(source_comment_id="c1", content="评论一", like_count=5, raw_data={"id": "c1"})]
|
||||
|
||||
|
||||
ai_prompts: list[str] = []
|
||||
|
||||
|
||||
def successful_ai_response(prompt: str) -> str:
|
||||
ai_prompts.append(prompt)
|
||||
comments = json.loads(prompt[prompt.index("[") :])
|
||||
comment_id = comments[0]["comment_id"]
|
||||
return json.dumps(
|
||||
@@ -38,9 +43,14 @@ def successful_ai_response(prompt: str) -> str:
|
||||
|
||||
|
||||
def test_xiaohongshu_task_flow_persists_hotspots_items_and_comments(monkeypatch):
|
||||
ai_prompts.clear()
|
||||
with make_test_client() as (_client, engine):
|
||||
monkeypatch.setattr("app.services.task_service.build_platform", lambda _platform: FakeXhsPlatform())
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_requester", lambda: successful_ai_response)
|
||||
summary_provider = lambda metrics, typical, *, word_limit=200: (
|
||||
ai_prompts.append(f"只返回一段中文总结 word_limit={word_limit} sample={metrics['sample_count']}")
|
||||
or "这是一段真实 AI 报告摘要。"
|
||||
)
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_dependencies", lambda: (successful_ai_response, summary_provider))
|
||||
|
||||
with Session(engine) as session:
|
||||
task = create_task(
|
||||
@@ -66,14 +76,21 @@ def test_xiaohongshu_task_flow_persists_hotspots_items_and_comments(monkeypatch)
|
||||
assert comment.sentiment == "positive"
|
||||
assert comment.labels == '["认可"]'
|
||||
assert comment.reason == "喜欢"
|
||||
assert session.scalar(select(Report).where(Report.task_id == task_id, Report.report_type == "item")) is not None
|
||||
assert session.scalar(select(Report).where(Report.task_id == task_id, Report.report_type == "hotspot")) is not None
|
||||
item_report = session.scalar(select(Report).where(Report.task_id == task_id, Report.report_type == "item"))
|
||||
hotspot_report = session.scalar(select(Report).where(Report.task_id == task_id, Report.report_type == "hotspot"))
|
||||
assert item_report is not None
|
||||
assert hotspot_report is not None
|
||||
assert item_report.summary == "这是一段真实 AI 报告摘要。"
|
||||
assert hotspot_report.summary == "这是一段真实 AI 报告摘要。"
|
||||
assert DEFAULT_SUMMARY not in item_report.markdown_content
|
||||
assert DEFAULT_SUMMARY not in hotspot_report.markdown_content
|
||||
assert any("只返回一段中文总结" in prompt for prompt in ai_prompts)
|
||||
|
||||
|
||||
def test_xiaohongshu_task_flow_marks_comments_failed_when_ai_parse_fails(monkeypatch):
|
||||
with make_test_client() as (_client, engine):
|
||||
monkeypatch.setattr("app.services.task_service.build_platform", lambda _platform: FakeXhsPlatform())
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_requester", lambda: (lambda _prompt: "not-json"))
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_dependencies", lambda: (lambda _prompt: "not-json", None))
|
||||
monkeypatch.setattr("app.services.ai_service.time.sleep", lambda _seconds: None)
|
||||
|
||||
with Session(engine) as session:
|
||||
@@ -107,7 +124,7 @@ def test_xiaohongshu_task_flow_keeps_item_success_when_ai_request_raises(monkeyp
|
||||
def failing_requester(_prompt):
|
||||
raise RuntimeError("ai unauthorized")
|
||||
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_requester", lambda: failing_requester)
|
||||
monkeypatch.setattr("app.services.task_service.build_ai_dependencies", lambda: (failing_requester, None))
|
||||
|
||||
with Session(engine) as session:
|
||||
task = create_task(
|
||||
|
||||
Reference in New Issue
Block a user