Files
community-rule/tests/unit/applyFinalReviewChipEditPatch.test.ts
T
2026-04-20 19:00:30 -06:00

128 lines
4.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { applyFinalReviewChipEditPatch } from "../../lib/create/applyFinalReviewChipEditPatch";
import type { CreateFlowState } from "../../app/(app)/create/types";
import type { FinalReviewChipEditPatch } from "../../app/(app)/create/components/FinalReviewChipEditModal";
describe("applyFinalReviewChipEditPatch", () => {
it("creates the coreValueDetailsByChipId record when missing", () => {
const patch: FinalReviewChipEditPatch = {
groupKey: "coreValues",
overrideKey: "accessibility",
value: { meaning: "Be welcoming.", signals: "Captions on videos." },
};
const result = applyFinalReviewChipEditPatch({}, patch);
expect(result).toEqual({
coreValueDetailsByChipId: {
accessibility: {
meaning: "Be welcoming.",
signals: "Captions on videos.",
},
},
});
});
it("merges into the existing record without dropping siblings", () => {
const state: CreateFlowState = {
communicationMethodDetailsById: {
signal: {
corePrinciple: "Stay async-first.",
logisticsAdmin: "Daily check-ins.",
codeOfConduct: "Be kind.",
},
},
};
const patch: FinalReviewChipEditPatch = {
groupKey: "communication",
overrideKey: "in-person-meetings",
value: {
corePrinciple: "Meet weekly.",
logisticsAdmin: "Hybrid format.",
codeOfConduct: "Listen actively.",
},
};
const result = applyFinalReviewChipEditPatch(state, patch);
expect(result.communicationMethodDetailsById).toEqual({
signal: {
corePrinciple: "Stay async-first.",
logisticsAdmin: "Daily check-ins.",
codeOfConduct: "Be kind.",
},
"in-person-meetings": {
corePrinciple: "Meet weekly.",
logisticsAdmin: "Hybrid format.",
codeOfConduct: "Listen actively.",
},
});
});
it("overwrites the same key when the user re-saves it", () => {
const state: CreateFlowState = {
membershipMethodDetailsById: {
"open-access": {
eligibility: "Anyone",
joiningProcess: "Sign up",
expectations: "Old expectations",
},
},
};
const patch: FinalReviewChipEditPatch = {
groupKey: "membership",
overrideKey: "open-access",
value: {
eligibility: "Anyone over 18",
joiningProcess: "Sign up + intro call",
expectations: "New expectations",
},
};
const result = applyFinalReviewChipEditPatch(state, patch);
expect(result.membershipMethodDetailsById?.["open-access"]).toEqual({
eligibility: "Anyone over 18",
joiningProcess: "Sign up + intro call",
expectations: "New expectations",
});
});
it("routes decisionApproaches to its dedicated state field", () => {
const patch: FinalReviewChipEditPatch = {
groupKey: "decisionApproaches",
overrideKey: "lazy-consensus",
value: {
corePrinciple: "Silence implies assent.",
applicableScope: ["budget"],
selectedApplicableScope: ["budget"],
stepByStepInstructions: "Propose. Wait 72h.",
consensusLevel: 0.66,
objectionsDeadlocks: "Escalate to vote.",
},
};
const result = applyFinalReviewChipEditPatch({}, patch);
expect(Object.keys(result)).toEqual(["decisionApproachDetailsById"]);
});
it("routes conflictManagement to its dedicated state field", () => {
const patch: FinalReviewChipEditPatch = {
groupKey: "conflictManagement",
overrideKey: "peer-mediation",
value: {
corePrinciple: "Restore trust.",
applicableScope: ["interpersonal"],
selectedApplicableScope: ["interpersonal"],
processProtocol: "Pair the parties with a neutral facilitator.",
restorationFallbacks: "Council escalation.",
},
};
const result = applyFinalReviewChipEditPatch({}, patch);
expect(Object.keys(result)).toEqual(["conflictManagementDetailsById"]);
});
});