Files
diegosouzapw--omniroute/tests/unit/memory-cache.test.ts
T
2026-07-13 13:39:12 +08:00

96 lines
2.5 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const { memoryCache } = await import("../../src/lib/memory/cache.ts");
const originalDateNow = Date.now;
const originalMaxSize = memoryCache.maxSize;
test.beforeEach(async () => {
await memoryCache.clear();
memoryCache.maxSize = originalMaxSize;
Date.now = originalDateNow;
});
test.after(async () => {
Date.now = originalDateNow;
memoryCache.maxSize = originalMaxSize;
await memoryCache.clear();
});
test("memoryCache tracks cache hits and misses and clear resets stats", async () => {
await memoryCache.set("user:1", { value: 1 });
assert.deepEqual(await memoryCache.get("user:1"), { value: 1 });
assert.equal(await memoryCache.get("missing"), null);
assert.deepEqual(memoryCache.stats(), {
size: 1,
maxSize: originalMaxSize,
hits: 1,
misses: 1,
});
await memoryCache.clear();
assert.deepEqual(memoryCache.stats(), {
size: 0,
maxSize: originalMaxSize,
hits: 0,
misses: 0,
});
});
test("memoryCache expires entries after their TTL elapses", async () => {
let now = 1_000;
Date.now = () => now;
await memoryCache.set("ttl:key", "value", 50);
assert.equal(await memoryCache.get("ttl:key"), "value");
now = 1_060;
assert.equal(await memoryCache.get("ttl:key"), null);
assert.deepEqual(memoryCache.stats(), {
size: 0,
maxSize: originalMaxSize,
hits: 1,
misses: 1,
});
});
test("memoryCache evicts the least recently used entry when full", async () => {
memoryCache.maxSize = 2;
await memoryCache.set("a", "value-a");
await memoryCache.set("b", "value-b");
assert.equal(await memoryCache.get("a"), "value-a");
await memoryCache.set("c", "value-c");
assert.equal(await memoryCache.get("a"), "value-a");
assert.equal(await memoryCache.get("b"), null);
assert.equal(await memoryCache.get("c"), "value-c");
assert.deepEqual(memoryCache.stats(), {
size: 2,
maxSize: 2,
hits: 3,
misses: 1,
});
});
test("memoryCache invalidates entries by regex pattern", async () => {
await memoryCache.set("session:1", "a");
await memoryCache.set("session:2", "b");
await memoryCache.set("profile:1", "c");
await memoryCache.invalidate("^session:");
assert.equal(await memoryCache.get("session:1"), null);
assert.equal(await memoryCache.get("session:2"), null);
assert.equal(await memoryCache.get("profile:1"), "c");
assert.deepEqual(memoryCache.stats(), {
size: 1,
maxSize: originalMaxSize,
hits: 1,
misses: 2,
});
});