67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
"""绑合同时计划段产品包装规格校验。"""
|
|
from types import SimpleNamespace
|
|
|
|
from app.services.pl_contract_plan_qty import validate_stop_products_package_against_contract
|
|
|
|
|
|
def test_require_package_when_contract_bound():
|
|
contract_products = [
|
|
SimpleNamespace(product_id="p1", package_spec="25kg/桶"),
|
|
SimpleNamespace(product_id="p1", package_spec="槽罐车"),
|
|
]
|
|
ok, err = validate_stop_products_package_against_contract(
|
|
contract_products=contract_products,
|
|
stop_products=[SimpleNamespace(product_id="p1", package_spec="", product_name="次氯酸钠")],
|
|
)
|
|
assert ok is False
|
|
assert err and "包装" in err
|
|
|
|
|
|
def test_package_must_be_in_contract_set():
|
|
contract_products = [
|
|
SimpleNamespace(product_id="p1", package_spec="25kg/桶"),
|
|
SimpleNamespace(product_id="p1", package_spec="槽罐车"),
|
|
]
|
|
ok, err = validate_stop_products_package_against_contract(
|
|
contract_products=contract_products,
|
|
stop_products=[SimpleNamespace(product_id="p1", package_spec="吨桶", product_name="次氯酸钠")],
|
|
)
|
|
assert ok is False
|
|
assert err and "合同" in err
|
|
|
|
|
|
def test_valid_package_passes():
|
|
contract_products = [
|
|
SimpleNamespace(product_id="p1", package_spec="25kg/桶"),
|
|
SimpleNamespace(product_id="p1", package_spec="槽罐车"),
|
|
]
|
|
ok, err = validate_stop_products_package_against_contract(
|
|
contract_products=contract_products,
|
|
stop_products=[SimpleNamespace(product_id="p1", package_spec="槽罐车")],
|
|
)
|
|
assert ok is True
|
|
assert err is None
|
|
|
|
|
|
def test_product_not_on_contract_skipped():
|
|
contract_products = [
|
|
SimpleNamespace(product_id="p1", package_spec="槽罐车"),
|
|
]
|
|
ok, err = validate_stop_products_package_against_contract(
|
|
contract_products=contract_products,
|
|
stop_products=[SimpleNamespace(product_id="p2", package_spec="")],
|
|
)
|
|
assert ok is True
|
|
|
|
|
|
def test_contract_empty_package_allows_empty_plan():
|
|
"""脏数据防御:合同行包装为空时不强制计划填包装。"""
|
|
contract_products = [
|
|
SimpleNamespace(product_id="p1", package_spec=""),
|
|
]
|
|
ok, err = validate_stop_products_package_against_contract(
|
|
contract_products=contract_products,
|
|
stop_products=[SimpleNamespace(product_id="p1", package_spec="")],
|
|
)
|
|
assert ok is True
|