from __future__ import annotations import pytest from pydantic import ValidationError from app.schemas.review import ( ReviewIssue, TripReviewResult, ) def test_approved_review_with_warning() -> None: result = TripReviewResult( approved=True, summary="方案整体合理。", strengths=[ "符合用户轻松旅行偏好", ], issues=[ ReviewIssue( category="budget", severity="warning", message=( "餐饮和门票费用尚未计入。" ), ) ], recommendations=[ "出发前确认门票价格。", ], revision_feedback=[], ) assert result.approved is True assert len(result.issues) == 1 def test_approved_review_cannot_have_blocking_issue( ) -> None: with pytest.raises(ValidationError): TripReviewResult( approved=True, summary="错误的通过结果。", issues=[ ReviewIssue( category="pace", severity="blocking", message="行程安排严重过满。", ) ], revision_feedback=[], ) def test_rejected_review_requires_feedback() -> None: with pytest.raises(ValidationError): TripReviewResult( approved=False, summary="方案需要修改。", issues=[ ReviewIssue( category="requirement_fit", severity="blocking", message="没有满足用户需求。", ) ], revision_feedback=[], ) def test_rejected_review_with_feedback() -> None: result = TripReviewResult( approved=False, summary="返程日安排不合理。", issues=[ ReviewIssue( category="flight", severity="blocking", message=( "返程日前往机场时间不足。" ), day_index=4, suggestion=( "取消上午景点并提前前往机场。" ), ) ], revision_feedback=[ "取消返程日上午的景点活动," "至少提前3小时前往机场。", ], ) assert result.approved is False assert len(result.revision_feedback) == 1