test_db_resolve_crm_product.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. """resolve_crm_product:运输联动场景允许已下架产品。"""
  2. from __future__ import annotations
  3. from types import SimpleNamespace
  4. from unittest.mock import MagicMock, patch
  5. import pytest
  6. from fastapi import HTTPException
  7. from app.services.db.product_helpers import resolve_crm_product
  8. def _product(**kwargs):
  9. base = dict(
  10. id="p1",
  11. tenant_no="shanxia2.0",
  12. product_name="98% 工业硫酸",
  13. model="98%",
  14. status="off",
  15. )
  16. base.update(kwargs)
  17. return SimpleNamespace(**base)
  18. def test_resolve_rejects_off_shelf_by_default():
  19. db = MagicMock()
  20. with patch("app.services.db.product_helpers.get_product", return_value=_product()):
  21. with pytest.raises(HTTPException) as exc:
  22. resolve_crm_product(db, "shanxia2.0", "p1")
  23. assert exc.value.status_code == 400
  24. assert "下架" in str(exc.value.detail)
  25. def test_resolve_allows_off_shelf_when_not_required():
  26. db = MagicMock()
  27. with patch("app.services.db.product_helpers.get_product", return_value=_product()):
  28. snap = resolve_crm_product(db, "shanxia2.0", "p1", require_on_shelf=False)
  29. assert snap.product_id == "p1"
  30. assert snap.product_name == "98% 工业硫酸"
  31. assert snap.specification == "98%"