diff --git a/packages/serialization/form/kiota_serialization_form/form_serialization_writer.py b/packages/serialization/form/kiota_serialization_form/form_serialization_writer.py index df8c02f3..3e38a660 100644 --- a/packages/serialization/form/kiota_serialization_form/form_serialization_writer.py +++ b/packages/serialization/form/kiota_serialization_form/form_serialization_writer.py @@ -35,7 +35,7 @@ def write_str_value(self, key: Optional[str], value: Optional[str]) -> None: if key and value: if len(self.writer) > 0: self.writer += "&" - self.writer += f"{quote_plus(key.strip())}={quote_plus(value.strip())}" + self.writer += f"{quote_plus(key.strip())}={quote_plus(value)}" def write_bool_value(self, key: Optional[str], value: Optional[bool]) -> None: """Writes the specified boolean value to the stream with an optional given key. diff --git a/packages/serialization/form/tests/unit/test_form_serialization_writer.py b/packages/serialization/form/tests/unit/test_form_serialization_writer.py index d438adaf..a6d33122 100644 --- a/packages/serialization/form/tests/unit/test_form_serialization_writer.py +++ b/packages/serialization/form/tests/unit/test_form_serialization_writer.py @@ -1,5 +1,5 @@ from uuid import UUID -from urllib.parse import unquote_plus +from urllib.parse import parse_qs, unquote_plus import pytest from datetime import datetime, timedelta, date, time @@ -7,6 +7,23 @@ from ..helpers import TestEntity, TestEnum +@pytest.mark.parametrize("value", [ + " padded ", "leading ", " trailing", " \t\r\n", "\u2003café\u2003", "plain", +]) +def test_write_str_value_preserves_whitespace(value): + writer = FormSerializationWriter() + writer.write_str_value("label", value) + assert parse_qs(writer.get_serialized_content().decode("utf-8"))["label"] == [value] + + +@pytest.mark.parametrize("value", [None, ""]) +def test_write_str_value_still_omits_absent_or_empty_values(value): + writer = FormSerializationWriter() + writer.write_str_value("first", "present") + writer.write_str_value("label", value) + assert writer.get_serialized_content() == b"first=present" + + @pytest.fixture def user_1(): user = TestEntity()