test_crm_name_pinyin_search.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. """产品/客户列表 keyword:名称/编号/拼音首字母 OR 匹配。"""
  2. from __future__ import annotations
  3. from unittest.mock import MagicMock
  4. from app.crud.crm.customer import list_customer_options, list_customers
  5. from app.crud.crm.product import list_products
  6. def test_list_products_keyword_includes_name_and_pinyin():
  7. db = MagicMock()
  8. q = MagicMock()
  9. db.query.return_value = q
  10. q.filter.return_value = q
  11. q.order_by.return_value = q
  12. q.with_entities.return_value = q
  13. q.scalar.return_value = 0
  14. q.offset.return_value = q
  15. q.limit.return_value = q
  16. q.all.return_value = []
  17. list_products(db, "shanxia2.0", keyword="gyls")
  18. assert q.filter.call_count >= 2
  19. keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0])
  20. assert "product_name" in keyword_expr
  21. assert "name_pinyin_abbr" in keyword_expr
  22. assert "product_no" in keyword_expr
  23. def test_list_products_keyword_selector_mode_excludes_product_no_includes_model():
  24. """选择器:名称/拼音/规格型号,不匹配产品编号。"""
  25. db = MagicMock()
  26. q = MagicMock()
  27. db.query.return_value = q
  28. q.filter.return_value = q
  29. q.order_by.return_value = q
  30. q.with_entities.return_value = q
  31. q.scalar.return_value = 0
  32. q.offset.return_value = q
  33. q.limit.return_value = q
  34. q.all.return_value = []
  35. list_products(
  36. db,
  37. "shanxia2.0",
  38. keyword="32",
  39. match_product_no=False,
  40. match_model=True,
  41. )
  42. assert q.filter.call_count >= 2
  43. keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0])
  44. assert "product_name" in keyword_expr
  45. assert "name_pinyin_abbr" in keyword_expr
  46. assert "model" in keyword_expr
  47. assert "product_no" not in keyword_expr
  48. def test_list_customers_keyword_includes_name_and_pinyin():
  49. db = MagicMock()
  50. q = MagicMock()
  51. db.query.return_value = q
  52. q.filter.return_value = q
  53. q.order_by.return_value = q
  54. q.with_entities.return_value = q
  55. q.scalar.return_value = 0
  56. q.offset.return_value = q
  57. q.limit.return_value = q
  58. q.all.return_value = []
  59. list_customers(db, "shanxia2.0", keyword="sxhg")
  60. assert q.filter.call_count >= 2
  61. keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0])
  62. assert "customer_name" in keyword_expr
  63. assert "name_pinyin_abbr" in keyword_expr
  64. def test_list_customer_options_keyword_includes_name_and_pinyin():
  65. db = MagicMock()
  66. q = MagicMock()
  67. db.query.return_value = q
  68. q.filter.return_value = q
  69. q.order_by.return_value = q
  70. q.limit.return_value = q
  71. q.all.return_value = []
  72. list_customer_options(db, "shanxia2.0", keyword="sxhg")
  73. assert q.filter.call_count >= 2
  74. keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0])
  75. assert "customer_name" in keyword_expr
  76. assert "name_pinyin_abbr" in keyword_expr