75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const templateFindManyMock = vi.fn();
|
|
|
|
vi.mock("../../lib/server/env", () => ({
|
|
isDatabaseConfigured: () => true,
|
|
}));
|
|
|
|
vi.mock("../../lib/server/db", () => ({
|
|
prisma: {
|
|
templateFacet: {
|
|
findMany: (...args: unknown[]) => templateFindManyMock(...args),
|
|
},
|
|
},
|
|
}));
|
|
|
|
import {
|
|
getTemplateFacetSlugSet,
|
|
scoreTemplatesByTemplateFacets,
|
|
} from "../../lib/server/methodRecommendations";
|
|
|
|
beforeEach(() => {
|
|
templateFindManyMock.mockReset();
|
|
});
|
|
|
|
describe("scoreTemplatesByTemplateFacets", () => {
|
|
it("counts matches against TemplateFacet rows", async () => {
|
|
templateFindManyMock.mockResolvedValueOnce([
|
|
{ templateSlug: "consensus", group: "size", value: "oneMember" },
|
|
{ templateSlug: "consensus", group: "orgType", value: "dao" },
|
|
]);
|
|
|
|
const out = await scoreTemplatesByTemplateFacets({
|
|
templateSlugs: ["consensus", "unknown-slug"],
|
|
facets: {
|
|
size: ["oneMember"],
|
|
orgType: ["dao"],
|
|
scale: [],
|
|
maturity: [],
|
|
},
|
|
});
|
|
|
|
const consensus = out?.find((r) => r.templateSlug === "consensus");
|
|
const unknown = out?.find((r) => r.templateSlug === "unknown-slug");
|
|
expect(consensus?.score).toBe(2);
|
|
expect(consensus?.matchedFacets).toEqual([
|
|
"size:oneMember",
|
|
"orgType:dao",
|
|
]);
|
|
expect(unknown?.score).toBe(0);
|
|
});
|
|
|
|
it("returns zero when no facets requested", async () => {
|
|
const out = await scoreTemplatesByTemplateFacets({
|
|
templateSlugs: ["consensus"],
|
|
facets: {},
|
|
});
|
|
expect(out?.[0]?.score).toBe(0);
|
|
expect(templateFindManyMock).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe("getTemplateFacetSlugSet", () => {
|
|
it("returns distinct template slugs", async () => {
|
|
templateFindManyMock.mockResolvedValueOnce([
|
|
{ templateSlug: "consensus" },
|
|
{ templateSlug: "do-ocracy" },
|
|
]);
|
|
|
|
const set = await getTemplateFacetSlugSet();
|
|
expect(set?.has("consensus")).toBe(true);
|
|
expect(set?.has("do-ocracy")).toBe(true);
|
|
});
|
|
});
|