Template flow cleaned up

This commit is contained in:
adilallo
2026-04-20 16:45:15 -06:00
parent d3bb8cdd0f
commit c08cd62872
32 changed files with 1545 additions and 254 deletions
+111
View File
@@ -0,0 +1,111 @@
import { describe, it, expect } from "vitest";
import { act, render, screen } from "@testing-library/react";
import "@testing-library/jest-dom/vitest";
import {
CreateFlowProvider,
useCreateFlow,
} from "../../app/(app)/create/context/CreateFlowContext";
/**
* Harness: mounts a consumer that renders the state we want to assert on and
* exposes imperative handles (updateState, resetCustomRuleSelections) via
* window globals. Keeps the test readable vs. threading refs everywhere.
*/
function Harness() {
const { state, updateState, resetCustomRuleSelections } = useCreateFlow();
(window as unknown as { __updateState: typeof updateState }).__updateState =
updateState;
(
window as unknown as { __resetCustomRule: typeof resetCustomRuleSelections }
).__resetCustomRule = resetCustomRuleSelections;
return (
<>
<div data-testid="title">{state.title ?? ""}</div>
<div data-testid="core">
{(state.selectedCoreValueIds ?? []).join(",")}
</div>
<div data-testid="comm">
{(state.selectedCommunicationMethodIds ?? []).join(",")}
</div>
<div data-testid="details">
{Object.keys(state.coreValueDetailsByChipId ?? {}).join(",")}
</div>
<div data-testid="snapshot">
{(state.coreValuesChipsSnapshot ?? []).map((r) => r.id).join(",")}
</div>
</>
);
}
function getUpdateState() {
return (window as unknown as { __updateState: (u: unknown) => void })
.__updateState;
}
function getResetCustomRule() {
return (window as unknown as { __resetCustomRule: () => void })
.__resetCustomRule;
}
describe("CreateFlowContext — resetCustomRuleSelections", () => {
it("clears all custom-rule stage selections while keeping community stage", () => {
render(
<CreateFlowProvider>
<Harness />
</CreateFlowProvider>,
);
act(() => {
getUpdateState()({
title: "Mutual Aid Mondays",
communityContext: "Neighborhood",
selectedCoreValueIds: ["1", "3"],
coreValuesChipsSnapshot: [
{ id: "1", label: "Trust", state: "selected" },
],
coreValueDetailsByChipId: {
"1": { meaning: "m", signals: "s" },
},
selectedCommunicationMethodIds: ["consensus-decision-making"],
selectedMembershipMethodIds: ["open"],
selectedDecisionApproachIds: ["consensus-decision-making"],
selectedConflictManagementIds: ["mediation"],
});
});
expect(screen.getByTestId("title").textContent).toBe("Mutual Aid Mondays");
expect(screen.getByTestId("core").textContent).toBe("1,3");
expect(screen.getByTestId("comm").textContent).toBe(
"consensus-decision-making",
);
act(() => {
getResetCustomRule()();
});
expect(screen.getByTestId("title").textContent).toBe("Mutual Aid Mondays");
expect(screen.getByTestId("core").textContent).toBe("");
expect(screen.getByTestId("comm").textContent).toBe("");
expect(screen.getByTestId("details").textContent).toBe("");
expect(screen.getByTestId("snapshot").textContent).toBe("");
});
it("is a no-op when no custom-rule selections were set", () => {
render(
<CreateFlowProvider>
<Harness />
</CreateFlowProvider>,
);
act(() => {
getUpdateState()({ title: "Just a Community" });
});
act(() => {
getResetCustomRule()();
});
expect(screen.getByTestId("title").textContent).toBe("Just a Community");
expect(screen.getByTestId("core").textContent).toBe("");
});
});