切换到使用pg数据库
This commit is contained in:
@@ -1,22 +1,21 @@
|
||||
import { afterEach, beforeEach, describe, expect, it } from "bun:test";
|
||||
import { mkdtemp, rm } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
|
||||
import { ConversationStore } from "../../src/conversations/store.js";
|
||||
import { createTestDatabase } from "../helpers/postgres.js";
|
||||
|
||||
describe("ConversationStore", () => {
|
||||
let tempDir: string;
|
||||
let store: ConversationStore;
|
||||
let dispose: (() => Promise<void>) | undefined;
|
||||
|
||||
beforeEach(async () => {
|
||||
tempDir = await mkdtemp(join(tmpdir(), "tjwater-conversation-"));
|
||||
store = new ConversationStore(tempDir);
|
||||
const testDb = await createTestDatabase();
|
||||
store = new ConversationStore(testDb.db);
|
||||
dispose = testDb.dispose;
|
||||
await store.initialize();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await rm(tempDir, { force: true, recursive: true });
|
||||
await dispose?.();
|
||||
});
|
||||
|
||||
it("issues backend-managed session ids when absent", async () => {
|
||||
@@ -58,7 +57,48 @@ describe("ConversationStore", () => {
|
||||
},
|
||||
"existing-session",
|
||||
);
|
||||
expect(fetched?.sessionScopeKey).toBe(record.sessionScopeKey);
|
||||
expect(fetched?.sessionId).toBe(record.sessionId);
|
||||
expect(fetched?.title).toBe("新标题");
|
||||
});
|
||||
|
||||
it("tracks streaming state and clears it with runtime-session guarding", async () => {
|
||||
const { record } = await store.ensure({
|
||||
actorKey: "actor-3",
|
||||
projectId: "project-3",
|
||||
projectKey: "project-key-3",
|
||||
sessionId: "streaming-session",
|
||||
userId: "user-3",
|
||||
});
|
||||
|
||||
const streaming = await store.markStreaming(record, "runtime-1");
|
||||
expect(streaming.isStreaming).toBe(true);
|
||||
expect(streaming.streamingStartedAt).toBeDefined();
|
||||
|
||||
const skipped = await store.clearStreaming(record.sessionId, "runtime-2");
|
||||
expect(skipped).toBeNull();
|
||||
|
||||
const stillStreaming = await store.get(
|
||||
{
|
||||
actorKey: "actor-3",
|
||||
projectId: "project-3",
|
||||
projectKey: "project-key-3",
|
||||
userId: "user-3",
|
||||
},
|
||||
record.sessionId,
|
||||
);
|
||||
expect(stillStreaming?.isStreaming).toBe(true);
|
||||
|
||||
await store.clearStreaming(record.sessionId, "runtime-1");
|
||||
const cleared = await store.get(
|
||||
{
|
||||
actorKey: "actor-3",
|
||||
projectId: "project-3",
|
||||
projectKey: "project-key-3",
|
||||
userId: "user-3",
|
||||
},
|
||||
record.sessionId,
|
||||
);
|
||||
expect(cleared?.isStreaming).toBe(false);
|
||||
expect(cleared?.streamingStartedAt).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user