70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import type { CommunityStructureChipSnapshotRow } from "../../app/(app)/create/types";
|
|
import { buildCoreValueChipOptionsFromDraft } from "../../lib/create/coreValueChipOptionsFromDraft";
|
|
|
|
const PRESETS = [
|
|
{ label: "A", meaning: "am", signals: "as" },
|
|
{ label: "B", meaning: "bm", signals: "bs" },
|
|
{ label: "C", meaning: "cm", signals: "cs" },
|
|
] as const;
|
|
|
|
describe("buildCoreValueChipOptionsFromDraft", () => {
|
|
it("shows every preset plus selection when snapshot only has selected rows (edit / hydrate)", () => {
|
|
const snapshot: CommunityStructureChipSnapshotRow[] = [
|
|
{ id: "1", label: "A", state: "selected" },
|
|
{ id: "3", label: "C", state: "selected" },
|
|
];
|
|
const out = buildCoreValueChipOptionsFromDraft(
|
|
PRESETS,
|
|
snapshot,
|
|
["1", "3"],
|
|
);
|
|
expect(out.map((r) => r.id)).toEqual(["1", "2", "3"]);
|
|
expect(out.map((r) => r.label)).toEqual(["A", "B", "C"]);
|
|
expect(out.map((r) => r.state)).toEqual(["selected", "unselected", "selected"]);
|
|
});
|
|
|
|
it("merges preset labels/state from snapshot and appends non-preset (custom) rows", () => {
|
|
const snapshot: CommunityStructureChipSnapshotRow[] = [
|
|
{ id: "1", label: "Edited A", state: "unselected" },
|
|
{ id: "uuid-1", label: "Custom", state: "selected" },
|
|
];
|
|
const out = buildCoreValueChipOptionsFromDraft(PRESETS, snapshot, []);
|
|
expect(out).toHaveLength(4);
|
|
expect(out.filter((r) => r.id === "1")[0]?.label).toBe("Edited A");
|
|
expect(out.filter((r) => r.id === "uuid-1")[0]).toMatchObject({
|
|
id: "uuid-1",
|
|
label: "Custom",
|
|
state: "selected",
|
|
});
|
|
});
|
|
|
|
it("uses selectedCoreValueIds when snapshot row lacks a valid state string", () => {
|
|
const snapshot: CommunityStructureChipSnapshotRow[] = [
|
|
{ id: "2", label: "B", state: "garbage" },
|
|
];
|
|
const out = buildCoreValueChipOptionsFromDraft(
|
|
PRESETS,
|
|
snapshot,
|
|
["2"],
|
|
);
|
|
expect(out.map((r) => ({ id: r.id, state: r.state }))).toContainEqual({
|
|
id: "2",
|
|
state: "selected",
|
|
});
|
|
});
|
|
|
|
it("with empty snapshot derives from presets and selected ids only", () => {
|
|
const out = buildCoreValueChipOptionsFromDraft(
|
|
PRESETS,
|
|
undefined,
|
|
["2"],
|
|
);
|
|
expect(out.map((r) => r.id)).toEqual(["1", "2", "3"]);
|
|
expect(out.filter((r) => r.state === "selected").map((r) => r.id)).toEqual(
|
|
["2"],
|
|
);
|
|
});
|
|
});
|