test_crm_facet_context.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """CRM 列头 facet 上下文:剥离本列键。"""
  2. from typing import Optional
  3. from pydantic import BaseModel, ConfigDict, Field
  4. from app.services.crm.facet_context import (
  5. clear_facet_field_kwargs,
  6. facet_filter_kwargs_from_body,
  7. )
  8. def test_clear_facet_field_kwargs_customer_no():
  9. kwargs = {
  10. "customer_no": "C1",
  11. "customer_no_in": "C1,C2",
  12. "customer_name": "Acme",
  13. "customer_name_in": None,
  14. }
  15. out = clear_facet_field_kwargs(kwargs, "customerNo")
  16. assert out["customer_no"] is None
  17. assert out["customer_no_in"] is None
  18. assert out["customer_name"] == "Acme"
  19. def test_clear_facet_field_kwargs_quote_no():
  20. kwargs = {"quote_no_in": "Q1,Q2", "customer_name_in": "A,B"}
  21. out = clear_facet_field_kwargs(kwargs, "quoteNo")
  22. assert out["quote_no_in"] is None
  23. assert out["customer_name_in"] == "A,B"
  24. class _FacetBody(BaseModel):
  25. model_config = ConfigDict(extra="allow")
  26. field: str
  27. keyword: Optional[str] = None
  28. limit: Optional[int] = 500
  29. customer_name_in: Optional[str] = Field(default=None, alias="customerNameIn")
  30. product_name: Optional[str] = Field(default=None, alias="productName")
  31. page: Optional[int] = None
  32. pageSize: Optional[int] = None
  33. def test_facet_filter_kwargs_from_body_strips_meta_and_self():
  34. body = _FacetBody.model_validate(
  35. {
  36. "field": "customerName",
  37. "keyword": "x",
  38. "limit": 50,
  39. "customerNameIn": "A,B",
  40. "productName": "P1",
  41. "page": 1,
  42. "pageSize": 20,
  43. "statusIn": "on",
  44. }
  45. )
  46. out = facet_filter_kwargs_from_body(body, "customerName")
  47. assert out.get("customer_name_in") is None
  48. assert out.get("product_name") == "P1"
  49. assert out.get("status_in") == "on"
  50. assert "page" not in out
  51. assert "pageSize" not in out
  52. assert "field" not in out