"""replace_plan_stops 应按 payload.id upsert 送货段,而非每次换新 UUID。""" from unittest.mock import MagicMock import pytest from fastapi import HTTPException from app.services.pl_plan_stop_service import resolve_delivery_id_for_upsert def test_upsert_delivery_rejects_foreign_plan_id(): with pytest.raises(HTTPException) as ei: resolve_delivery_id_for_upsert( plan_id="plan-1", payload_id="del-other-plan", existing_by_id={}, ) assert ei.value.status_code == 422 def test_upsert_delivery_keeps_payload_id(): existing = MagicMock() existing.id = "del-keep" existing.plan_id = "plan-1" new_id, row = resolve_delivery_id_for_upsert( plan_id="plan-1", payload_id="del-keep", existing_by_id={"del-keep": existing}, ) assert new_id == "del-keep" assert row is existing def test_upsert_delivery_generates_id_when_missing(monkeypatch): from app.services import pl_plan_stop_service as svc monkeypatch.setattr(svc, "generate_uuid", lambda: "new-del") new_id, row = resolve_delivery_id_for_upsert( plan_id="plan-1", payload_id=None, existing_by_id={}, ) assert new_id == "new-del" assert row is None