Files
community-rule/tests/unit/facetRecommendationsLoad.test.ts
T
2026-05-26 09:03:18 -06:00

55 lines
1.5 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import {
buildFacetRecommendationRequestKey,
getCachedFacetScores,
loadFacetScores,
} from "../../lib/create/facetRecommendationsLoad";
describe("loadFacetScores", () => {
beforeEach(() => {
vi.stubGlobal(
"fetch",
vi.fn().mockResolvedValue({
ok: true,
json: async () => ({
methods: [
{ slug: "slack", matches: { score: 3 } },
{ slug: "email", matches: { score: 1 } },
],
}),
}),
);
});
afterEach(() => {
vi.unstubAllGlobals();
});
it("caches scores by section and facet query", async () => {
const queryString = "facet.size=small";
const scores = await loadFacetScores("communication", queryString);
expect(scores).toEqual({ slack: 3, email: 1 });
expect(
getCachedFacetScores(
buildFacetRecommendationRequestKey("communication", queryString),
),
).toEqual(scores);
expect(fetch).toHaveBeenCalledTimes(1);
await loadFacetScores("communication", queryString);
expect(fetch).toHaveBeenCalledTimes(1);
});
it("dedupes in-flight requests for the same key", async () => {
const queryString = "facet.size=small";
const [a, b] = await Promise.all([
loadFacetScores("membership", queryString),
loadFacetScores("membership", queryString),
]);
expect(a).toEqual(b);
expect(fetch).toHaveBeenCalledTimes(1);
});
});