test_crm_batch1_remaining_column_facet.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. """CRM 第一批剩余资源:变更/模板/审批/调价函 In 过滤与 facet 白名单。"""
  2. from __future__ import annotations
  3. from sqlalchemy.dialects import mysql
  4. from app.services.crm.contract_change_list_filters import build_contract_change_column_filters
  5. from app.services.crm.contract_template_list_filters import build_contract_template_column_filters
  6. from app.services.crm.contract_approval_list_filters import build_contract_approval_column_filters
  7. from app.services.crm.price_letter_list_filters import build_price_letter_column_filters
  8. def _compile(clause) -> str:
  9. return str(
  10. clause.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
  11. ).lower()
  12. def test_change_contract_no_in():
  13. filters = build_contract_change_column_filters(contractNoIn="HT001,HT002")
  14. sqls = [_compile(f) for f in filters]
  15. assert any("contract_no" in s and "in (" in s for s in sqls)
  16. def test_change_contract_name_in():
  17. filters = build_contract_change_column_filters(contractNameIn="合同甲")
  18. sqls = [_compile(f) for f in filters]
  19. assert any("contract_name" in s and "in (" in s for s in sqls)
  20. def test_template_no_name_in():
  21. filters = build_contract_template_column_filters(
  22. templateNoIn="T01", templateNameIn="模板A"
  23. )
  24. sqls = [_compile(f) for f in filters]
  25. assert any("template_no" in s and "in (" in s for s in sqls)
  26. assert any("template_name" in s and "in (" in s for s in sqls)
  27. def test_approval_contract_no_name_in():
  28. filters = build_contract_approval_column_filters(
  29. contractNoIn="C1", contractNameIn="名"
  30. )
  31. sqls = [_compile(f) for f in filters]
  32. assert any("contract_no" in s and "in (" in s for s in sqls)
  33. assert any("contract_name" in s and "in (" in s for s in sqls)
  34. def test_price_letter_customer_product_in():
  35. filters = build_price_letter_column_filters(
  36. customerNameIn="客A", productNameIn="品B"
  37. )
  38. sqls = [_compile(f) for f in filters]
  39. assert any("customer_name" in s and "in (" in s for s in sqls)
  40. assert any("product_name" in s and "in (" in s for s in sqls)
  41. def test_facet_field_whitelists():
  42. from app.crud.crm.contract import (
  43. _CONTRACT_CHANGE_COLUMN_FACET_FIELDS,
  44. _CONTRACT_TEMPLATE_COLUMN_FACET_FIELDS,
  45. )
  46. from app.crud.crm.contract_approval import _CONTRACT_APPROVAL_COLUMN_FACET_FIELDS
  47. from app.crud.crm.price_letter import _PRICE_LETTER_COLUMN_FACET_FIELDS
  48. from app.crud.crm.supplier_info import _SUPPLIER_COLUMN_FACET_FIELDS
  49. assert set(_CONTRACT_CHANGE_COLUMN_FACET_FIELDS.keys()) == {"contractNo"}
  50. assert set(_CONTRACT_TEMPLATE_COLUMN_FACET_FIELDS.keys()) == {
  51. "templateNo",
  52. "templateName",
  53. }
  54. assert set(_CONTRACT_APPROVAL_COLUMN_FACET_FIELDS.keys()) == {
  55. "contractNo",
  56. "contractName",
  57. }
  58. assert set(_PRICE_LETTER_COLUMN_FACET_FIELDS.keys()) == {
  59. "customerName",
  60. "productName",
  61. }
  62. assert set(_SUPPLIER_COLUMN_FACET_FIELDS.keys()) == {
  63. "supplierCode",
  64. "supplierName",
  65. }