mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
Breaking changes: - Durable Storage.commit(writes, adopt, context): storages call adopt(seq) once, synchronously, when the batch is durable and before their next commit - Chord traceIn(options, fn, context): context last - WatchHandle and WatchEnd move to Chord (Durable re-exports them); end reasons ended (was session_closed) and failed (was session_failed); retirement is an explicit source event, and an ended watch drops its references into the Session - Removed Session.documentState(), Conversation.viewState(), Harness.taskGraph() and DocumentState; use watchDoc(), watch(), watchTaskGraph()
32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
import { BACKGROUND_CONTEXT } from "@earendil-works/chord/context";
|
|
import { registerStorageConformance } from "@earendil-works/pi-durable/testing";
|
|
import { describe, expect, it } from "vitest";
|
|
import { idFromNumber, seqFromNumber } from "../src/ids.ts";
|
|
import { MemoryStorage } from "../src/storage/memory.ts";
|
|
import { type EntryId, ROOT_CONVERSATION_ID } from "../src/types.ts";
|
|
|
|
registerStorageConformance({ describe, expect, it }, "MemoryStorage", (use) => use(new MemoryStorage()));
|
|
|
|
it("does not expose retained state through a prepared commit", async () => {
|
|
const storage = new MemoryStorage();
|
|
await storage.commit([{ type: "conversation", value: { id: ROOT_CONVERSATION_ID } }], () => {}, BACKGROUND_CONTEXT);
|
|
const entryId = idFromNumber<EntryId>(2);
|
|
const prepared = storage.prepareCommit([
|
|
{
|
|
type: "entry",
|
|
value: {
|
|
id: entryId,
|
|
conversationId: ROOT_CONVERSATION_ID,
|
|
kind: "test",
|
|
data: { nested: [1] },
|
|
},
|
|
},
|
|
]);
|
|
const exposed = prepared.writes[0];
|
|
if (exposed.type !== "entry") throw new Error("Expected an entry write");
|
|
expect(() => (exposed.value.data as { nested: number[] }).nested.push(2)).toThrow();
|
|
|
|
expect(prepared.apply()).toBe(seqFromNumber(2));
|
|
expect(prepared.apply()).toBe(seqFromNumber(2));
|
|
expect((await storage.entry(entryId, BACKGROUND_CONTEXT))?.entry.data).toEqual({ nested: [1] });
|
|
});
|