Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
2 changes: 2 additions & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.0 ; python_version >= '3.7'

uritemplate==4.2.0 ; python_version >= '3.6'
Expand Down
11 changes: 4 additions & 7 deletions src/msgraph_core/requests/batch_request_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment thread
baywet marked this conversation as resolved.
Outdated
)
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
Comment thread
baywet marked this conversation as resolved.
Outdated
)
else:
writer.write_str_value('body', base64.b64encode(self._body).decode('utf-8'))
31 changes: 25 additions & 6 deletions tests/requests/test_batch_request_item.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,40 @@
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"


@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():
Expand Down Expand Up @@ -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"}