test_pl_public_link_archived.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. """运输计划司机/现场公共链接:归档后应标记并拦截写操作。"""
  2. from types import SimpleNamespace
  3. from app.api.pl.public_io_order import _resolve_io_order_link_flags
  4. from app.api.pl.public_site import _resolve_site_link_flags
  5. from app.api.pl.public_transport import _resolve_driver_link_flags
  6. from app.schemas.pl.transport import PublicTransportPageRead, PublicTransportSitePageRead
  7. def test_driver_link_flags_archived_when_plan_archived():
  8. plan = SimpleNamespace(follow_status="completed", archive_status="archived")
  9. transport = SimpleNamespace(transport_status="arranged")
  10. voided, archived = _resolve_driver_link_flags(plan, transport)
  11. assert voided is False
  12. assert archived is True
  13. def test_driver_link_flags_voided_takes_precedence_shape():
  14. plan = SimpleNamespace(follow_status="cancelled", archive_status="unarchived")
  15. transport = SimpleNamespace(transport_status="arranged")
  16. voided, archived = _resolve_driver_link_flags(plan, transport)
  17. assert voided is True
  18. assert archived is False
  19. def test_driver_link_flags_voided_by_transport_cancelled():
  20. plan = SimpleNamespace(follow_status="arranged", archive_status="unarchived")
  21. transport = SimpleNamespace(transport_status="cancelled")
  22. voided, archived = _resolve_driver_link_flags(plan, transport)
  23. assert voided is True
  24. assert archived is False
  25. def test_site_link_flags_archived_when_plan_archived():
  26. plan = SimpleNamespace(follow_status="completed", archive_status="archived")
  27. voided, archived = _resolve_site_link_flags(plan)
  28. assert voided is False
  29. assert archived is True
  30. def test_site_link_flags_voided_when_cancelled():
  31. plan = SimpleNamespace(follow_status="cancelled", archive_status="unarchived")
  32. voided, archived = _resolve_site_link_flags(plan)
  33. assert voided is True
  34. assert archived is False
  35. def test_site_link_flags_false_when_no_plan():
  36. voided, archived = _resolve_site_link_flags(None)
  37. assert voided is False
  38. assert archived is False
  39. def test_public_transport_page_schema_exposes_plan_archived():
  40. page = PublicTransportPageRead(
  41. planNo="P1",
  42. planType="sale",
  43. planArchived=True,
  44. )
  45. dumped = page.model_dump(by_alias=True)
  46. assert dumped["planArchived"] is True
  47. def test_public_site_page_schema_exposes_archived():
  48. page = PublicTransportSitePageRead(
  49. businessType="入库",
  50. partnerCompany="A",
  51. vehicleNo="浙A",
  52. archived=True,
  53. )
  54. dumped = page.model_dump(by_alias=True)
  55. assert dumped["archived"] is True
  56. def test_io_order_link_flags_archived_when_plan_archived():
  57. plan = SimpleNamespace(follow_status="completed", archive_status="archived")
  58. header = SimpleNamespace(status="completed")
  59. voided, archived = _resolve_io_order_link_flags(plan, header)
  60. assert voided is False
  61. assert archived is True
  62. def test_io_order_link_flags_voided_by_header_or_plan():
  63. plan = SimpleNamespace(follow_status="cancelled", archive_status="unarchived")
  64. header = SimpleNamespace(status="in_progress")
  65. voided, archived = _resolve_io_order_link_flags(plan, header)
  66. assert voided is True
  67. assert archived is False
  68. plan2 = SimpleNamespace(follow_status="arranged", archive_status="unarchived")
  69. header2 = SimpleNamespace(status="voided")
  70. voided2, archived2 = _resolve_io_order_link_flags(plan2, header2)
  71. assert voided2 is True
  72. assert archived2 is False