feat(crm): add customer list column filter builder.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
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 == []
|
||||
Reference in new issue
Block a user