Files
shanxia2.0/backend/tests/test_crm_batch1_remaining_column_facet.py
T
2026-10-02 09:28:00 +08:00

83 lines
3.0 KiB
Python

"""CRM 第一批剩余资源:变更/模板/审批/调价函 In 过滤与 facet 白名单。"""
from __future__ import annotations
from sqlalchemy.dialects import mysql
from app.services.crm.contract_change_list_filters import build_contract_change_column_filters
from app.services.crm.contract_template_list_filters import build_contract_template_column_filters
from app.services.crm.contract_approval_list_filters import build_contract_approval_column_filters
from app.services.crm.price_letter_list_filters import build_price_letter_column_filters
def _compile(clause) -> str:
return str(
clause.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
).lower()
def test_change_contract_no_in():
filters = build_contract_change_column_filters(contractNoIn="HT001,HT002")
sqls = [_compile(f) for f in filters]
assert any("contract_no" in s and "in (" in s for s in sqls)
def test_change_contract_name_in():
filters = build_contract_change_column_filters(contractNameIn="合同甲")
sqls = [_compile(f) for f in filters]
assert any("contract_name" in s and "in (" in s for s in sqls)
def test_template_no_name_in():
filters = build_contract_template_column_filters(
templateNoIn="T01", templateNameIn="模板A"
)
sqls = [_compile(f) for f in filters]
assert any("template_no" in s and "in (" in s for s in sqls)
assert any("template_name" in s and "in (" in s for s in sqls)
def test_approval_contract_no_name_in():
filters = build_contract_approval_column_filters(
contractNoIn="C1", contractNameIn="名"
)
sqls = [_compile(f) for f in filters]
assert any("contract_no" in s and "in (" in s for s in sqls)
assert any("contract_name" in s and "in (" in s for s in sqls)
def test_price_letter_customer_product_in():
filters = build_price_letter_column_filters(
customerNameIn="客A", productNameIn="品B"
)
sqls = [_compile(f) for f in filters]
assert any("customer_name" in s and "in (" in s for s in sqls)
assert any("product_name" in s and "in (" in s for s in sqls)
def test_facet_field_whitelists():
from app.crud.crm.contract import (
_CONTRACT_CHANGE_COLUMN_FACET_FIELDS,
_CONTRACT_TEMPLATE_COLUMN_FACET_FIELDS,
)
from app.crud.crm.contract_approval import _CONTRACT_APPROVAL_COLUMN_FACET_FIELDS
from app.crud.crm.price_letter import _PRICE_LETTER_COLUMN_FACET_FIELDS
from app.crud.crm.supplier_info import _SUPPLIER_COLUMN_FACET_FIELDS
assert set(_CONTRACT_CHANGE_COLUMN_FACET_FIELDS.keys()) == {"contractNo"}
assert set(_CONTRACT_TEMPLATE_COLUMN_FACET_FIELDS.keys()) == {
"templateNo",
"templateName",
}
assert set(_CONTRACT_APPROVAL_COLUMN_FACET_FIELDS.keys()) == {
"contractNo",
"contractName",
}
assert set(_PRICE_LETTER_COLUMN_FACET_FIELDS.keys()) == {
"customerName",
"productName",
}
assert set(_SUPPLIER_COLUMN_FACET_FIELDS.keys()) == {
"supplierCode",
"supplierName",
}