test_review_schema.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. from __future__ import annotations
  2. import pytest
  3. from pydantic import ValidationError
  4. from app.schemas.review import (
  5. ReviewIssue,
  6. TripReviewResult,
  7. )
  8. def test_approved_review_with_warning() -> None:
  9. result = TripReviewResult(
  10. approved=True,
  11. summary="方案整体合理。",
  12. strengths=[
  13. "符合用户轻松旅行偏好",
  14. ],
  15. issues=[
  16. ReviewIssue(
  17. category="budget",
  18. severity="warning",
  19. message=(
  20. "餐饮和门票费用尚未计入。"
  21. ),
  22. )
  23. ],
  24. recommendations=[
  25. "出发前确认门票价格。",
  26. ],
  27. revision_feedback=[],
  28. )
  29. assert result.approved is True
  30. assert len(result.issues) == 1
  31. def test_approved_review_cannot_have_blocking_issue(
  32. ) -> None:
  33. with pytest.raises(ValidationError):
  34. TripReviewResult(
  35. approved=True,
  36. summary="错误的通过结果。",
  37. issues=[
  38. ReviewIssue(
  39. category="pace",
  40. severity="blocking",
  41. message="行程安排严重过满。",
  42. )
  43. ],
  44. revision_feedback=[],
  45. )
  46. def test_rejected_review_requires_feedback() -> None:
  47. with pytest.raises(ValidationError):
  48. TripReviewResult(
  49. approved=False,
  50. summary="方案需要修改。",
  51. issues=[
  52. ReviewIssue(
  53. category="requirement_fit",
  54. severity="blocking",
  55. message="没有满足用户需求。",
  56. )
  57. ],
  58. revision_feedback=[],
  59. )
  60. def test_rejected_review_with_feedback() -> None:
  61. result = TripReviewResult(
  62. approved=False,
  63. summary="返程日安排不合理。",
  64. issues=[
  65. ReviewIssue(
  66. category="flight",
  67. severity="blocking",
  68. message=(
  69. "返程日前往机场时间不足。"
  70. ),
  71. day_index=4,
  72. suggestion=(
  73. "取消上午景点并提前前往机场。"
  74. ),
  75. )
  76. ],
  77. revision_feedback=[
  78. "取消返程日上午的景点活动,"
  79. "至少提前3小时前往机场。",
  80. ],
  81. )
  82. assert result.approved is False
  83. assert len(result.revision_feedback) == 1