Match Home, top nav, hero, and logo wall to the current marketing frames.
Puts Workshops in the header, pairs the hero with a static rule card and breakpoint CTAs, and shows the three pilot marks with no wall label. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
e12e06f7ce
commit
33cdaf135c
47 files changed
+728
-527
No files matched your search
+30
-30
@@ -11,11 +11,11 @@ describe("Page", () => {
|
||||
render(<Page />);
|
||||
|
||||
// Check that all main sections are rendered (using getAllByText since there are multiple instances)
|
||||
expect(screen.getAllByText("Collaborate").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("with clarity").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Build structure").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("before you need it").length).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Help your community make important decisions in a way that reflects its unique values.",
|
||||
"Strong communities agree on four things early. They settle how they talk, who belongs, how they decide and what happens when they disagree. Write yours down together.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
|
||||
@@ -23,7 +23,7 @@ describe("Page", () => {
|
||||
// Check CardSteps section (using getAllByText since there are multiple instances)
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText("How CommunityRule works").length,
|
||||
screen.getAllByText("How CommunityRule helps").length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
expect(
|
||||
@@ -41,7 +41,7 @@ describe("Page", () => {
|
||||
});
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
|
||||
@@ -58,20 +58,20 @@ describe("Page", () => {
|
||||
render(<Page />);
|
||||
|
||||
// Check hero banner content (using getAllByText since there are multiple instances)
|
||||
expect(screen.getAllByText("Collaborate").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("with clarity").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Build structure").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("before you need it").length).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Help your community make important decisions in a way that reflects its unique values.",
|
||||
"Strong communities agree on four things early. They settle how they talk, who belongs, how they decide and what happens when they disagree. Write yours down together.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText("Learn how CommunityRule works").length,
|
||||
screen.getAllByText("Talk to a facilitator").length,
|
||||
).toBeGreaterThan(0);
|
||||
const learnLinks = screen.getAllByRole("link", {
|
||||
name: "Learn how CommunityRule works",
|
||||
name: "Talk to a facilitator",
|
||||
});
|
||||
expect(learnLinks[0]).toHaveAttribute("href", "/how-it-works");
|
||||
expect(learnLinks[0]).toHaveAttribute("href", "/workshops");
|
||||
});
|
||||
|
||||
test("renders CardSteps section with correct data", async () => {
|
||||
@@ -80,7 +80,7 @@ describe("Page", () => {
|
||||
// Wait for dynamically imported CardSteps component to load
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText("How CommunityRule works").length,
|
||||
screen.getAllByText("How CommunityRule helps").length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
expect(
|
||||
@@ -91,16 +91,16 @@ describe("Page", () => {
|
||||
|
||||
// Check individual card content (using getAllByText since there are multiple instances)
|
||||
expect(
|
||||
screen.getAllByText("Document how your community makes decisions").length,
|
||||
screen.getAllByText("See what has worked for other communities").length,
|
||||
).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Build an operating manual for a successful community",
|
||||
"Decide how you will decide, while things are calm",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Get a link to your manual for your group to review and evolve",
|
||||
"Invite your members and change it together as you grow",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
@@ -117,11 +117,11 @@ describe("Page", () => {
|
||||
});
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
const learnMore = screen.getAllByRole("link", {
|
||||
name: "Explore the toolkit",
|
||||
name: "Explore the patterns",
|
||||
});
|
||||
expect(learnMore[0]).toHaveAttribute("href", "/learn");
|
||||
});
|
||||
@@ -144,14 +144,14 @@ describe("Page", () => {
|
||||
|
||||
// Check that all major components are present by looking for their content
|
||||
// HeroBanner
|
||||
expect(screen.getAllByText("Collaborate").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Build structure").length).toBeGreaterThan(0);
|
||||
|
||||
// Wait for dynamically imported components to load
|
||||
// LogoWall - should be present (even if just the component structure)
|
||||
// CardSteps
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText("How CommunityRule works").length,
|
||||
screen.getAllByText("How CommunityRule helps").length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
@@ -174,7 +174,7 @@ describe("Page", () => {
|
||||
test("has correct page structure", () => {
|
||||
render(<Page />);
|
||||
|
||||
const mainContainer = screen.getAllByText("Collaborate")[0].closest("div");
|
||||
const mainContainer = screen.getAllByText("Build structure")[0].closest("div");
|
||||
expect(mainContainer).toBeInTheDocument();
|
||||
});
|
||||
|
||||
@@ -183,7 +183,7 @@ describe("Page", () => {
|
||||
|
||||
// Check CTA button in hero banner
|
||||
expect(
|
||||
screen.getAllByText("Learn how CommunityRule works").length,
|
||||
screen.getAllByText("Talk to a facilitator").length,
|
||||
).toBeGreaterThan(0);
|
||||
|
||||
// Check CTA button in ask organizer section
|
||||
@@ -196,7 +196,7 @@ describe("Page", () => {
|
||||
// Check main description (using getAllByText since there are multiple instances)
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Help your community make important decisions in a way that reflects its unique values.",
|
||||
"Strong communities agree on four things early. They settle how they talk, who belongs, how they decide and what happens when they disagree. Write yours down together.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
|
||||
@@ -213,7 +213,7 @@ describe("Page", () => {
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
@@ -228,12 +228,12 @@ describe("Page", () => {
|
||||
render(<Page />);
|
||||
|
||||
// Check all section titles (using getAllByText since there are multiple instances)
|
||||
expect(screen.getAllByText("Collaborate").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Build structure").length).toBeGreaterThan(0);
|
||||
|
||||
// Wait for dynamically imported components
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText("How CommunityRule works").length,
|
||||
screen.getAllByText("How CommunityRule helps").length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
await waitFor(() => {
|
||||
@@ -254,18 +254,18 @@ describe("Page", () => {
|
||||
await waitFor(() => {
|
||||
// Three Step tiles inside CardSteps
|
||||
expect(
|
||||
screen.getAllByText("Document how your community makes decisions")
|
||||
screen.getAllByText("See what has worked for other communities")
|
||||
.length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Build an operating manual for a successful community",
|
||||
"Decide how you will decide, while things are calm",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Get a link to your manual for your group to review and evolve",
|
||||
"Invite your members and change it together as you grow",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
@@ -274,7 +274,7 @@ describe("Page", () => {
|
||||
render(<Page />);
|
||||
|
||||
// Check subtitles (using getAllByText since there are multiple instances)
|
||||
expect(screen.getAllByText("with clarity").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("before you need it").length).toBeGreaterThan(0);
|
||||
|
||||
// Wait for dynamically imported components
|
||||
await waitFor(() => {
|
||||
@@ -287,7 +287,7 @@ describe("Page", () => {
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getAllByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
).length,
|
||||
).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
@@ -28,33 +28,31 @@ describe("Page Flow Integration", () => {
|
||||
|
||||
// Hero Banner section
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "Collaborate" }),
|
||||
screen.getByRole("heading", { name: "Build structure" }),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "with clarity" }),
|
||||
screen.getByRole("heading", { name: "before you need it" }),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText(
|
||||
"Help your community make important decisions in a way that reflects its unique values.",
|
||||
"Strong communities agree on four things early. They settle how they talk, who belongs, how they decide and what happens when they disagree. Write yours down together.",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
const ctaButtons = screen.getAllByRole("link", {
|
||||
name: "Learn how CommunityRule works",
|
||||
name: "Talk to a facilitator",
|
||||
});
|
||||
expect(ctaButtons.length).toBeGreaterThan(0);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByAltText("Food Not Bombs")).toBeInTheDocument();
|
||||
});
|
||||
expect(screen.getByAltText("Start COOP")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("Metagov")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("Open Civics")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("Mutual Aid CO")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("CU Boulder")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("Boulder Street Medics")).toBeInTheDocument();
|
||||
expect(screen.getByAltText("Mutual Aid Colorado")).toBeInTheDocument();
|
||||
expect(screen.queryByAltText("Start COOP")).not.toBeInTheDocument();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getByRole("heading", { name: /How CommunityRule works/ }),
|
||||
screen.getByRole("heading", { name: /How CommunityRule helps/ }),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
expect(
|
||||
@@ -63,25 +61,27 @@ describe("Page Flow Integration", () => {
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText("Document how your community makes decisions"),
|
||||
screen.getByText("See what has worked for other communities"),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText("Build an operating manual for a successful community"),
|
||||
screen.getByText("Decide how you will decide, while things are calm"),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText(
|
||||
"Get a link to your manual for your group to review and evolve",
|
||||
"Invite your members and change it together as you grow",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByRole("heading", { name: "Consensus" })).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "Devolution" }),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "Do-ocracy" }),
|
||||
screen.getByRole("heading", { name: "Consensus" }),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "Devolution" }),
|
||||
screen.getByRole("heading", { name: "Do-ocracy" }),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByRole("heading", { name: "Quadratic Governance" }),
|
||||
@@ -96,7 +96,7 @@ describe("Page Flow Integration", () => {
|
||||
});
|
||||
expect(
|
||||
screen.getByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
|
||||
@@ -120,11 +120,11 @@ describe("Page Flow Integration", () => {
|
||||
renderPage();
|
||||
|
||||
const ctaLinks = screen.getAllByRole("link", {
|
||||
name: "Learn how CommunityRule works",
|
||||
name: "Talk to a facilitator",
|
||||
});
|
||||
const ctaLink = ctaLinks[0];
|
||||
expect(ctaLink).toBeInTheDocument();
|
||||
expect(ctaLink).toHaveAttribute("href", "/how-it-works");
|
||||
expect(ctaLink).toHaveAttribute("href", "/workshops");
|
||||
|
||||
await user.click(ctaLink);
|
||||
expect(ctaLink).toBeInTheDocument();
|
||||
@@ -135,13 +135,13 @@ describe("Page Flow Integration", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
const cards = screen.getAllByText(
|
||||
/Document how your community|Build an operating manual|Get a link to your manual/,
|
||||
/See what has worked for other communities|Decide how you will decide|Invite your members and change it together/,
|
||||
);
|
||||
expect(cards.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
const cards = screen.getAllByText(
|
||||
/Document how your community|Build an operating manual|Get a link to your manual/,
|
||||
/See what has worked for other communities|Decide how you will decide|Invite your members and change it together/,
|
||||
);
|
||||
expect(cards.length).toBeGreaterThan(0);
|
||||
|
||||
@@ -153,11 +153,11 @@ describe("Page Flow Integration", () => {
|
||||
renderPage();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("Consensus")).toBeInTheDocument();
|
||||
expect(screen.getByText("Devolution")).toBeInTheDocument();
|
||||
});
|
||||
expect(screen.queryByText("Solidarity Network")).not.toBeInTheDocument();
|
||||
expect(screen.getByText("Do-ocracy")).toBeInTheDocument();
|
||||
expect(screen.getByText("Devolution")).toBeInTheDocument();
|
||||
expect(screen.getAllByText("Consensus").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Do-ocracy").length).toBeGreaterThan(0);
|
||||
expect(screen.getByText("Quadratic Governance")).toBeInTheDocument();
|
||||
|
||||
const seeAll = screen.getByRole("link", { name: "See all templates" });
|
||||
@@ -189,7 +189,7 @@ describe("Page Flow Integration", () => {
|
||||
expect(headings.length).toBeGreaterThan(4);
|
||||
|
||||
const mainContent = screen.getByText(
|
||||
/Help your community make important decisions/,
|
||||
/Strong communities agree on four things early/,
|
||||
);
|
||||
expect(mainContent).toBeInTheDocument();
|
||||
});
|
||||
@@ -220,15 +220,15 @@ describe("Page Flow Integration", () => {
|
||||
renderPage();
|
||||
|
||||
expect(
|
||||
screen.getByText(/Help your community make important decisions/),
|
||||
screen.getByText(/Strong communities agree on four things early/),
|
||||
).toBeInTheDocument();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("How CommunityRule works")).toBeInTheDocument();
|
||||
expect(screen.getByText("How CommunityRule helps")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("Consensus")).toBeInTheDocument();
|
||||
expect(screen.getByText("Devolution")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
|
||||
@@ -38,16 +38,16 @@ describe("User Journey Integration", () => {
|
||||
renderPageWithFooter();
|
||||
|
||||
expect(
|
||||
screen.getByText(/Help your community make important decisions/),
|
||||
screen.getByText(/Strong communities agree on four things early/),
|
||||
).toBeInTheDocument();
|
||||
|
||||
const learnLinks = screen.getAllByRole("link", {
|
||||
name: "Learn how CommunityRule works",
|
||||
name: "Talk to a facilitator",
|
||||
});
|
||||
await user.click(learnLinks[0]);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("How CommunityRule works")).toBeInTheDocument();
|
||||
expect(screen.getByText("How CommunityRule helps")).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,10 +56,10 @@ describe("User Journey Integration", () => {
|
||||
renderPage();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("Consensus")).toBeInTheDocument();
|
||||
expect(screen.getByText("Devolution")).toBeInTheDocument();
|
||||
});
|
||||
expect(screen.getByText("Do-ocracy")).toBeInTheDocument();
|
||||
expect(screen.getByText("Devolution")).toBeInTheDocument();
|
||||
expect(screen.getAllByText("Consensus").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("Do-ocracy").length).toBeGreaterThan(0);
|
||||
expect(screen.getByText("Quadratic Governance")).toBeInTheDocument();
|
||||
|
||||
const seeHowLinks = screen.getAllByRole("link", {
|
||||
@@ -109,15 +109,15 @@ describe("User Journey Integration", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
screen.getByText("Document how your community makes decisions"),
|
||||
screen.getByText("See what has worked for other communities"),
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
expect(
|
||||
screen.getByText("Build an operating manual for a successful community"),
|
||||
screen.getByText("Decide how you will decide, while things are calm"),
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText(
|
||||
"Get a link to your manual for your group to review and evolve",
|
||||
"Invite your members and change it together as you grow",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
|
||||
@@ -156,7 +156,7 @@ describe("User Journey Integration", () => {
|
||||
});
|
||||
expect(
|
||||
screen.getByText(
|
||||
"Every group runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
"Every community runs into the same knots. CommunityRule gives you a way through, and a written record of what you decided.",
|
||||
),
|
||||
).toBeInTheDocument();
|
||||
|
||||
@@ -173,11 +173,8 @@ describe("User Journey Integration", () => {
|
||||
const partnerLogos = logoImages.filter(
|
||||
(img) =>
|
||||
img.alt?.includes("Food Not Bombs") ||
|
||||
img.alt?.includes("Start COOP") ||
|
||||
img.alt?.includes("Metagov") ||
|
||||
img.alt?.includes("Open Civics") ||
|
||||
img.alt?.includes("Mutual Aid CO") ||
|
||||
img.alt?.includes("CU Boulder"),
|
||||
img.alt?.includes("Boulder Street Medics") ||
|
||||
img.alt?.includes("Mutual Aid Colorado"),
|
||||
);
|
||||
expect(partnerLogos.length).toBeGreaterThan(0);
|
||||
});
|
||||
@@ -193,11 +190,11 @@ describe("User Journey Integration", () => {
|
||||
test("user completes the full journey from discovery to action", async () => {
|
||||
renderPageWithFooter();
|
||||
|
||||
expect(screen.getByText("Collaborate")).toBeInTheDocument();
|
||||
expect(screen.getByText("with clarity")).toBeInTheDocument();
|
||||
expect(screen.getByText("Build structure")).toBeInTheDocument();
|
||||
expect(screen.getByText("before you need it")).toBeInTheDocument();
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("How CommunityRule works")).toBeInTheDocument();
|
||||
expect(screen.getByText("How CommunityRule helps")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
await waitFor(() => {
|
||||
|
||||
Reference in new issue
Block a user