Files
plainleaf/client/data/encrypted_kv_primitives.test.ts
T
Zef Hemel 02bd8ed362 Migration Deno -> Node.js
* First pass
* Now using vitest for tests
2026-02-14 22:08:35 +01:00

65 lines
2.0 KiB
TypeScript

import { expect, test } from "vitest";
import { EncryptedKvPrimitives } from "./encrypted_kv_primitives.ts";
import { MemoryKvPrimitives } from "./memory_kv_primitives.ts";
import { deriveCTRKeyFromPassword } from "@silverbulletmd/silverbullet/lib/crypto";
test("Test Encrypted KV Primitives", async () => {
const memoryKv = new MemoryKvPrimitives();
const salt = new Uint8Array(32);
const key = await deriveCTRKeyFromPassword("test", salt);
const kv = new EncryptedKvPrimitives(memoryKv, key);
await kv.init();
// Store a basic key
await kv.batchSet([{ key: ["key"], value: 10 }]);
const [value] = await kv.batchGet([["key"]]);
expect(value).toEqual(10);
// Store a binary blob
const blob = new Uint8Array([1, 2, 3, 4, 5]);
await kv.batchSet([{ key: ["blob"], value: blob }]);
const [blobValue] = await kv.batchGet([["blob"]]);
expect(blobValue).toEqual(blob);
// Store a nested JSON and blob structure
const nested = {
json: { a: 1, b: 2 },
blob: new Uint8Array([6, 7, 8, 9, 10]),
};
await kv.batchSet([{ key: ["nested"], value: nested }]);
const [nestedValue] = await kv.batchGet([["nested"]]);
expect(nestedValue).toEqual(nested);
// Put a few objects with a person prefix
await kv.batchSet([
{ key: ["person", "alice"], value: { name: "Alice", age: 30 } },
{ key: ["person", "bob"], value: { name: "Bob", age: 25 } },
]);
// Then query based on the prefix
let counter = 0;
for await (const { key, value } of kv.query({ prefix: ["person"] })) {
expect(key[0]).toEqual("person");
expect(key[1] === "alice" || key[1] === "bob").toBeTruthy();
expect(value.age).toBeTruthy();
counter++;
}
expect(counter).toEqual(2);
// Delete something
await kv.batchDelete([["person", "alice"]]);
// Check it's gone
const [deletedValue] = await kv.batchGet([["person", "alice"]]);
expect(deletedValue).toEqual(undefined);
console.log(memoryKv);
// Clear
await kv.clear();
counter = 0;
for await (const _ of kv.query({ prefix: ["person"] })) {
counter++;
}
expect(counter).toEqual(0);
});