"""产品/客户列表 keyword:名称/编号/拼音首字母 OR 匹配。""" from __future__ import annotations from unittest.mock import MagicMock from app.crud.crm.customer import list_customer_options, list_customers from app.crud.crm.product import list_products def test_list_products_keyword_includes_name_and_pinyin(): db = MagicMock() q = MagicMock() db.query.return_value = q q.filter.return_value = q q.order_by.return_value = q q.with_entities.return_value = q q.scalar.return_value = 0 q.offset.return_value = q q.limit.return_value = q q.all.return_value = [] list_products(db, "shanxia2.0", keyword="gyls") assert q.filter.call_count >= 2 keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0]) assert "product_name" in keyword_expr assert "name_pinyin_abbr" in keyword_expr assert "product_no" in keyword_expr def test_list_products_keyword_selector_mode_excludes_product_no_includes_model(): """选择器:名称/拼音/规格型号,不匹配产品编号。""" db = MagicMock() q = MagicMock() db.query.return_value = q q.filter.return_value = q q.order_by.return_value = q q.with_entities.return_value = q q.scalar.return_value = 0 q.offset.return_value = q q.limit.return_value = q q.all.return_value = [] list_products( db, "shanxia2.0", keyword="32", match_product_no=False, match_model=True, ) assert q.filter.call_count >= 2 keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0]) assert "product_name" in keyword_expr assert "name_pinyin_abbr" in keyword_expr assert "model" in keyword_expr assert "product_no" not in keyword_expr def test_list_customers_keyword_includes_name_and_pinyin(): db = MagicMock() q = MagicMock() db.query.return_value = q q.filter.return_value = q q.order_by.return_value = q q.with_entities.return_value = q q.scalar.return_value = 0 q.offset.return_value = q q.limit.return_value = q q.all.return_value = [] list_customers(db, "shanxia2.0", keyword="sxhg") assert q.filter.call_count >= 2 keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0]) assert "customer_name" in keyword_expr assert "name_pinyin_abbr" in keyword_expr def test_list_customer_options_keyword_includes_name_and_pinyin(): db = MagicMock() q = MagicMock() db.query.return_value = q q.filter.return_value = q q.order_by.return_value = q q.limit.return_value = q q.all.return_value = [] list_customer_options(db, "shanxia2.0", keyword="sxhg") assert q.filter.call_count >= 2 keyword_expr = " ".join(str(a) for a in q.filter.call_args_list[1][0]) assert "customer_name" in keyword_expr assert "name_pinyin_abbr" in keyword_expr