Skip to content

Commit ec96994

Browse files
committed
Add integration tests
1 parent eccaa80 commit ec96994

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

src/a2a/utils/proto_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,9 @@ def list_tasks_response(
590590
cls, result: types.ListTasksResult
591591
) -> a2a_pb2.ListTasksResponse:
592592
return a2a_pb2.ListTasksResponse(
593-
next_page_token=result.next_page_token,
593+
next_page_token=result.next_page_token or '',
594594
tasks=[cls.task(t) for t in result.tasks],
595-
total_size=result.total_size,
595+
total_size=result.total_size or 0,
596596
)
597597

598598

tests/integration/test_client_server_integration.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
GetTaskPushNotificationConfigParams,
2323
Message,
2424
MessageSendParams,
25+
ListTasksParams,
26+
ListTasksResult,
2527
Part,
2628
PushNotificationConfig,
2729
Role,
@@ -105,6 +107,12 @@ async def stream_side_effect(*args, **kwargs):
105107
lambda params, context: params
106108
)
107109
handler.on_get_task_push_notification_config.return_value = CALLBACK_CONFIG
110+
handler.on_list_tasks.return_value = ListTasksResult(
111+
tasks=[TASK_FROM_BLOCKING],
112+
next_page_token='',
113+
page_size=50,
114+
total_size=1,
115+
)
108116

109117
async def resubscribe_side_effect(*args, **kwargs):
110118
yield RESUBSCRIBE_EVENT
@@ -434,6 +442,63 @@ def channel_factory(address: str) -> Channel:
434442
await transport.close()
435443

436444

445+
@pytest.mark.asyncio
446+
@pytest.mark.parametrize(
447+
'transport_setup_fixture',
448+
[
449+
pytest.param('jsonrpc_setup', id='JSON-RPC'),
450+
pytest.param('rest_setup', id='REST'),
451+
],
452+
)
453+
async def test_http_transport_list_tasks(
454+
transport_setup_fixture: str, request
455+
) -> None:
456+
transport_setup: TransportSetup = request.getfixturevalue(
457+
transport_setup_fixture
458+
)
459+
transport = transport_setup.transport
460+
handler = transport_setup.handler
461+
462+
print(handler.on_list_tasks.call_args)
463+
464+
params = ListTasksParams()
465+
result = await transport.list_tasks(params)
466+
467+
handler.on_list_tasks.assert_awaited_once_with(params, ANY)
468+
assert result.next_page_token == ''
469+
assert result.page_size == 50
470+
assert len(result.tasks) == 1
471+
assert result.total_size == 1
472+
473+
if hasattr(transport, 'close'):
474+
await transport.close()
475+
476+
477+
@pytest.mark.asyncio
478+
async def test_grpc_transport_list_tasks(
479+
grpc_server_and_handler: tuple[str, AsyncMock],
480+
agent_card: AgentCard,
481+
) -> None:
482+
server_address, handler = grpc_server_and_handler
483+
agent_card.url = server_address
484+
485+
def channel_factory(address: str) -> Channel:
486+
return grpc.aio.insecure_channel(address)
487+
488+
channel = channel_factory(server_address)
489+
transport = GrpcTransport(channel=channel, agent_card=agent_card)
490+
491+
result = await transport.list_tasks(ListTasksParams())
492+
493+
handler.on_list_tasks.assert_awaited_once()
494+
assert result.next_page_token == ''
495+
assert result.page_size == 50
496+
assert len(result.tasks) == 1
497+
assert result.total_size == 1
498+
499+
await transport.close()
500+
501+
437502
@pytest.mark.asyncio
438503
@pytest.mark.parametrize(
439504
'transport_setup_fixture',

0 commit comments

Comments
 (0)