83 lines
3.0 KiB
Python
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",
|
|
}
|