Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,8 @@ def write_any_value(self, key: Optional[str], value: Any) -> Any:
self.write_collection_of_primitive_values(key, value)
elif all(isinstance(x, dict) for x in value):
self.__write_collection_of_dict_values(key, value)
elif all(isinstance(x, list) for x in value):
self.write_collection_of_primitive_values(key, value)
else:
raise TypeError(
f"Encountered an unknown collection type during serialization {type(value)}\
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
from datetime import date, datetime
from uuid import UUID

Expand Down Expand Up @@ -208,6 +209,47 @@ def test_write_collection_of_primitive_values():
assert content_string == '{"businessPhones": ["+1 412 555 0109", 1]}'


@pytest.mark.parametrize("key", [None, "matrix"])
@pytest.mark.parametrize("value", [
[[1, 2, 3]],
[[], [[1], [2, 3]]],
[[1, None], [False], [{"nested": [[], [3]]}]],
])
def test_write_any_value_nested_lists(key, value):
writer = JsonSerializationWriter()
writer.write_any_value(key, value)
expected = {key: value} if key else value
assert json.loads(writer.get_serialized_content()) == expected


def test_write_additional_data_nested_lists():
writer = JsonSerializationWriter()
value = {"matrix": [[1, 2], [3, 4]]}
writer.write_additional_data_value(value)
assert json.loads(writer.get_serialized_content()) == value


def test_write_any_value_nested_lists_serializes_models(user_2):
writer = JsonSerializationWriter()
writer.write_any_value(None, [[user_2], [date(2022, 1, 27)]])
assert json.loads(writer.get_serialized_content()) == [
[{"display_name": "John Doe", "age": 32}], ["2022-01-27"]
]


def test_write_any_value_nested_lists_rejects_unsupported_values():
writer = JsonSerializationWriter()
with pytest.raises(TypeError):
writer.write_any_value(None, [[object()]])


@pytest.mark.parametrize("value", [[1, [2]], [{"value": 1}, [2]], [[1], None]])
def test_write_any_value_rejects_mixed_collection_types(value):
writer = JsonSerializationWriter()
with pytest.raises(TypeError, match="Encountered an unknown collection type"):
writer.write_any_value(None, value)


def test_write_collection_of_object_values(user_1, user_2):
json_serialization_writer = JsonSerializationWriter()
json_serialization_writer.write_collection_of_object_values("users", [user_1, user_2])
Expand Down
Loading