Files
shanxia2.0/backend/tests/test_crm_package_spec.py
T
2026-09-26 11:59:39 +08:00

59 lines
1.9 KiB
Python

"""Tests for contract product package_spec JSON codec."""
from app.utils.crm_package_spec import (
decode_package_specs,
encode_package_specs,
normalize_package_specs_list,
resolve_package_specs_from_payload,
)
def test_decode_legacy_scalar():
assert decode_package_specs("25kg/桶") == ["25kg/桶"]
assert decode_package_specs(" 槽罐车 ") == ["槽罐车"]
def test_decode_empty():
assert decode_package_specs(None) == []
assert decode_package_specs("") == []
assert decode_package_specs(" ") == []
def test_decode_json_array():
assert decode_package_specs('["25kg/桶", "槽罐车"]') == ["25kg/桶", "槽罐车"]
assert decode_package_specs('[" a ", "b", "a"]') == ["a", "b"]
def test_decode_invalid_json_as_scalar():
assert decode_package_specs("[not-json") == ["[not-json"]
assert decode_package_specs('{"a":1}') == ['{"a":1}']
def test_encode_roundtrip():
raw = encode_package_specs(["25kg/桶", "槽罐车"])
assert decode_package_specs(raw) == ["25kg/桶", "槽罐车"]
assert raw.startswith("[")
def test_encode_dedupe_preserve_order():
assert decode_package_specs(encode_package_specs(["a", " b ", "a", "c"])) == ["a", "b", "c"]
def test_encode_empty_is_empty_string():
assert encode_package_specs([]) == ""
assert encode_package_specs(None) == ""
def test_normalize_package_specs_list():
assert normalize_package_specs_list([" x ", "", "y", "x"]) == ["x", "y"]
def test_resolve_from_payload_prefers_package_specs():
assert resolve_package_specs_from_payload(
{"packageSpecs": ["25kg/桶", "槽罐车"], "packageSpec": "ignore"}
) == ["25kg/桶", "槽罐车"]
def test_resolve_from_payload_legacy_scalar():
assert resolve_package_specs_from_payload({"packageSpec": "槽罐车"}) == ["槽罐车"]
assert resolve_package_specs_from_payload({"package_spec": "吨桶"}) == ["吨桶"]