test_crm_package_spec.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. """Tests for contract product package_spec JSON codec."""
  2. from app.utils.crm_package_spec import (
  3. decode_package_specs,
  4. encode_package_specs,
  5. normalize_package_specs_list,
  6. resolve_package_specs_from_payload,
  7. )
  8. def test_decode_legacy_scalar():
  9. assert decode_package_specs("25kg/桶") == ["25kg/桶"]
  10. assert decode_package_specs(" 槽罐车 ") == ["槽罐车"]
  11. def test_decode_empty():
  12. assert decode_package_specs(None) == []
  13. assert decode_package_specs("") == []
  14. assert decode_package_specs(" ") == []
  15. def test_decode_json_array():
  16. assert decode_package_specs('["25kg/桶", "槽罐车"]') == ["25kg/桶", "槽罐车"]
  17. assert decode_package_specs('[" a ", "b", "a"]') == ["a", "b"]
  18. def test_decode_invalid_json_as_scalar():
  19. assert decode_package_specs("[not-json") == ["[not-json"]
  20. assert decode_package_specs('{"a":1}') == ['{"a":1}']
  21. def test_encode_roundtrip():
  22. raw = encode_package_specs(["25kg/桶", "槽罐车"])
  23. assert decode_package_specs(raw) == ["25kg/桶", "槽罐车"]
  24. assert raw.startswith("[")
  25. def test_encode_dedupe_preserve_order():
  26. assert decode_package_specs(encode_package_specs(["a", " b ", "a", "c"])) == ["a", "b", "c"]
  27. def test_encode_empty_is_empty_string():
  28. assert encode_package_specs([]) == ""
  29. assert encode_package_specs(None) == ""
  30. def test_normalize_package_specs_list():
  31. assert normalize_package_specs_list([" x ", "", "y", "x"]) == ["x", "y"]
  32. def test_resolve_from_payload_prefers_package_specs():
  33. assert resolve_package_specs_from_payload(
  34. {"packageSpecs": ["25kg/桶", "槽罐车"], "packageSpec": "ignore"}
  35. ) == ["25kg/桶", "槽罐车"]
  36. def test_resolve_from_payload_legacy_scalar():
  37. assert resolve_package_specs_from_payload({"packageSpec": "槽罐车"}) == ["槽罐车"]
  38. assert resolve_package_specs_from_payload({"package_spec": "吨桶"}) == ["吨桶"]