Files
openclaw/packages/memory-host-sdk/src/host/sqlite-vec.test.ts
2026-05-09 23:31:50 +01:00

52 lines
1.8 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { loadSqliteVecExtension } from "./sqlite-vec.js";
function mockMissingSqliteVecPackage(): void {
vi.doMock("sqlite-vec", () => {
const err = new Error("Cannot find package 'sqlite-vec' imported from sqlite-vec.test.ts");
Object.assign(err, { code: "ERR_MODULE_NOT_FOUND" });
throw err;
});
}
afterEach(() => {
vi.doUnmock("sqlite-vec");
});
describe("loadSqliteVecExtension", () => {
it("loads explicit extensionPath without importing bundled sqlite-vec", async () => {
mockMissingSqliteVecPackage();
const db = {
enableLoadExtension: vi.fn(),
loadExtension: vi.fn(),
};
await expect(
loadSqliteVecExtension({
db: db as never,
extensionPath: "/opt/openclaw/sqlite-vec.so",
}),
).resolves.toEqual({ ok: true, extensionPath: "/opt/openclaw/sqlite-vec.so" });
expect(db.enableLoadExtension).toHaveBeenCalledWith(true);
expect(db.loadExtension).toHaveBeenCalledWith("/opt/openclaw/sqlite-vec.so");
});
it("returns a valid memorySearch extensionPath hint when sqlite-vec is absent", async () => {
mockMissingSqliteVecPackage();
const db = {
enableLoadExtension: vi.fn(),
loadExtension: vi.fn(),
};
const result = await loadSqliteVecExtension({ db: db as never });
expect(result.ok).toBe(false);
expect(result.error).toContain("sqlite-vec package is not installed.");
expect(result.error).toContain("agents.defaults.memorySearch.store.vector.extensionPath");
expect(result.error).toContain("agent-specific memorySearch.store.vector.extensionPath");
expect(result.error).not.toContain("memory.store.vector.extensionPath");
expect(db.enableLoadExtension).toHaveBeenCalledWith(true);
expect(db.loadExtension).not.toHaveBeenCalled();
});
});