diff --git a/requirements-dev.txt b/requirements-dev.txt index 7db96303..985fc00d 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -151,6 +151,8 @@ microsoft-kiota-authentication-azure==1.9.3 microsoft-kiota-http==1.9.3 +microsoft-kiota-serialization-json==1.9.3 + multidict==6.5.1 ; python_version >= '3.7' uritemplate==4.2.0 ; python_version >= '3.6' diff --git a/src/msgraph_core/requests/batch_request_item.py b/src/msgraph_core/requests/batch_request_item.py index d7818736..716a8a22 100644 --- a/src/msgraph_core/requests/batch_request_item.py +++ b/src/msgraph_core/requests/batch_request_item.py @@ -258,19 +258,16 @@ def serialize(self, writer: SerializationWriter) -> None: writer.write_str_value('method', self.method) writer.write_str_value('url', self.url) writer.write_collection_of_primitive_values('depends_on', self._depends_on) - writer.write_collection_of_object_values( - 'headers', - self._headers # type: ignore # need method to serialize dicts + writer.write_additional_data_value( + {'headers': self._headers} # need proper method to serialize dicts ) if self._body: json_object = json.loads(self._body) is_json_string = json_object and isinstance(json_object, dict) # /$batch API expects JSON object or base 64 encoded value for the body if is_json_string: - writer.write_collection_of_object_values( # type: ignore - # need method to serialize dicts - 'body', - json_object + writer.write_additional_data_value( + {'body': json_object} # need proper method to serialize dicts ) else: writer.write_str_value('body', base64.b64encode(self._body).decode('utf-8')) diff --git a/tests/requests/test_batch_request_item.py b/tests/requests/test_batch_request_item.py index 1f3dd971..433cce09 100644 --- a/tests/requests/test_batch_request_item.py +++ b/tests/requests/test_batch_request_item.py @@ -1,9 +1,13 @@ import pytest +import json from io import BytesIO +from unittest.mock import Mock from urllib.request import Request from kiota_abstractions.request_information import RequestInformation +from kiota_abstractions.serialization.serialization_writer import SerializationWriter from kiota_abstractions.method import Method from kiota_abstractions.headers_collection import HeadersCollection as RequestHeaders +from kiota_serialization_json.json_serialization_writer_factory import JsonSerializationWriterFactory from msgraph_core.requests.batch_request_item import BatchRequestItem base_url = "https://graph.microsoft.com/v1.0/me" @@ -11,23 +15,26 @@ @pytest.fixture def request_info(): - request_info = RequestInformation() + request_info = RequestInformation() request_info.http_method = "GET" - request_info.url = "f{base_url}/me" + request_info.url = base_url request_info.headers = RequestHeaders() - request_info.content = BytesIO(b'{"key": "value"}') + request_info.headers.add("Content-Type", "application/json") + request_info.content = b'{"key": "value"}' return request_info @pytest.fixture def batch_request_item(request_info): - return BatchRequestItem(request_information=request_info) + return BatchRequestItem(request_information=request_info, id="123") def test_initialization(batch_request_item, request_info): + assert batch_request_item.id == "123" assert batch_request_item.method == "GET" - assert batch_request_item.url == "f{base_url}/me" - assert batch_request_item.body.read() == b'{"key": "value"}' + assert batch_request_item.url == base_url + assert batch_request_item.headers == {"content-type": "application/json"} + assert batch_request_item.body == b'{"key": "value"}' def test_create_with_urllib_request(): @@ -123,3 +130,15 @@ def test_batch_request_item_method_enum(): def test_depends_on_property(batch_request_item): batch_request_item.set_depends_on(["request1", "request2"]) assert batch_request_item.depends_on == ["request1", "request2"] + + +def test_serialize_json(batch_request_item): + writer = JsonSerializationWriterFactory().get_serialization_writer('application/json') + batch_request_item.serialize(writer) + content = json.loads(writer.get_serialized_content()) + assert content["id"] == "123" + assert content["method"] == "GET" + assert content["url"] == base_url + assert content["headers"] == {"content-type": "application/json"} + assert content["body"] == {"key": "value"} +