diff --git a/client/base/src/main/java/org/a2aproject/sdk/client/ClientTaskManager.java b/client/base/src/main/java/org/a2aproject/sdk/client/ClientTaskManager.java index b606ceed1..512197291 100644 --- a/client/base/src/main/java/org/a2aproject/sdk/client/ClientTaskManager.java +++ b/client/base/src/main/java/org/a2aproject/sdk/client/ClientTaskManager.java @@ -67,12 +67,12 @@ synchronized Task saveTaskEvent(TaskStatusUpdateEvent taskStatusUpdateEvent) thr } Task.Builder taskBuilder = Task.builder(task); - if (taskStatusUpdateEvent.status().message() != null) { + if (task.status().message() != null) { if (task.history() == null) { - taskBuilder.history(taskStatusUpdateEvent.status().message()); + taskBuilder.history(task.status().message()); } else { List history = new ArrayList<>(task.history()); - history.add(taskStatusUpdateEvent.status().message()); + history.add(task.status().message()); taskBuilder.history(history); } } diff --git a/client/base/src/test/java/org/a2aproject/sdk/client/ClientTaskManagerTest.java b/client/base/src/test/java/org/a2aproject/sdk/client/ClientTaskManagerTest.java index 82ddb3aaa..4a22399d7 100644 --- a/client/base/src/test/java/org/a2aproject/sdk/client/ClientTaskManagerTest.java +++ b/client/base/src/test/java/org/a2aproject/sdk/client/ClientTaskManagerTest.java @@ -89,8 +89,8 @@ public void testSaveTaskEventWithStatusUpdate() throws Exception { assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask.status().state()); assertNotNull(updatedTask.history()); - assertEquals(1, updatedTask.history().size()); - assertEquals(sampleMessage, updatedTask.history().get(0)); + assertEquals(0, updatedTask.history().size()); + assertEquals(sampleMessage, updatedTask.status().message()); } @Test @@ -251,7 +251,8 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception { Task updatedTask1 = taskManager.saveTaskEvent(statusUpdate1); assertEquals(TaskState.TASK_STATE_WORKING, updatedTask1.status().state()); - assertEquals(1, updatedTask1.history().size()); + assertEquals(0, updatedTask1.history().size()); + assertEquals(sampleMessage, updatedTask1.status().message()); // Second status update Message secondMessage = Message.builder() @@ -268,7 +269,9 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception { Task updatedTask2 = taskManager.saveTaskEvent(statusUpdate2); assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask2.status().state()); - assertEquals(2, updatedTask2.history().size()); + assertEquals(1, updatedTask2.history().size()); + assertEquals(sampleMessage, updatedTask2.history().get(0)); + assertEquals(secondMessage, updatedTask2.status().message()); } @Test diff --git a/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3.java b/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3.java index 5d240a63c..e02c2d898 100644 --- a/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3.java +++ b/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3.java @@ -67,9 +67,9 @@ Task_v0_3 saveTaskEvent(TaskStatusUpdateEvent_v0_3 taskStatusUpdateEvent) throws } Task_v0_3.Builder taskBuilder = new Task_v0_3.Builder(task); - if (taskStatusUpdateEvent.status().message() != null) { + if (task.status().message() != null) { List history = new ArrayList<>(task.history()); - history.add(taskStatusUpdateEvent.status().message()); + history.add(task.status().message()); taskBuilder.history(history); } if (taskStatusUpdateEvent.metadata() != null) { diff --git a/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3_Test.java b/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3_Test.java new file mode 100644 index 000000000..ec6f6eeaf --- /dev/null +++ b/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3_Test.java @@ -0,0 +1,51 @@ +package org.a2aproject.sdk.compat03.client; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.a2aproject.sdk.compat03.spec.Message_v0_3; +import org.a2aproject.sdk.compat03.spec.TaskState_v0_3; +import org.a2aproject.sdk.compat03.spec.TaskStatusUpdateEvent_v0_3; +import org.a2aproject.sdk.compat03.spec.TaskStatus_v0_3; +import org.a2aproject.sdk.compat03.spec.Task_v0_3; +import org.a2aproject.sdk.compat03.spec.TextPart_v0_3; +import org.junit.jupiter.api.Test; + +public class ClientTaskManager_v0_3_Test { + + @Test + public void testStatusMessagesMoveToHistoryWhenSuperseded() throws Exception { + ClientTaskManager_v0_3 taskManager = new ClientTaskManager_v0_3(); + Message_v0_3 workingMessage = new Message_v0_3.Builder() + .messageId("working-message") + .role(Message_v0_3.Role.AGENT) + .parts(new TextPart_v0_3("working")) + .build(); + Message_v0_3 completedMessage = new Message_v0_3.Builder() + .messageId("completed-message") + .role(Message_v0_3.Role.AGENT) + .parts(new TextPart_v0_3("completed")) + .build(); + + Task_v0_3 workingTask = taskManager.saveTaskEvent(new TaskStatusUpdateEvent_v0_3.Builder() + .taskId("task-123") + .contextId("context-123") + .status(new TaskStatus_v0_3(TaskState_v0_3.WORKING, workingMessage, null)) + .build()); + + assertTrue(workingTask.history().isEmpty()); + assertEquals(workingMessage, workingTask.status().message()); + + Task_v0_3 completedTask = taskManager.saveTaskEvent(new TaskStatusUpdateEvent_v0_3.Builder() + .taskId("task-123") + .contextId("context-123") + .status(new TaskStatus_v0_3(TaskState_v0_3.COMPLETED, completedMessage, null)) + .isFinal(true) + .build()); + + assertEquals(List.of(workingMessage), completedTask.history()); + assertEquals(completedMessage, completedTask.status().message()); + } +}