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 @@ -137,8 +137,9 @@ def get_collection_of_primitive_values(self, primitive_type: type[T]) -> Optiona
converter = converters.get(primitive_type)
if converter is None:
raise Exception(f"Encountered an unknown type during deserialization {primitive_type}")
values = self._raw_value.split(',')
return [
converter(unquote_plus(item)) for item in self._node.split(',') # type: ignore[misc]
converter(unquote_plus(item)) for item in values # type: ignore[misc]
]

def get_collection_of_object_values(self, factory: ParsableFactory[U]) -> Optional[list[U]]:
Expand All @@ -149,7 +150,7 @@ def get_collection_of_enum_values(self, enum_class: K) -> Optional[list[K]]:
Returns:
list[K]: The collection of enum values
"""
values = self._node.split(',')
values = self._raw_value.split(',')
if values:
return list(
map(
Expand Down
46 changes: 45 additions & 1 deletion packages/serialization/form/tests/unit/test_form_parse_node.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import base64
from datetime import date, datetime, time, timedelta
from enum import Enum
from uuid import UUID

import pytest

from kiota_serialization_form.form_parse_node import FormParseNode
from kiota_serialization_form.form_parse_node_factory import FormParseNodeFactory
from kiota_serialization_form.form_serialization_writer import FormSerializationWriter
from ..helpers import TestEntity, TestEnum

TEST_USER_FORM: str = (
Expand All @@ -29,6 +32,47 @@
"id=48d31887-5fad-4d73-a9f5-3c356e68a038"
)


@pytest.mark.parametrize("encoded, expected", [
("a%2Bb", ["a+b"]),
("%252F", ["%2F"]),
("a%2Cb", ["a,b"]),
("a,b", ["a", "b"]),
("Megan+Bowen", ["Megan Bowen"]),
("caf%C3%A9", ["café"]),
])
def test_primitive_collection_decodes_each_encoded_value_once(encoded, expected):
assert FormParseNode(encoded).get_collection_of_primitive_values(str) == expected


def test_primitive_collection_round_trips_repeated_encoded_fields():
values = ["a+b", "%2F", "a,b", "plain", "Megan Bowen", "café", "a+b"]
writer = FormSerializationWriter()
writer.write_collection_of_primitive_values("tags", values)
root = FormParseNodeFactory().get_root_parse_node(
"application/x-www-form-urlencoded", writer.get_serialized_content()
)
node = root.get_child_node("tags")
assert node is not None
assert node.get_collection_of_primitive_values(str) == values


def test_enum_collection_round_trips_encoded_values():
class EncodedEnum(Enum):
Plus = "a+b"
Percent = "%2F"
Comma = "a,b"

values = [EncodedEnum.Plus, EncodedEnum.Percent, EncodedEnum.Comma, EncodedEnum.Plus]
writer = FormSerializationWriter()
writer.write_collection_of_enum_values("tags", values)
root = FormParseNodeFactory().get_root_parse_node(
"application/x-www-form-urlencoded", writer.get_serialized_content()
)
node = root.get_child_node("tags")
assert node is not None
assert node.get_collection_of_enum_values(EncodedEnum) == values

def test_get_str_value():
parse_node = FormParseNode("Megan+Bowen")
result = parse_node.get_str_value()
Expand Down Expand Up @@ -186,4 +230,4 @@ def test_get_object_value_keeps_out_of_range_duration_as_string(value):
def returns_default_if_child_node_does_not_exist():
parse_node = FormParseNode(TEST_USER_FORM)
result = parse_node.get_child_node("nonExistent")
assert result == None
assert result == None
Loading