import { describe, expect, it } from "vitest" ;
import { createExpiringMapCache, resolveCacheTtlMs } from "./cache-utils.js" ;
describe("resolveCacheTtlMs" , () => {
it("accepts exact non-negative integers" , () => {
expect(resolveCacheTtlMs({ envValue: "0" , defaultTtlMs: 60 _000 })).toBe(0 );
expect(resolveCacheTtlMs({ envValue: "120000" , defaultTtlMs: 60 _000 })).toBe(120 _000 );
});
it("rejects malformed env values and falls back to the default" , () => {
expect(resolveCacheTtlMs({ envValue: "0abc" , defaultTtlMs: 60 _000 })).toBe(60 _000 );
expect(resolveCacheTtlMs({ envValue: "15ms" , defaultTtlMs: 60 _000 })).toBe(60 _000 );
});
});
describe("createExpiringMapCache" , () => {
it("expires entries on read after the TTL" , () => {
let now = 1 _000 ;
const cache = createExpiringMapCache<string, string>({
ttlMs: 5 _000 ,
clock: () => now,
});
cache.set("alpha" , "a" );
expect(cache.get("alpha" )).toBe("a" );
now = 6 _001 ;
expect(cache.get("alpha" )).toBeUndefined();
expect(cache.size()).toBe(0 );
});
it("supports dynamic TTLs and opportunistic pruning" , () => {
let now = 1 _000 ;
let ttlMs = 5 _000 ;
const cache = createExpiringMapCache<string, string>({
ttlMs: () => ttlMs,
pruneIntervalMs: 1 _000 ,
clock: () => now,
});
cache.set("stale" , "old" );
now = 7 _000 ;
ttlMs = 2 _000 ;
cache.set("fresh" , "new" );
expect(cache.get("stale" )).toBeUndefined();
expect(cache.keys()).toEqual(["fresh" ]);
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland