Files
openclaw/extensions/memory-lancedb/lancedb-store.delete.test.ts
Jason (Json) bccbb8a0c7 fix(memory): make persistence promises receipt-backed (#120989)
* fix: require memory persistence receipts

* fix(memory): bind persistence failures to tool owners

* fix(memory): preserve Codex persistence ownership

* test(plugin-sdk): account for owner metadata export

* test(codex): split owner timeout regression

* fix(memory): cover durable deletes across runtimes

* test(codex): type dynamic mutation fixtures

* fix(agents): fail closed ambiguous side-effect owners

* fix(memory): fail zero-row delete receipts
2026-08-16 00:50:10 -06:00

41 lines
1.4 KiB
TypeScript

import { describe, expect, test, vi } from "vitest";
const lanceMocks = vi.hoisted(() => ({
countRows: vi.fn(async () => 1),
deleteRows: vi.fn(),
}));
vi.mock("./lancedb-runtime.js", () => ({
loadLanceDbModule: vi.fn(async () => ({
connect: vi.fn(async () => ({
tableNames: vi.fn(async () => ["memories"]),
openTable: vi.fn(async () => ({
schema: vi.fn(async () => ({ fields: [{ name: "agentId" }] })),
countRows: lanceMocks.countRows,
delete: lanceMocks.deleteRows,
close: vi.fn(),
})),
close: vi.fn(),
})),
})),
}));
import { MemoryDB } from "./lancedb-store.js";
describe("MemoryDB delete receipts", () => {
test("uses LanceDB's deleted-row count as the authoritative receipt", async () => {
const db = new MemoryDB("/unused", 3);
const memoryId = "890e1fae-1234-4678-abcd-ef0123456789";
lanceMocks.deleteRows
.mockResolvedValueOnce({ numDeletedRows: 0, version: 1 })
.mockResolvedValueOnce({ numDeletedRows: 1, version: 2 })
.mockRejectedValueOnce(new Error("delete unavailable"));
await expect(db.delete("main", memoryId)).resolves.toBe(false);
await expect(db.delete("main", memoryId)).resolves.toBe(true);
await expect(db.delete("main", memoryId)).rejects.toThrow("delete unavailable");
expect(lanceMocks.countRows).not.toHaveBeenCalled();
expect(lanceMocks.deleteRows).toHaveBeenCalledTimes(3);
});
});