Files
plainleaf/lib/data/datastore.test.ts
T
2025-06-16 18:53:21 +02:00

46 lines
1.5 KiB
TypeScript

import "fake-indexeddb/auto";
import { IndexedDBKvPrimitives } from "./indexeddb_kv_primitives.ts";
import { MemoryKvPrimitives } from "./memory_kv_primitives.ts";
import type { KvPrimitives } from "./kv_primitives.ts";
import { assertEquals } from "@std/assert";
import { PrefixedKvPrimitives } from "./prefixed_kv_primitives.ts";
import { DataStore } from "./datastore.ts";
import { LuaEnv, LuaStackFrame } from "../space_lua/runtime.ts";
import { parseExpressionString } from "../space_lua/parse.ts";
async function test(db: KvPrimitives) {
const datastore = new DataStore(new PrefixedKvPrimitives(db, ["ds"]));
await datastore.set(["user", "peter"], { name: "Peter" });
await datastore.set(["user", "hank"], { name: "Hank" });
const env = new LuaEnv();
const sf = LuaStackFrame.lostFrame;
// Basic test, fancier tests are done in common/space_lua/query_collection.test.ts
const results = await datastore.luaQuery(
["user"],
{
objectVariable: "user",
where: parseExpressionString("user.name == 'Peter'"),
},
env,
sf,
);
assertEquals(results, [{ name: "Peter" }]);
}
Deno.test("Test Memory KV DataStore", async () => {
const db = new MemoryKvPrimitives(); // In-memory only, no persistence
await test(db);
await db.close();
});
Deno.test("Test IndexDB DataStore", {
sanitizeResources: false,
sanitizeOps: false,
}, async () => {
const db = new IndexedDBKvPrimitives("test");
await db.init();
await test(db);
db.close();
});