"""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", }