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 @@ -156,7 +156,7 @@ async def from_request(

elif request_activity.type == ActivityTypes.invoke:
body = await response.text()
body_json = json.loads(body)
body_json = json.loads(body) if body.strip() else None
invoke_response = InvokeResponse.model_validate({"status": response.status, "body": body_json})

elif request_activity.delivery_mode == DeliveryModes.stream:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,32 @@ async def test_from_request_with_invoke_response(self):
assert exchange.invoke_response.status == 200
assert exchange.invoke_response.body == {"result": "success"}

@pytest.mark.asyncio
@pytest.mark.parametrize("response_body", ["", " \n\t"])
async def test_from_request_with_empty_invoke_response_body(self, response_body):
"""from_request should parse empty invoke response bodies."""
activity = Activity(
type=ActivityTypes.invoke,
name="testInvoke"
)

mock_response = self._create_mock_response(
status=200,
text=response_body
)

exchange = await Exchange.from_request(
request_activity=activity,
response_or_exception=mock_response
)

assert exchange.request == activity
assert exchange.status_code == 200
assert exchange.body == response_body
assert exchange.invoke_response is not None
assert exchange.invoke_response.status == 200
assert exchange.invoke_response.body is None

@pytest.mark.asyncio
async def test_from_request_with_regular_message_response(self):
"""from_request should handle regular message response."""
Expand Down
Loading