Files
community-rule/tests/unit/methodFacetsSchemas.test.ts
2026-04-20 12:41:10 -06:00

84 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
flattenRequestedFacets,
methodFacetsSchema,
parseRequestedFacetsFromSearchParams,
resolveFacetMatch,
} from "../../lib/server/validation/methodFacetsSchemas";
describe("methodFacetsSchema", () => {
it("accepts boolean cells and partial groups", () => {
expect(
methodFacetsSchema.safeParse({
size: { oneMember: true, twoToFive: false },
orgType: { dao: { match: true, weight: 0.5 } },
}).success,
).toBe(true);
});
it("rejects unknown facet group", () => {
expect(
methodFacetsSchema.safeParse({
nonsense: { foo: true },
}).success,
).toBe(false);
});
it("rejects unknown value within a known group", () => {
expect(
methodFacetsSchema.safeParse({
size: { gigantic: true },
}).success,
).toBe(false);
});
});
describe("resolveFacetMatch", () => {
it("treats undefined as { match:false }", () => {
expect(resolveFacetMatch(undefined)).toEqual({
match: false,
weight: null,
});
});
it("preserves weight when given as object", () => {
expect(resolveFacetMatch({ match: true, weight: 1.5 })).toEqual({
match: true,
weight: 1.5,
});
});
});
describe("parseRequestedFacetsFromSearchParams", () => {
it("collects facet.* params across multiple values per group", () => {
const params = new URLSearchParams();
params.append("facet.size", "oneMember");
params.append("facet.orgType", "dao");
params.append("facet.orgType", "nonprofit");
const out = parseRequestedFacetsFromSearchParams(params);
expect(out.size).toEqual(["oneMember"]);
expect(out.orgType?.sort()).toEqual(["dao", "nonprofit"]);
});
it("silently drops unknown groups and values", () => {
const params = new URLSearchParams();
params.append("facet.size", "tiny");
params.append("facet.unknown", "dao");
params.append("foo", "bar");
expect(parseRequestedFacetsFromSearchParams(params)).toEqual({});
});
});
describe("flattenRequestedFacets", () => {
it("emits one entry per (group, value) pair", () => {
const flat = flattenRequestedFacets({
size: ["oneMember", "twoToFive"],
orgType: ["dao"],
});
expect(flat).toEqual([
{ group: "size", value: "oneMember" },
{ group: "size", value: "twoToFive" },
{ group: "orgType", value: "dao" },
]);
});
});