refactor: share agent wait dedupe test entries

This commit is contained in:
Peter Steinberger 2026-03-13 17:32:44 +00:00
parent db9c755045
commit 31c8bb9167
1 changed files with 94 additions and 104 deletions

View File

@ -7,6 +7,25 @@ import {
} from "./agent-wait-dedupe.js"; } from "./agent-wait-dedupe.js";
describe("agent wait dedupe helper", () => { describe("agent wait dedupe helper", () => {
function setRunEntry(params: {
dedupe: Map<unknown, unknown>;
kind: "agent" | "chat";
runId: string;
ts?: number;
ok?: boolean;
payload: Record<string, unknown>;
}) {
setGatewayDedupeEntry({
dedupe: params.dedupe,
key: `${params.kind}:${params.runId}`,
entry: {
ts: params.ts ?? Date.now(),
ok: params.ok ?? true,
payload: params.payload,
},
});
}
beforeEach(() => { beforeEach(() => {
__testing.resetWaiters(); __testing.resetWaiters();
vi.useFakeTimers(); vi.useFakeTimers();
@ -29,18 +48,15 @@ describe("agent wait dedupe helper", () => {
await Promise.resolve(); await Promise.resolve();
expect(__testing.getWaiterCount(runId)).toBe(1); expect(__testing.getWaiterCount(runId)).toBe(1);
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: Date.now(), payload: {
ok: true, runId,
payload: { status: "ok",
runId, startedAt: 100,
status: "ok", endedAt: 200,
startedAt: 100,
endedAt: 200,
},
}, },
}); });
@ -56,28 +72,22 @@ describe("agent wait dedupe helper", () => {
it("keeps stale chat dedupe blocked while agent dedupe is in-flight", async () => { it("keeps stale chat dedupe blocked while agent dedupe is in-flight", async () => {
const dedupe = new Map(); const dedupe = new Map();
const runId = "run-stale-chat"; const runId = "run-stale-chat";
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: Date.now(), payload: {
ok: true, runId,
payload: { status: "ok",
runId,
status: "ok",
},
}, },
}); });
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `agent:${runId}`, kind: "agent",
entry: { runId,
ts: Date.now(), payload: {
ok: true, runId,
payload: { status: "accepted",
runId,
status: "accepted",
},
}, },
}); });
@ -100,30 +110,26 @@ describe("agent wait dedupe helper", () => {
it("uses newer terminal chat snapshot when agent entry is non-terminal", () => { it("uses newer terminal chat snapshot when agent entry is non-terminal", () => {
const dedupe = new Map(); const dedupe = new Map();
const runId = "run-nonterminal-agent-with-newer-chat"; const runId = "run-nonterminal-agent-with-newer-chat";
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `agent:${runId}`, kind: "agent",
entry: { runId,
ts: 100, ts: 100,
ok: true, payload: {
payload: { runId,
runId, status: "accepted",
status: "accepted",
},
}, },
}); });
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: 200, ts: 200,
ok: true, payload: {
payload: { runId,
runId, status: "ok",
status: "ok", startedAt: 1,
startedAt: 1, endedAt: 2,
endedAt: 2,
},
}, },
}); });
@ -143,16 +149,13 @@ describe("agent wait dedupe helper", () => {
it("ignores stale agent snapshots when waiting for an active chat run", async () => { it("ignores stale agent snapshots when waiting for an active chat run", async () => {
const dedupe = new Map(); const dedupe = new Map();
const runId = "run-chat-active-ignore-agent"; const runId = "run-chat-active-ignore-agent";
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `agent:${runId}`, kind: "agent",
entry: { runId,
ts: Date.now(), payload: {
ok: true, runId,
payload: { status: "ok",
runId,
status: "ok",
},
}, },
}); });
@ -173,18 +176,15 @@ describe("agent wait dedupe helper", () => {
await Promise.resolve(); await Promise.resolve();
expect(__testing.getWaiterCount(runId)).toBe(1); expect(__testing.getWaiterCount(runId)).toBe(1);
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: Date.now(), payload: {
ok: true, runId,
payload: { status: "ok",
runId, startedAt: 123,
status: "ok", endedAt: 456,
startedAt: 123,
endedAt: 456,
},
}, },
}); });
@ -200,23 +200,20 @@ describe("agent wait dedupe helper", () => {
const runId = "run-collision"; const runId = "run-collision";
const dedupe = new Map(); const dedupe = new Map();
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `agent:${runId}`, kind: "agent",
entry: { runId,
ts: 100, ts: 100,
ok: true, payload: { runId, status: "ok", startedAt: 10, endedAt: 20 },
payload: { runId, status: "ok", startedAt: 10, endedAt: 20 },
},
}); });
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: 200, ts: 200,
ok: false, ok: false,
payload: { runId, status: "error", startedAt: 30, endedAt: 40, error: "chat failed" }, payload: { runId, status: "error", startedAt: 30, endedAt: 40, error: "chat failed" },
},
}); });
expect( expect(
@ -232,23 +229,19 @@ describe("agent wait dedupe helper", () => {
}); });
const dedupeReverse = new Map(); const dedupeReverse = new Map();
setGatewayDedupeEntry({ setRunEntry({
dedupe: dedupeReverse, dedupe: dedupeReverse,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: 100, ts: 100,
ok: true, payload: { runId, status: "ok", startedAt: 1, endedAt: 2 },
payload: { runId, status: "ok", startedAt: 1, endedAt: 2 },
},
}); });
setGatewayDedupeEntry({ setRunEntry({
dedupe: dedupeReverse, dedupe: dedupeReverse,
key: `agent:${runId}`, kind: "agent",
entry: { runId,
ts: 200, ts: 200,
ok: true, payload: { runId, status: "timeout", startedAt: 3, endedAt: 4, error: "still running" },
payload: { runId, status: "timeout", startedAt: 3, endedAt: 4, error: "still running" },
},
}); });
expect( expect(
@ -281,14 +274,11 @@ describe("agent wait dedupe helper", () => {
await Promise.resolve(); await Promise.resolve();
expect(__testing.getWaiterCount(runId)).toBe(2); expect(__testing.getWaiterCount(runId)).toBe(2);
setGatewayDedupeEntry({ setRunEntry({
dedupe, dedupe,
key: `chat:${runId}`, kind: "chat",
entry: { runId,
ts: Date.now(), payload: { runId, status: "ok" },
ok: true,
payload: { runId, status: "ok" },
},
}); });
await expect(first).resolves.toEqual( await expect(first).resolves.toEqual(