Skip to content

Commit 4dbb24e

Browse files
committed
fix(tests): add url attr to AgentCard mocks in test_card_resolver
Mock(spec=AgentCard) with Pydantic v2 does not expose field attributes. Our SSRF patch accesses agent_card.url after model_validate(), add url and additional_interfaces to all Mock(spec=AgentCard) instances so the attribute access succeeds.
1 parent ac279fe commit 4dbb24e

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

tests/client/test_card_resolver.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ async def test_get_agent_card_success_default_path(
116116
mock_httpx_client.get.return_value = mock_response
117117

118118
with patch.object(
119-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
119+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
120120
) as mock_validate:
121121
result = await resolver.get_agent_card()
122122
mock_httpx_client.get.assert_called_once_with(
@@ -141,7 +141,7 @@ async def test_get_agent_card_success_custom_path(
141141
mock_response.json.return_value = valid_agent_card_data
142142
mock_httpx_client.get.return_value = mock_response
143143
with patch.object(
144-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
144+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
145145
):
146146
await resolver.get_agent_card(relative_card_path=custom_path)
147147

@@ -163,7 +163,7 @@ async def test_get_agent_card_strips_leading_slash_from_relative_path(
163163
mock_response.json.return_value = valid_agent_card_data
164164
mock_httpx_client.get.return_value = mock_response
165165
with patch.object(
166-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
166+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
167167
):
168168
await resolver.get_agent_card(relative_card_path=custom_path)
169169

@@ -188,7 +188,7 @@ async def test_get_agent_card_with_http_kwargs(
188188
'headers': {'Authorization': 'Bearer token'},
189189
}
190190
with patch.object(
191-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
191+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
192192
):
193193
await resolver.get_agent_card(http_kwargs=http_kwargs)
194194
mock_httpx_client.get.assert_called_once_with(
@@ -210,7 +210,7 @@ async def test_get_agent_card_root_path(
210210
mock_response.json.return_value = valid_agent_card_data
211211
mock_httpx_client.get.return_value = mock_response
212212
with patch.object(
213-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
213+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
214214
):
215215
await resolver.get_agent_card(relative_card_path='/')
216216
mock_httpx_client.get.assert_called_once_with(f'{base_url}/')
@@ -297,7 +297,7 @@ async def test_get_agent_card_logs_success( # noqa: PLR0913
297297
mock_httpx_client.get.return_value = mock_response
298298
with (
299299
patch.object(
300-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
300+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
301301
),
302302
caplog.at_level(logging.INFO),
303303
):
@@ -321,7 +321,7 @@ async def test_get_agent_card_none_relative_path(
321321
mock_httpx_client.get.return_value = mock_response
322322

323323
with patch.object(
324-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
324+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
325325
):
326326
await resolver.get_agent_card(relative_card_path=None)
327327
mock_httpx_client.get.assert_called_once_with(
@@ -342,7 +342,7 @@ async def test_get_agent_card_empty_string_relative_path(
342342
mock_httpx_client.get.return_value = mock_response
343343

344344
with patch.object(
345-
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard)
345+
AgentCard, 'model_validate', return_value=Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
346346
):
347347
await resolver.get_agent_card(relative_card_path='')
348348

@@ -373,7 +373,7 @@ async def test_get_agent_card_returns_agent_card_instance(
373373
"""Test that get_agent_card returns an AgentCard instance."""
374374
mock_response.json.return_value = valid_agent_card_data
375375
mock_httpx_client.get.return_value = mock_response
376-
mock_agent_card = Mock(spec=AgentCard)
376+
mock_agent_card = Mock(spec=AgentCard, url='https://example.com/a2a', additional_interfaces=None)
377377

378378
with patch.object(
379379
AgentCard, 'model_validate', return_value=mock_agent_card

0 commit comments

Comments
 (0)