import {
renderWithProviders as render,
screen,
cleanup,
within,
} from "../utils/test-utils";
import userEvent from "@testing-library/user-event";
import { describe, test, expect, afterEach } from "vitest";
import RightRailPage from "../../app/create/right-rail/page";
afterEach(() => {
cleanup();
});
describe("Create flow right-rail page", () => {
test("renders without error", () => {
render();
expect(
screen.getByRole("heading", {
name: "How should conflicts be resolved?",
}),
).toBeInTheDocument();
});
test("renders sidebar description with add link", () => {
render();
const description = screen.getByText((content, element) => {
if (element?.tagName !== "P") return false;
const text = element.textContent ?? "";
return (
text.includes("You can also combine or") &&
text.includes("add") &&
text.includes("new approaches to the list")
);
});
expect(description).toBeInTheDocument();
});
test("renders message box with title and checkboxes", () => {
render();
const region = screen.getByRole("region", {
name: "Consider defining approaches to steward key resources:",
});
expect(region).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", {
name: "Amend your CommunityRule",
}),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", { name: "Steward finances" }),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", { name: "Project level decisions" }),
).toBeInTheDocument();
expect(
within(region).getByRole("checkbox", {
name: "Discipline and member termination",
}),
).toBeInTheDocument();
});
test("renders card stack with See all decision approaches toggle", () => {
render();
expect(
screen.getByRole("button", { name: "See all decision approaches" }),
).toBeInTheDocument();
});
test("renders recommended approach cards", () => {
render();
expect(
screen.getByRole("button", {
name: /Mediation: Collaborative work to reach a resolution/,
}),
).toBeInTheDocument();
expect(
screen.getByRole("button", {
name: /Facilitated dialogue: Structured sessions/,
}),
).toBeInTheDocument();
expect(
screen.getByRole("button", {
name: /Invite-only: Private discussions with selected participants/,
}),
).toBeInTheDocument();
});
test("toggle expands and shows Show less", async () => {
const user = userEvent.setup();
render();
const toggle = screen.getByRole("button", {
name: "See all decision approaches",
});
await user.click(toggle);
expect(
screen.getByRole("button", { name: "Show less" }),
).toBeInTheDocument();
});
test("expanded view shows Label cards", async () => {
const user = userEvent.setup();
render();
const toggle = screen.getByRole("button", {
name: "See all decision approaches",
});
await user.click(toggle);
const labelButtons = screen.getAllByRole("button", { name: /^Label/ });
expect(labelButtons.length).toBeGreaterThanOrEqual(1);
});
test("clicking a card toggles selection", async () => {
const user = userEvent.setup();
render();
const mediationCard = screen.getByRole("button", {
name: /Mediation: Collaborative work to reach a resolution/,
});
await user.click(mediationCard);
expect(screen.getByText("SELECTED")).toBeInTheDocument();
});
test("message box checkboxes are interactive", async () => {
const user = userEvent.setup();
render();
const amendCheckbox = screen.getByRole("checkbox", {
name: "Amend your CommunityRule",
});
expect(amendCheckbox).not.toBeChecked();
await user.click(amendCheckbox);
expect(amendCheckbox).toBeChecked();
});
});