Import the remade decks on stable ids and recommend one card per job, so a saved draft still loads after a chip is renamed.

The real-group profiles stay as a test, so a change that moves a pick fails.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
adilalloandCursor committed 2026-11-04 14:22:54 -07:00
1 parent 96ca15d8e3
commit bcbc6f30d9
89 files changed
+36555 -2828

No files matched your search

+84 -84
View File
@@ -31,7 +31,7 @@ describe("Create flow decision-approaches page", () => {
expect(
screen.getByRole("heading", {
name: "How should this community make difficult decisions?",
name: "How does your group decide, for small things and for big ones?",
}),
).toBeInTheDocument();
});
@@ -46,8 +46,8 @@ describe("Create flow decision-approaches page", () => {
const description = addControl.parentElement;
expect(description).not.toBeNull();
expect(description?.textContent).toMatch(/Select as many as you need/);
expect(description?.textContent).toMatch(/new decision making approaches/);
expect(description?.textContent).toMatch(/Pick a card for each kind of decision/);
expect(description?.textContent).toMatch(/your own/);
});
test("with a finalized custom approach, sidebar still shows add (not Remove policy)", () => {
@@ -71,41 +71,41 @@ describe("Create flow decision-approaches page", () => {
const addControl = screen.getByRole("button", { name: /^Add$/i });
expect(addControl).toBeInTheDocument();
const description = addControl.parentElement;
expect(description?.textContent).toMatch(/Select as many as you need/);
expect(description?.textContent).toMatch(/new decision making approaches/);
expect(description?.textContent).toMatch(/Pick a card for each kind of decision/);
expect(description?.textContent).toMatch(/your own/);
});
test("renders message box with title and checkboxes", () => {
render(<DecisionApproachesScreen />);
const region = screen.getByRole("region", {
name: "Consider defining approaches to steward key resources:",
name: "Make sure your Rule covers each of these",
});
expect(region).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", {
name: "Amend your CommunityRule",
name: "Everyday decisions",
}),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", { name: "Steward finances" }),
within(region).getByRole("checkbox", { name: "Shared money" }),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", { name: "Project level decisions" }),
within(region).getByRole("checkbox", { name: "Spending" }),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", {
name: "Discipline and member termination",
name: "Roles and working groups",
}),
).toBeInTheDocument();
});
test("renders card stack with See all decision approaches toggle", () => {
test("renders card stack with See all decision cards toggle", () => {
render(<DecisionApproachesScreen />);
expect(
screen.getByRole("button", { name: "See all decision approaches" }),
screen.getByRole("button", { name: "See all decision cards" }),
).toBeInTheDocument();
});
@@ -114,17 +114,17 @@ describe("Create flow decision-approaches page", () => {
expect(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
).toBeInTheDocument();
expect(
screen.getByRole("button", {
name: /Do-ocracy: Decisions are made by those who take initiative/,
name: /Do-ocracy: Whoever does the work/,
}),
).toBeInTheDocument();
expect(
screen.getByRole("button", {
name: /Consensus Decision-Making: All members must agree/,
name: /Decision speeds: We sort each decision/,
}),
).toBeInTheDocument();
});
@@ -134,7 +134,7 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const toggle = screen.getByRole("button", {
name: "See all decision approaches",
name: "See all decision cards",
});
await user.click(toggle);
@@ -149,16 +149,16 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
expect(
screen.queryByRole("button", { name: /^Sociocracy:/ }),
screen.queryByRole("button", { name: /^Consent \(sociocracy\):/ }),
).not.toBeInTheDocument();
const toggle = screen.getByRole("button", {
name: "See all decision approaches",
name: "See all decision cards",
});
await user.click(toggle);
expect(
screen.getByRole("button", { name: /^Sociocracy:/ }),
screen.getByRole("button", { name: /^Consent \(sociocracy\):/ }),
).toBeInTheDocument();
});
@@ -167,7 +167,7 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
await user.click(
screen.getByRole("button", { name: "See all decision approaches" }),
screen.getByRole("button", { name: "See all decision cards" }),
);
const cardLabels = () =>
@@ -177,15 +177,15 @@ describe("Create flow decision-approaches page", () => {
.filter((label) => label.includes(": "));
const labelsBefore = cardLabels();
expect(labelsBefore[0]).toMatch(/^Lazy Consensus:/);
expect(labelsBefore.some((label) => label.startsWith("Sociocracy:"))).toBe(
expect(labelsBefore[0]).toMatch(/^Decision speeds:/);
expect(labelsBefore.some((label) => label.startsWith("Consent (sociocracy):"))).toBe(
true,
);
await user.click(screen.getByRole("button", { name: /^Sociocracy:/ }));
await user.click(screen.getByRole("button", { name: /^Consent \(sociocracy\):/ }));
await user.click(
within(await screen.findByRole("dialog")).getByRole("button", {
name: "Add Approach",
name: "Add card",
}),
);
await waitFor(() => {
@@ -197,7 +197,7 @@ describe("Create flow decision-approaches page", () => {
).toBeInTheDocument();
expect(cardLabels()).toEqual(labelsBefore);
expect(
screen.getByRole("button", { name: /^Sociocracy:/ }),
screen.getByRole("button", { name: /^Consent \(sociocracy\):/ }),
).toHaveTextContent("SELECTED");
});
@@ -207,7 +207,7 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const dialog = await screen.findByRole("dialog");
@@ -229,7 +229,7 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
@@ -237,7 +237,7 @@ describe("Create flow decision-approaches page", () => {
expect(dialog).toBeInTheDocument();
const confirmButton = within(dialog).getByRole("button", {
name: "Add Approach",
name: "Add card",
});
await user.click(confirmButton);
@@ -249,13 +249,13 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
const dialog = await screen.findByRole("dialog");
await user.click(
within(dialog).getByRole("button", {
name: "Add Approach",
name: "Add card",
}),
);
@@ -265,7 +265,7 @@ describe("Create flow decision-approaches page", () => {
within(dialogAgain).getByRole("button", { name: "Remove" }),
).toBeInTheDocument();
expect(
within(dialogAgain).queryByRole("button", { name: "Add Approach" }),
within(dialogAgain).queryByRole("button", { name: "Add card" }),
).not.toBeInTheDocument();
expect(
within(dialogAgain).getByRole("button", { name: "Save" }),
@@ -280,12 +280,12 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
await user.click(
within(await screen.findByRole("dialog")).getByRole("button", {
name: "Add Approach",
name: "Add card",
}),
);
@@ -304,12 +304,12 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
const dialog = await screen.findByRole("dialog");
await user.click(
within(dialog).getByRole("button", { name: "Add Approach" }),
within(dialog).getByRole("button", { name: "Add card" }),
);
await user.click(card);
@@ -331,12 +331,12 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
await user.click(
within(await screen.findByRole("dialog")).getByRole("button", {
name: "Add Approach",
name: "Add card",
}),
);
@@ -363,7 +363,7 @@ describe("Create flow decision-approaches page", () => {
);
const card = screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
});
await user.click(card);
const dialog = await screen.findByRole("dialog");
@@ -380,7 +380,7 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
const amendCheckbox = screen.getByRole("checkbox", {
name: "Amend your CommunityRule",
name: "Changing this Rule",
});
expect(amendCheckbox).not.toBeChecked();
await user.click(amendCheckbox);
@@ -393,26 +393,26 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const dialog = await screen.findByRole("dialog");
expect(
within(dialog).getByRole("button", {
name: "Select Amend your CommunityRule",
name: "Select Changing this Rule",
}),
).toBeInTheDocument();
expect(
within(dialog).getByRole("button", { name: "Select Steward finances" }),
within(dialog).getByRole("button", { name: "Select Shared money" }),
).toBeInTheDocument();
expect(
within(dialog).getByRole("button", {
name: "Select Project level decisions",
name: "Select Big decisions",
}),
).toBeInTheDocument();
expect(
within(dialog).getByRole("button", {
name: "Select Discipline and member termination",
name: "Select Spending",
}),
).toBeInTheDocument();
});
@@ -422,18 +422,18 @@ describe("Create flow decision-approaches page", () => {
render(<DecisionApproachesScreen />);
await user.click(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
);
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyDialog = await screen.findByRole("dialog");
expect(
within(lazyDialog).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
).toBeInTheDocument();
});
@@ -444,20 +444,20 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyDialog = await screen.findByRole("dialog");
await user.click(
within(lazyDialog).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
);
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).toBeChecked();
await user.click(
within(lazyDialog).getByRole("button", { name: "Add Approach" }),
within(lazyDialog).getByRole("button", { name: "Add card" }),
);
await waitFor(() => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
@@ -465,22 +465,22 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Do-ocracy: Decisions are made by those who take initiative/,
name: /Do-ocracy: Whoever does the work/,
}),
);
const doocracyDialog = await screen.findByRole("dialog");
expect(
within(doocracyDialog).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
).toBeInTheDocument();
expect(
within(doocracyDialog).queryByRole("button", {
name: "Deselect Steward finances",
name: "Deselect Shared money",
}),
).not.toBeInTheDocument();
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).not.toBeChecked();
await user.click(
within(doocracyDialog).getByRole("button", { name: "Close" }),
@@ -490,22 +490,22 @@ describe("Create flow decision-approaches page", () => {
});
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).toBeChecked();
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyAgain = await screen.findByRole("dialog");
expect(
within(lazyAgain).getByRole("button", {
name: "Deselect Steward finances",
name: "Deselect Shared money",
}),
).toBeInTheDocument();
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).toBeChecked();
});
@@ -515,12 +515,12 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyDialog = await screen.findByRole("dialog");
await user.click(
within(lazyDialog).getByRole("button", { name: "Add Approach" }),
within(lazyDialog).getByRole("button", { name: "Add card" }),
);
await waitFor(() => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
@@ -528,16 +528,16 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Do-ocracy: Decisions are made by those who take initiative/,
name: /Do-ocracy: Whoever does the work/,
}),
);
const doocracyDialog = await screen.findByRole("dialog");
await user.click(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
);
expect(
within(doocracyDialog).getByRole("button", {
name: "Deselect Steward finances",
name: "Deselect Shared money",
}),
).toBeInTheDocument();
await user.click(
@@ -550,13 +550,13 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyAgain = await screen.findByRole("dialog");
expect(
within(lazyAgain).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
).toBeInTheDocument();
});
@@ -567,20 +567,20 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyDialog = await screen.findByRole("dialog");
await user.click(
within(lazyDialog).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
);
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).toBeChecked();
await user.click(
within(lazyDialog).getByRole("button", { name: "Add Approach" }),
within(lazyDialog).getByRole("button", { name: "Add card" }),
);
await waitFor(() => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
@@ -588,54 +588,54 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Do-ocracy: Decisions are made by those who take initiative/,
name: /Do-ocracy: Whoever does the work/,
}),
);
const doocracyDialog = await screen.findByRole("dialog");
await user.click(
within(doocracyDialog).getByRole("button", {
name: "Select Project level decisions",
name: "Select Big decisions",
}),
);
expect(
screen.getByRole("checkbox", { name: "Project level decisions" }),
screen.getByRole("checkbox", { name: "Big decisions" }),
).toBeChecked();
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).not.toBeChecked();
expect(
within(doocracyDialog).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
).toBeInTheDocument();
await user.click(
within(doocracyDialog).getByRole("button", { name: "Add Approach" }),
within(doocracyDialog).getByRole("button", { name: "Add card" }),
);
await waitFor(() => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
});
expect(
screen.getByRole("checkbox", { name: "Steward finances" }),
screen.getByRole("checkbox", { name: "Shared money" }),
).toBeChecked();
expect(
screen.getByRole("checkbox", { name: "Project level decisions" }),
screen.getByRole("checkbox", { name: "Big decisions" }),
).toBeChecked();
await user.click(
screen.getByRole("button", {
name: /Lazy Consensus: A decision is assumed approved/,
name: /Lazy consensus: A proposal passes/,
}),
);
const lazyAgain = await screen.findByRole("dialog");
expect(
within(lazyAgain).getByRole("button", {
name: "Deselect Steward finances",
name: "Deselect Shared money",
}),
).toBeInTheDocument();
expect(
within(lazyAgain).getByRole("button", {
name: "Select Project level decisions",
name: "Select Big decisions",
}),
).toBeInTheDocument();
await user.click(
@@ -647,18 +647,18 @@ describe("Create flow decision-approaches page", () => {
await user.click(
screen.getByRole("button", {
name: /Do-ocracy: Decisions are made by those who take initiative/,
name: /Do-ocracy: Whoever does the work/,
}),
);
const doocracyAgain = await screen.findByRole("dialog");
expect(
within(doocracyAgain).getByRole("button", {
name: "Deselect Project level decisions",
name: "Deselect Big decisions",
}),
).toBeInTheDocument();
expect(
within(doocracyAgain).getByRole("button", {
name: "Select Steward finances",
name: "Select Shared money",
}),
).toBeInTheDocument();
});