mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-02 08:06:00 +00:00
73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import type { TestRunner } from "core/test";
|
|
import type { ICacheDriver } from "./index";
|
|
|
|
export function cacheDriverTestSuite(
|
|
testRunner: TestRunner,
|
|
{
|
|
makeCache,
|
|
setTime,
|
|
options,
|
|
}: {
|
|
makeCache: () => ICacheDriver;
|
|
setTime: (ms: number) => void;
|
|
options?: {
|
|
minTTL?: number;
|
|
skipTTL?: boolean;
|
|
};
|
|
},
|
|
) {
|
|
const { test, expect } = testRunner;
|
|
const minTTL = options?.minTTL ?? 1;
|
|
|
|
test("get within ttl", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("ttl", "bar", minTTL + 2); // 2 second TTL
|
|
setTime(minTTL * 1000 + 1000); // advance by 1 second
|
|
expect(await cache.get("ttl")).toBe("bar");
|
|
});
|
|
|
|
test("set and get returns value", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("value", "bar");
|
|
expect(await cache.get("value")).toBe("bar");
|
|
});
|
|
|
|
test("get returns undefined for missing key", async () => {
|
|
const cache = makeCache();
|
|
expect(await cache.get("missing" + Math.random())).toBeUndefined();
|
|
});
|
|
|
|
test("delete removes value", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("delete", "bar");
|
|
await cache.del("delete");
|
|
expect(await cache.get("delete")).toBeUndefined();
|
|
});
|
|
|
|
test("set overwrites value", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("overwrite", "bar");
|
|
await cache.set("overwrite", "baz");
|
|
expect(await cache.get("overwrite")).toBe("baz");
|
|
});
|
|
|
|
test("set with ttl expires", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("expire", "bar", minTTL + 1); // 1 second TTL
|
|
expect(await cache.get("expire")).toBe("bar");
|
|
// advance time
|
|
setTime(minTTL * 1000 * 2000);
|
|
if (options?.skipTTL) {
|
|
await cache.del("expire");
|
|
}
|
|
expect(await cache.get("expire")).toBeUndefined();
|
|
});
|
|
test("set without ttl does not expire", async () => {
|
|
const cache = makeCache();
|
|
await cache.set("ttl0", "bar");
|
|
expect(await cache.get("ttl0")).toBe("bar");
|
|
setTime(1000);
|
|
expect(await cache.get("ttl0")).toBe("bar");
|
|
});
|
|
}
|