test_pl_plan_stop_upsert.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. """replace_plan_stops 应按 payload.id upsert 送货段,而非每次换新 UUID。"""
  2. from unittest.mock import MagicMock
  3. import pytest
  4. from fastapi import HTTPException
  5. from app.services.pl_plan_stop_service import resolve_delivery_id_for_upsert
  6. def test_upsert_delivery_rejects_foreign_plan_id():
  7. with pytest.raises(HTTPException) as ei:
  8. resolve_delivery_id_for_upsert(
  9. plan_id="plan-1",
  10. payload_id="del-other-plan",
  11. existing_by_id={},
  12. )
  13. assert ei.value.status_code == 422
  14. def test_upsert_delivery_keeps_payload_id():
  15. existing = MagicMock()
  16. existing.id = "del-keep"
  17. existing.plan_id = "plan-1"
  18. new_id, row = resolve_delivery_id_for_upsert(
  19. plan_id="plan-1",
  20. payload_id="del-keep",
  21. existing_by_id={"del-keep": existing},
  22. )
  23. assert new_id == "del-keep"
  24. assert row is existing
  25. def test_upsert_delivery_generates_id_when_missing(monkeypatch):
  26. from app.services import pl_plan_stop_service as svc
  27. monkeypatch.setattr(svc, "generate_uuid", lambda: "new-del")
  28. new_id, row = resolve_delivery_id_for_upsert(
  29. plan_id="plan-1",
  30. payload_id=None,
  31. existing_by_id={},
  32. )
  33. assert new_id == "new-del"
  34. assert row is None