diff --git a/client/transport/jsonrpc/src/test/java/org/a2aproject/sdk/client/transport/jsonrpc/JSONRPCTransportTest.java b/client/transport/jsonrpc/src/test/java/org/a2aproject/sdk/client/transport/jsonrpc/JSONRPCTransportTest.java index a954465db..b52eb0e9f 100644 --- a/client/transport/jsonrpc/src/test/java/org/a2aproject/sdk/client/transport/jsonrpc/JSONRPCTransportTest.java +++ b/client/transport/jsonrpc/src/test/java/org/a2aproject/sdk/client/transport/jsonrpc/JSONRPCTransportTest.java @@ -37,6 +37,10 @@ import java.util.List; import java.util.Map; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import org.a2aproject.sdk.jsonrpc.common.wrappers.ListTasksResult; import org.a2aproject.sdk.spec.A2AClientException; import org.a2aproject.sdk.spec.A2AClientHTTPError; import org.a2aproject.sdk.spec.AgentCard; @@ -54,6 +58,7 @@ import org.a2aproject.sdk.spec.FileWithUri; import org.a2aproject.sdk.spec.GetExtendedAgentCardParams; import org.a2aproject.sdk.spec.GetTaskPushNotificationConfigParams; +import org.a2aproject.sdk.spec.ListTasksParams; import org.a2aproject.sdk.spec.Message; import org.a2aproject.sdk.spec.MessageSendConfiguration; import org.a2aproject.sdk.spec.MessageSendParams; @@ -88,6 +93,50 @@ public void tearDown() { server.stop(); } + @Test + public void testListTasksWithDefaultBuilder() throws Exception { + JsonObject params = listTasksAndGetRequestParams(ListTasksParams.builder().build()); + + assertEquals("", params.get("tenant").getAsString()); + } + + @Test + public void testListTasksWithDefaultConstructor() throws Exception { + JsonObject params = listTasksAndGetRequestParams(new ListTasksParams()); + + assertEquals("", params.get("tenant").getAsString()); + } + + @Test + public void testListTasksWithTenant() throws Exception { + JsonObject params = listTasksAndGetRequestParams(ListTasksParams.builder().tenant("tenant-123").build()); + + assertEquals("tenant-123", params.get("tenant").getAsString()); + } + + private JsonObject listTasksAndGetRequestParams(ListTasksParams params) throws Exception { + String body = """ + { + "jsonrpc": "2.0", + "id": "list-tasks", + "result": {"tasks": [], "totalSize": 0, "pageSize": 0} + } + """; + server.when(request().withMethod("POST").withPath("/")) + .respond(response().withStatusCode(200).withBody(body)); + + ListTasksResult result = new JSONRPCTransport("http://localhost:4001").listTasks(params, null); + + assertTrue(result.tasks().isEmpty()); + assertEquals(0, result.totalSize()); + assertEquals(0, result.pageSize()); + var requests = server.retrieveRecordedRequests(request().withMethod("POST").withPath("/")); + assertEquals(1, requests.length); + JsonObject json = JsonParser.parseString(requests[0].getBodyAsString()).getAsJsonObject(); + assertEquals("ListTasks", json.get("method").getAsString()); + return json.getAsJsonObject("params"); + } + @Test public void testA2AClientSendMessage() throws Exception { this.server.when( diff --git a/spec-grpc/src/main/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapper.java b/spec-grpc/src/main/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapper.java index f9ffb8557..7170804cc 100644 --- a/spec-grpc/src/main/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapper.java +++ b/spec-grpc/src/main/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapper.java @@ -28,6 +28,7 @@ public interface ListTasksParamsMapper { @Mapping(target = "historyLength", source = "historyLength", conditionExpression = "java(params.historyLength() != null)") @Mapping(target = "statusTimestampAfter", source = "statusTimestampAfter", qualifiedByName = "instantToProtoTimestamp") @Mapping(target = "includeArtifacts", source = "includeArtifacts", conditionExpression = "java(params.includeArtifacts() != null)") + @Mapping(target = "tenant", source = "tenant", conditionExpression = "java(params.tenant() != null)") ListTasksRequest toProto(org.a2aproject.sdk.spec.ListTasksParams params); /** @@ -45,5 +46,6 @@ public interface ListTasksParamsMapper { @Mapping(target = "historyLength", expression = "java(request.hasHistoryLength() ? request.getHistoryLength() : null)") @Mapping(target = "statusTimestampAfter", source = "statusTimestampAfter", qualifiedByName = "protoTimestampToInstant") @Mapping(target = "includeArtifacts", source = "includeArtifacts", qualifiedByName = "falseToNull") + @Mapping(target = "tenant", source = "tenant", qualifiedByName = "emptyToNull") org.a2aproject.sdk.spec.ListTasksParams fromProto(ListTasksRequest request); } diff --git a/spec-grpc/src/test/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapperTest.java b/spec-grpc/src/test/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapperTest.java new file mode 100644 index 000000000..2139a6d4a --- /dev/null +++ b/spec-grpc/src/test/java/org/a2aproject/sdk/grpc/mapper/ListTasksParamsMapperTest.java @@ -0,0 +1,56 @@ +package org.a2aproject.sdk.grpc.mapper; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.a2aproject.sdk.grpc.ListTasksRequest; +import org.a2aproject.sdk.spec.ListTasksParams; +import org.junit.jupiter.api.Test; + +public class ListTasksParamsMapperTest { + + @Test + void toProtoWithDefaultBuilder() { + ListTasksRequest request = ListTasksParamsMapper.INSTANCE.toProto(ListTasksParams.builder().build()); + + assertEquals("", request.getTenant()); + } + + @Test + void toProtoWithDefaultConstructor() { + ListTasksRequest request = ListTasksParamsMapper.INSTANCE.toProto(new ListTasksParams()); + + assertEquals("", request.getTenant()); + } + + @Test + void toProtoWithTenant() { + ListTasksRequest request = ListTasksParamsMapper.INSTANCE.toProto( + ListTasksParams.builder().tenant("tenant-123").build()); + + assertEquals("tenant-123", request.getTenant()); + } + + @Test + void fromProtoWithoutTenant() { + ListTasksParams params = ListTasksParamsMapper.INSTANCE.fromProto(ListTasksRequest.newBuilder().build()); + + assertNull(params.tenant()); + } + + @Test + void fromProtoWithTenant() { + ListTasksParams params = ListTasksParamsMapper.INSTANCE.fromProto( + ListTasksRequest.newBuilder().setTenant("tenant-123").build()); + + assertEquals("tenant-123", params.tenant()); + } + + @Test + void nullTenantRoundTrip() { + ListTasksRequest request = ListTasksParamsMapper.INSTANCE.toProto(ListTasksParams.builder().build()); + ListTasksParams params = ListTasksParamsMapper.INSTANCE.fromProto(request); + + assertNull(params.tenant()); + } +}