117 lines
3.2 KiB
TypeScript
117 lines
3.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { usesWizardFieldBlocksModalBody } from "../../lib/create/usesWizardFieldBlocksModalBody";
|
|
import type { CustomMethodCardFieldBlock } from "../../lib/create/customMethodCardFieldBlocks";
|
|
|
|
const id = "550e8400-e29b-41d4-a716-446655440000";
|
|
const meta = { [id]: { label: "L", supportText: "S" } };
|
|
const blocks: CustomMethodCardFieldBlock[] = [
|
|
{ kind: "text", id: "b1", blockTitle: "T", placeholderText: "p" },
|
|
];
|
|
|
|
describe("usesWizardFieldBlocksModalBody", () => {
|
|
it("is false without meta row", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: "signal",
|
|
meta: {},
|
|
fieldBlocksById: {},
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("is true when persisted field blocks exist (wizard card)", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: { [id]: blocks },
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("is true for proportion-only persisted blocks (read-only modal)", () => {
|
|
const proportionBlocks: CustomMethodCardFieldBlock[] = [
|
|
{
|
|
kind: "proportion",
|
|
id: "p1",
|
|
blockTitle: "Share of async",
|
|
defaultPercent: 40,
|
|
},
|
|
];
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: { [id]: proportionBlocks },
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("is true when persisted blocks exist even if customMethodCardMetaById row is missing", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta: {},
|
|
fieldBlocksById: { [id]: blocks },
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("is false when meta exists but persisted blocks empty and not editing blocks (preset duplicate stub)", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: { [id]: [] },
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("is true in read-only modal when custom, blocks empty, and facet matches preset stubs", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: { [id]: [] },
|
|
modalEditUnlocked: false,
|
|
draftFieldBlocks: null,
|
|
customFacetDetailsMatchPreset: true,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("is false when customizing with empty wizard draft — structured fields stay active", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: {},
|
|
modalEditUnlocked: true,
|
|
draftFieldBlocks: [],
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("is true when customizing with non-empty block draft", () => {
|
|
expect(
|
|
usesWizardFieldBlocksModalBody({
|
|
methodId: id,
|
|
meta,
|
|
fieldBlocksById: {},
|
|
modalEditUnlocked: true,
|
|
draftFieldBlocks: blocks,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
});
|