feat(crm): add customer list column filter builder.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-09-06 08:17:06 +08:00
1 parent f33b905f0d
commit 3bb905bc20
3 files changed
+283

No files matched your search

@@ -0,0 +1,59 @@
"""CRM 客户列表列头/导出共用过滤条件拼装单测。"""
from __future__ import annotations
from sqlalchemy.dialects import mysql
from app.services.crm.customer_list_filters import build_customer_column_filters
def _compile(clause) -> str:
return str(
clause.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
).lower()
def test_level_in_adds_in_clause():
filters = build_customer_column_filters(level_in="key,normal")
assert len(filters) == 1
sql = _compile(filters[0])
assert "level" in sql
assert "in (" in sql
assert "key" in sql
assert "normal" in sql
def test_customer_name_fuzzy():
filters = build_customer_column_filters(customer_name="三峡")
assert len(filters) == 1
sql = _compile(filters[0])
assert "customer_name" in sql
assert "三峡" in sql
def test_deal_amount_between_min_only():
filters = build_customer_column_filters(
deal_amount_op="between",
deal_amount_min="100",
)
assert len(filters) == 1
sql = _compile(filters[0])
assert "deal_amount" in sql
assert ">=" in sql
assert "100" in sql
def test_begin_end_time_create_time():
filters = build_customer_column_filters(
begin_time="2026-01-01",
end_time="2026-01-31",
)
assert len(filters) >= 1
joined = " ".join(_compile(f) for f in filters)
assert "create_time" in joined
assert ">=" in joined
assert "2026-01-01" in joined
def test_empty_params_yield_no_filters():
filters = build_customer_column_filters()
assert filters == []