Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/utils/readiness-cache.server.test.ts
T

33 lines
1.3 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { WEB_READINESS_CACHE_TTL_MS, checkCachedWebReadiness, resetWebReadinessCacheForTests } from "./readiness-cache.server";
describe("web readiness cache", () => {
afterEach(() => {
resetWebReadinessCacheForTests();
});
it("coalesces parallel checks inside a one-second freshness window", async () => {
let release!: () => void;
const check = vi.fn(() => new Promise<void>((resolve) => (release = resolve)));
const probes = Array.from({ length: 25 }, () => checkCachedWebReadiness(check, 1_000));
expect(check).toHaveBeenCalledOnce();
release();
await Promise.all(probes);
await checkCachedWebReadiness(check, 1_000 + WEB_READINESS_CACHE_TTL_MS - 1);
expect(check).toHaveBeenCalledOnce();
check.mockResolvedValueOnce(undefined);
await checkCachedWebReadiness(check, 1_000 + WEB_READINESS_CACHE_TTL_MS);
expect(check).toHaveBeenCalledTimes(2);
});
it("propagates a cached failure to every concurrent probe", async () => {
const check = vi.fn().mockRejectedValue(new Error("database unavailable"));
await expect(Promise.all([checkCachedWebReadiness(check, 1_000), checkCachedWebReadiness(check, 1_000)])).rejects.toThrow("database unavailable");
expect(check).toHaveBeenCalledOnce();
});
});