codex-flows/apps/discord-bridge/test/state.test.ts

104 lines
3.2 KiB
TypeScript
Raw Normal View History

2026-05-12 15:15:09 +00:00
import { mkdtemp, rm, writeFile } from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { describe, expect, test } from "bun:test";
import { JsonFileStateStore } from "../src/state.ts";
describe("JsonFileStateStore", () => {
test("loads per-thread grant metadata and older sessions without grants", async () => {
const dir = await mkdtemp(path.join(os.tmpdir(), "discord-bridge-state-"));
try {
const statePath = path.join(dir, "state.json");
await writeFile(
statePath,
`${JSON.stringify({
version: 1,
sessions: [
{
discordThreadId: "discord-thread-1",
parentChannelId: "parent-channel",
sourceMessageId: "message-start-1",
codexThreadId: "codex-thread-1",
title: "Granted thread",
createdAt: "2026-05-11T00:00:00.000Z",
ownerUserId: "user-1",
participantUserIds: ["user-2", "", "user-2", "user-3"],
cwd: "/workspace/project",
mode: "resumed",
statusMessageId: "message-status-1",
},
{
discordThreadId: "discord-thread-2",
parentChannelId: "parent-channel",
codexThreadId: "codex-thread-2",
title: "Older thread",
createdAt: "2026-05-11T00:00:00.000Z",
},
],
queue: [],
activeTurns: [
{
turnId: "turn-active-1",
discordThreadId: "discord-thread-1",
codexThreadId: "codex-thread-1",
origin: "external",
startedAt: "2026-05-11T00:00:01.000Z",
observedAt: "2026-05-11T00:00:02.000Z",
},
{
turnId: "turn-active-2",
discordThreadId: "discord-thread-2",
codexThreadId: "codex-thread-2",
origin: "unknown",
queueItemId: "queue-1",
observedAt: "2026-05-11T00:00:03.000Z",
},
],
processedMessageIds: [],
deliveries: [],
})}\n`,
);
const state = await new JsonFileStateStore(statePath).load();
expect(state.sessions).toHaveLength(2);
expect(state.sessions[0]?.ownerUserId).toBe("user-1");
expect(state.sessions[0]?.sourceMessageId).toBe("message-start-1");
expect(state.sessions[0]?.participantUserIds).toEqual([
"user-2",
"user-3",
]);
expect(state.sessions[0]?.cwd).toBe("/workspace/project");
expect(state.sessions[0]?.mode).toBe("resumed");
expect(state.sessions[0]?.statusMessageId).toBe("message-status-1");
expect(state.sessions[1]?.ownerUserId).toBeUndefined();
expect(state.sessions[1]?.sourceMessageId).toBeUndefined();
expect(state.sessions[1]?.participantUserIds).toBeUndefined();
expect(state.sessions[1]?.cwd).toBeUndefined();
expect(state.sessions[1]?.mode).toBeUndefined();
expect(state.sessions[1]?.statusMessageId).toBeUndefined();
expect(state.activeTurns).toEqual([
{
turnId: "turn-active-1",
discordThreadId: "discord-thread-1",
codexThreadId: "codex-thread-1",
origin: "external",
startedAt: "2026-05-11T00:00:01.000Z",
observedAt: "2026-05-11T00:00:02.000Z",
},
{
turnId: "turn-active-2",
discordThreadId: "discord-thread-2",
codexThreadId: "codex-thread-2",
origin: "external",
queueItemId: "queue-1",
observedAt: "2026-05-11T00:00:03.000Z",
},
]);
} finally {
await rm(dir, { recursive: true, force: true });
}
});
});