73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { Agent } from "@/stores/session-store";
|
|
import { reconcilePreviousAgentStatuses } from "./session-status-tracking";
|
|
|
|
function createAgent(status: Agent["status"]): Agent {
|
|
return {
|
|
serverId: "server-1",
|
|
id: "agent-1",
|
|
provider: "codex",
|
|
status,
|
|
createdAt: new Date(0),
|
|
updatedAt: new Date(0),
|
|
lastUserMessageAt: null,
|
|
lastActivityAt: new Date(0),
|
|
capabilities: {
|
|
supportsStreaming: true,
|
|
supportsSessionPersistence: true,
|
|
supportsDynamicModes: true,
|
|
supportsMcpServers: true,
|
|
supportsReasoningStream: true,
|
|
supportsToolInvocations: true,
|
|
},
|
|
currentModeId: null,
|
|
availableModes: [],
|
|
pendingPermissions: [],
|
|
persistence: null,
|
|
title: "Agent",
|
|
cwd: "/tmp",
|
|
model: null,
|
|
labels: {},
|
|
projectPlacement: null,
|
|
};
|
|
}
|
|
|
|
describe("reconcilePreviousAgentStatuses", () => {
|
|
it("preserves previously seen status for existing agents", () => {
|
|
const previous = new Map([["agent-1", "running" as const]]);
|
|
const sessionAgents = new Map([["agent-1", createAgent("idle")]]);
|
|
|
|
const result = reconcilePreviousAgentStatuses(previous, sessionAgents);
|
|
|
|
expect(result).toEqual(new Map([["agent-1", "running"]]));
|
|
});
|
|
|
|
it("seeds newly seen agents from the current snapshot", () => {
|
|
const sessionAgents = new Map([["agent-1", createAgent("idle")]]);
|
|
|
|
const result = reconcilePreviousAgentStatuses(new Map(), sessionAgents);
|
|
|
|
expect(result).toEqual(new Map([["agent-1", "idle"]]));
|
|
});
|
|
|
|
it("removes agents that are no longer present", () => {
|
|
const previous = new Map([
|
|
["agent-1", "running" as const],
|
|
["agent-2", "idle" as const],
|
|
]);
|
|
const sessionAgents = new Map([["agent-1", createAgent("idle")]]);
|
|
|
|
const result = reconcilePreviousAgentStatuses(previous, sessionAgents);
|
|
|
|
expect(result).toEqual(new Map([["agent-1", "running"]]));
|
|
});
|
|
|
|
it("clears all tracked statuses when the session is unavailable", () => {
|
|
const previous = new Map([["agent-1", "running" as const]]);
|
|
|
|
const result = reconcilePreviousAgentStatuses(previous, undefined);
|
|
|
|
expect(result).toEqual(new Map());
|
|
});
|
|
});
|