summaryrefslogtreecommitdiffhomepage
path: root/packages/api/tests
diff options
context:
space:
mode:
Diffstat (limited to 'packages/api/tests')
-rw-r--r--packages/api/tests/agent-manager.test.ts61
-rw-r--r--packages/api/tests/routes.test.ts21
2 files changed, 50 insertions, 32 deletions
diff --git a/packages/api/tests/agent-manager.test.ts b/packages/api/tests/agent-manager.test.ts
index 9da6a70..014022a 100644
--- a/packages/api/tests/agent-manager.test.ts
+++ b/packages/api/tests/agent-manager.test.ts
@@ -279,20 +279,17 @@ vi.mock("@dispatch/core", () => ({
}
},
TaskList: class MockTaskList {
+ private tasks: Array<{ id: string; content: string; status: string }> = [];
getTasks() {
- return [];
- }
- getTask() {
- return undefined;
- }
- addTask() {
- return { id: "task-1", title: "", description: "", status: "pending" };
- }
- updateTask() {
- return undefined;
+ return this.tasks.map((t) => ({ ...t }));
}
- removeTask() {
- return false;
+ setTasks(items: Array<{ content: string; status?: string }>) {
+ this.tasks = items.map((item, i) => ({
+ id: `task-${i + 1}`,
+ content: item.content,
+ status: item.status ?? "pending",
+ }));
+ return this.getTasks();
}
onChange(_cb: unknown) {
return () => {};
@@ -907,7 +904,7 @@ describe("AgentManager", () => {
status: "running" | "idle" | "error";
keyId: null;
modelId: null;
- taskList: { onChange: (cb: unknown) => void };
+ taskList: { onChange: (cb: unknown) => void; getTasks: () => unknown[] };
messageQueue: unknown[];
queueListeners: unknown[];
shellStore: unknown;
@@ -922,7 +919,7 @@ describe("AgentManager", () => {
status: "running",
keyId: null,
modelId: null,
- taskList: { onChange: () => {} },
+ taskList: { onChange: () => {}, getTasks: () => [] },
messageQueue: [],
queueListeners: [],
shellStore: {},
@@ -954,7 +951,7 @@ describe("AgentManager", () => {
status: "running";
keyId: null;
modelId: null;
- taskList: { onChange: (cb: unknown) => void };
+ taskList: { onChange: (cb: unknown) => void; getTasks: () => unknown[] };
messageQueue: unknown[];
queueListeners: unknown[];
shellStore: unknown;
@@ -970,7 +967,7 @@ describe("AgentManager", () => {
status: "running",
keyId: null,
modelId: null,
- taskList: { onChange: () => {} },
+ taskList: { onChange: () => {}, getTasks: () => [] },
messageQueue: [],
queueListeners: [],
shellStore: {},
@@ -996,7 +993,7 @@ describe("AgentManager", () => {
status: "running";
keyId: null;
modelId: null;
- taskList: { onChange: (cb: unknown) => void };
+ taskList: { onChange: (cb: unknown) => void; getTasks: () => unknown[] };
messageQueue: unknown[];
queueListeners: unknown[];
shellStore: unknown;
@@ -1011,7 +1008,7 @@ describe("AgentManager", () => {
status: "running",
keyId: null,
modelId: null,
- taskList: { onChange: () => {} },
+ taskList: { onChange: () => {}, getTasks: () => [] },
messageQueue: [],
queueListeners: [],
shellStore: {},
@@ -1026,6 +1023,30 @@ describe("AgentManager", () => {
expect(snap["tab-early"]).not.toHaveProperty("currentAssistantId");
});
+ it("getAllStatuses includes a tab's todo list (for reload rehydration)", () => {
+ const manager = new AgentManager();
+ // Public API: getTaskList creates+returns the tab's list. setTasks is
+ // the declarative whole-list write.
+ const list = manager.getTaskList("tab-todos");
+ list.setTasks([
+ { content: "plan", status: "completed" },
+ { content: "build", status: "in_progress" },
+ ]);
+ const snap = manager.getAllStatuses();
+ expect(snap["tab-todos"]?.tasks).toEqual([
+ { id: "task-1", content: "plan", status: "completed" },
+ { id: "task-2", content: "build", status: "in_progress" },
+ ]);
+ });
+
+ it("getAllStatuses omits tasks for a tab with an empty todo list", () => {
+ const manager = new AgentManager();
+ manager.getTaskList("tab-empty");
+ const snap = manager.getAllStatuses();
+ expect(snap["tab-empty"]).toBeDefined();
+ expect(snap["tab-empty"]).not.toHaveProperty("tasks");
+ });
+
// ─── Tab-to-tab communication ─────────────────────────────────
describe("deliverMessage", () => {
@@ -1054,7 +1075,7 @@ describe("AgentManager", () => {
status: "running",
keyId: null,
modelId: null,
- taskList: { onChange: () => {} },
+ taskList: { onChange: () => {}, getTasks: () => [] },
messageQueue: [],
queueListeners: [],
shellStore: {},
@@ -1175,7 +1196,7 @@ describe("AgentManager", () => {
status: "running",
keyId: null,
modelId: null,
- taskList: { onChange: () => {} },
+ taskList: { onChange: () => {}, getTasks: () => [] },
messageQueue: [],
queueListeners: [],
shellStore: {},
diff --git a/packages/api/tests/routes.test.ts b/packages/api/tests/routes.test.ts
index c1971b0..a8db5ce 100644
--- a/packages/api/tests/routes.test.ts
+++ b/packages/api/tests/routes.test.ts
@@ -140,20 +140,17 @@ vi.mock("@dispatch/core", () => ({
}
},
TaskList: class MockTaskList {
+ private tasks: Array<{ id: string; content: string; status: string }> = [];
getTasks() {
- return [];
- }
- getTask() {
- return undefined;
- }
- addTask() {
- return { id: "task-1", title: "", description: "", status: "pending" };
+ return this.tasks.map((t) => ({ ...t }));
}
- updateTask() {
- return undefined;
- }
- removeTask() {
- return false;
+ setTasks(items: Array<{ content: string; status?: string }>) {
+ this.tasks = items.map((item, i) => ({
+ id: `task-${i + 1}`,
+ content: item.content,
+ status: item.status ?? "pending",
+ }));
+ return this.getTasks();
}
onChange(_cb: unknown) {
return () => {};