Skip to content

Commit 2d0befb

Browse files
committed
fix: use MagicMock for async context manager in tests
1 parent 887ed85 commit 2d0befb

1 file changed

Lines changed: 6 additions & 13 deletions

File tree

tests/client/test_non2xx_status.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,45 +38,40 @@ def _make_transport(self) -> StreamableHTTPTransport:
3838
async def test_401_produces_error_response(self):
3939
"""401 Unauthorized should produce a JSONRPCError with the request's ID."""
4040
transport = self._make_transport()
41-
4241
ctx = self._make_request_context()
4342

44-
# Mock the response to return 401
4543
mock_response = MagicMock()
4644
mock_response.status_code = 401
4745
mock_response.headers = {"content-type": "text/plain"}
4846
mock_response.aread = AsyncMock(return_value=b"Unauthorized")
4947

50-
# Mock the context manager for stream()
51-
mock_stream_ctx = AsyncMock()
48+
# Use async context manager mock
49+
mock_stream_ctx = MagicMock()
5250
mock_stream_ctx.__aenter__ = AsyncMock(return_value=mock_response)
5351
mock_stream_ctx.__aexit__ = AsyncMock(return_value=False)
5452
ctx.client.stream.return_value = mock_stream_ctx
5553

56-
# Call _handle_post_request
5754
await transport._handle_post_request(ctx)
5855

59-
# Verify that an error was sent to the read_stream_writer
6056
ctx.read_stream_writer.send.assert_called_once()
6157
sent_message = ctx.read_stream_writer.send.call_args[0][0]
6258
assert isinstance(sent_message, SessionMessage)
6359
assert isinstance(sent_message.message, JSONRPCError)
6460
assert sent_message.message.id == "test-123"
65-
assert sent_message.message.error.code == -32603 # INTERNAL_ERROR
61+
assert sent_message.message.error.code == -32603
6662

6763
@pytest.mark.anyio
6864
async def test_403_produces_error_response(self):
6965
"""403 Forbidden should produce a JSONRPCError with the request's ID."""
7066
transport = self._make_transport()
71-
7267
ctx = self._make_request_context()
7368

7469
mock_response = MagicMock()
7570
mock_response.status_code = 403
7671
mock_response.headers = {"content-type": "text/plain"}
7772
mock_response.aread = AsyncMock(return_value=b"Forbidden")
7873

79-
mock_stream_ctx = AsyncMock()
74+
mock_stream_ctx = MagicMock()
8075
mock_stream_ctx.__aenter__ = AsyncMock(return_value=mock_response)
8176
mock_stream_ctx.__aexit__ = AsyncMock(return_value=False)
8277
ctx.client.stream.return_value = mock_stream_ctx
@@ -92,15 +87,14 @@ async def test_403_produces_error_response(self):
9287
async def test_500_produces_error_response(self):
9388
"""500 Internal Server Error should produce a JSONRPCError."""
9489
transport = self._make_transport()
95-
9690
ctx = self._make_request_context()
9791

9892
mock_response = MagicMock()
9993
mock_response.status_code = 500
10094
mock_response.headers = {"content-type": "text/plain"}
10195
mock_response.aread = AsyncMock(return_value=b"Internal Server Error")
10296

103-
mock_stream_ctx = AsyncMock()
97+
mock_stream_ctx = MagicMock()
10498
mock_stream_ctx.__aenter__ = AsyncMock(return_value=mock_response)
10599
mock_stream_ctx.__aexit__ = AsyncMock(return_value=False)
106100
ctx.client.stream.return_value = mock_stream_ctx
@@ -115,7 +109,6 @@ async def test_500_produces_error_response(self):
115109
async def test_json_error_body_is_parsed(self):
116110
"""When server returns JSON-RPC error body, it should be used directly."""
117111
transport = self._make_transport()
118-
119112
ctx = self._make_request_context()
120113

121114
error_body = json.dumps(
@@ -127,7 +120,7 @@ async def test_json_error_body_is_parsed(self):
127120
mock_response.headers = {"content-type": "application/json"}
128121
mock_response.aread = AsyncMock(return_value=error_body)
129122

130-
mock_stream_ctx = AsyncMock()
123+
mock_stream_ctx = MagicMock()
131124
mock_stream_ctx.__aenter__ = AsyncMock(return_value=mock_response)
132125
mock_stream_ctx.__aexit__ = AsyncMock(return_value=False)
133126
ctx.client.stream.return_value = mock_stream_ctx

0 commit comments

Comments
 (0)