| import { describe, expect, it } from "vitest"; |
| import { castAgentMessage } from "../../test-helpers/agent-message-fixtures.js"; |
| import { |
| selectCompactionTimeoutSnapshot, |
| shouldFlagCompactionTimeout, |
| } from "./compaction-timeout.js"; |
|
|
| describe("compaction-timeout helpers", () => { |
| it("flags compaction timeout consistently for internal and external timeout sources", () => { |
| const internalTimer = shouldFlagCompactionTimeout({ |
| isTimeout: true, |
| isCompactionPendingOrRetrying: true, |
| isCompactionInFlight: false, |
| }); |
| const externalAbort = shouldFlagCompactionTimeout({ |
| isTimeout: true, |
| isCompactionPendingOrRetrying: true, |
| isCompactionInFlight: false, |
| }); |
| expect(internalTimer).toBe(true); |
| expect(externalAbort).toBe(true); |
| }); |
|
|
| it("does not flag when timeout is false", () => { |
| expect( |
| shouldFlagCompactionTimeout({ |
| isTimeout: false, |
| isCompactionPendingOrRetrying: true, |
| isCompactionInFlight: true, |
| }), |
| ).toBe(false); |
| }); |
|
|
| it("uses pre-compaction snapshot when compaction timeout occurs", () => { |
| const pre = [castAgentMessage({ role: "assistant", content: "pre" })] as const; |
| const current = [castAgentMessage({ role: "assistant", content: "current" })] as const; |
| const selected = selectCompactionTimeoutSnapshot({ |
| timedOutDuringCompaction: true, |
| preCompactionSnapshot: [...pre], |
| preCompactionSessionId: "session-pre", |
| currentSnapshot: [...current], |
| currentSessionId: "session-current", |
| }); |
| expect(selected.source).toBe("pre-compaction"); |
| expect(selected.sessionIdUsed).toBe("session-pre"); |
| expect(selected.messagesSnapshot).toEqual(pre); |
| }); |
|
|
| it("falls back to current snapshot when pre-compaction snapshot is unavailable", () => { |
| const current = [castAgentMessage({ role: "assistant", content: "current" })] as const; |
| const selected = selectCompactionTimeoutSnapshot({ |
| timedOutDuringCompaction: true, |
| preCompactionSnapshot: null, |
| preCompactionSessionId: "session-pre", |
| currentSnapshot: [...current], |
| currentSessionId: "session-current", |
| }); |
| expect(selected.source).toBe("current"); |
| expect(selected.sessionIdUsed).toBe("session-current"); |
| expect(selected.messagesSnapshot).toEqual(current); |
| }); |
| }); |
|
|