148 lines · 3.4 KB · TypeScript
RawDownload
import { describe, expect, it } from "vitest"; import {  shouldApplyProjectionEvent,  shouldApplyProjectionSnapshot,  shouldApplyTerminalEvent,} from "./service"; describe("shouldApplyTerminalEvent", () => {  it("applies terminal events for draft-only threads", () => {    expect(      shouldApplyTerminalEvent({        serverThreadArchivedAt: undefined,        hasDraftThread: true,      }),    ).toBe(true);  });   it("drops terminal events for unknown threads", () => {    expect(      shouldApplyTerminalEvent({        serverThreadArchivedAt: undefined,        hasDraftThread: false,      }),    ).toBe(false);  });   it("drops terminal events for archived server threads even if a draft exists", () => {    expect(      shouldApplyTerminalEvent({        serverThreadArchivedAt: "2026-04-09T00:00:00.000Z",        hasDraftThread: true,      }),    ).toBe(false);  });   it("applies terminal events for active server threads", () => {    expect(      shouldApplyTerminalEvent({        serverThreadArchivedAt: null,        hasDraftThread: false,      }),    ).toBe(true);  });}); describe("shouldApplyProjectionSnapshot", () => {  it("accepts the first snapshot for an environment", () => {    expect(      shouldApplyProjectionSnapshot({        current: null,        next: {          snapshotSequence: 1,          updatedAt: "2026-04-22T10:00:00.000Z",        },      }),    ).toBe(true);  });   it("drops snapshots with an older sequence", () => {    expect(      shouldApplyProjectionSnapshot({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        next: {          snapshotSequence: 4,          updatedAt: "2026-04-22T10:06:00.000Z",        },      }),    ).toBe(false);  });   it("drops snapshots with the same sequence and older timestamp", () => {    expect(      shouldApplyProjectionSnapshot({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        next: {          snapshotSequence: 5,          updatedAt: "2026-04-22T10:04:59.000Z",        },      }),    ).toBe(false);  });   it("accepts snapshots with the same sequence and a newer timestamp", () => {    expect(      shouldApplyProjectionSnapshot({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        next: {          snapshotSequence: 5,          updatedAt: "2026-04-22T10:05:01.000Z",        },      }),    ).toBe(true);  });}); describe("shouldApplyProjectionEvent", () => {  it("accepts the first event for an environment", () => {    expect(      shouldApplyProjectionEvent({        current: null,        sequence: 1,      }),    ).toBe(true);  });   it("drops stale or duplicate events", () => {    expect(      shouldApplyProjectionEvent({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        sequence: 5,      }),    ).toBe(false);    expect(      shouldApplyProjectionEvent({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        sequence: 4,      }),    ).toBe(false);  });   it("accepts newer events", () => {    expect(      shouldApplyProjectionEvent({        current: {          sequence: 5,          updatedAt: "2026-04-22T10:05:00.000Z",        },        sequence: 6,      }),    ).toBe(true);  });});