41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
|
|
"""Unit tests for _parse_custom_fields — no DB or HTTP needed."""
|
||
|
|
import json
|
||
|
|
|
||
|
|
from web.routes.evotor_webhooks import _parse_custom_fields
|
||
|
|
|
||
|
|
|
||
|
|
def test_none_returns_empty():
|
||
|
|
assert _parse_custom_fields(None) == {}
|
||
|
|
|
||
|
|
|
||
|
|
def test_dict_passthrough():
|
||
|
|
d = {"email": "a@b.com", "phone": "+79001234567"}
|
||
|
|
assert _parse_custom_fields(d) == d
|
||
|
|
|
||
|
|
|
||
|
|
def test_json_string_parsed():
|
||
|
|
raw = json.dumps({"email": "a@b.com", "firstName": "Иван"})
|
||
|
|
result = _parse_custom_fields(raw)
|
||
|
|
assert result["email"] == "a@b.com"
|
||
|
|
assert result["firstName"] == "Иван"
|
||
|
|
|
||
|
|
|
||
|
|
def test_plain_string_returns_empty():
|
||
|
|
# A plain non-JSON string cannot be parsed into fields
|
||
|
|
assert _parse_custom_fields("just some text") == {}
|
||
|
|
|
||
|
|
|
||
|
|
def test_json_array_returns_empty():
|
||
|
|
# A JSON array is not a dict — treat as unparseable
|
||
|
|
assert _parse_custom_fields("[1, 2, 3]") == {}
|
||
|
|
|
||
|
|
|
||
|
|
def test_empty_string_returns_empty():
|
||
|
|
assert _parse_custom_fields("") == {}
|
||
|
|
|
||
|
|
|
||
|
|
def test_nested_values_preserved():
|
||
|
|
raw = {"email": "x@y.com", "meta": {"key": "val"}}
|
||
|
|
result = _parse_custom_fields(raw)
|
||
|
|
assert result["meta"]["key"] == "val"
|