Skip to content

Commit 2bae366

Browse files
committed
fix e2e tests
1 parent a6ada09 commit 2bae366

File tree

8 files changed

+124
-126
lines changed

8 files changed

+124
-126
lines changed

e2e/home.test.ts

Lines changed: 0 additions & 121 deletions
This file was deleted.

playwright.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { defineConfig, devices } from "@playwright/test";
22

33
export default defineConfig({
4-
testDir: "e2e",
4+
testDir: "test/e2e",
55
fullyParallel: true,
66
forbidOnly: !!process.env.CI,
77
retries: process.env.CI ? 2 : 0,

src/Index.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@
200200
data-testid={`framework-button-${framework.id}`}
201201
onclick={() => {
202202
toggleFrameworkId(framework.id);
203-
frameworkIdsStorage.setJSON(frameworkIdsSelectedArr);
203+
if (frameworkIdsSelectedArr.length === 0) {
204+
frameworkIdsStorage.remove();
205+
} else {
206+
frameworkIdsStorage.setJSON(frameworkIdsSelectedArr);
207+
}
204208
}}
205209
>
206210
<FrameworkLabel id={framework.id} size={16} />
File renamed without changes.
File renamed without changes.

test/e2e/home.test.ts

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { expect, test } from "@playwright/test";
2+
import { TestHelpers } from "./utils/test-helpers";
3+
4+
test.describe("Homepage", () => {
5+
let testHelpers: TestHelpers;
6+
7+
test.beforeEach(async ({ page }) => {
8+
testHelpers = new TestHelpers(page);
9+
await page.goto("/");
10+
});
11+
12+
test("should display the main header and navigation", async ({ page }) => {
13+
await expect(page.getByRole("banner")).toBeVisible();
14+
await expect(
15+
page.getByRole("heading", { name: "Component Party" }),
16+
).toBeVisible();
17+
});
18+
19+
test("should display default frameworks on first visit", async () => {
20+
// Clear localStorage to simulate first visit
21+
await testHelpers.clearFrameworkSelection();
22+
23+
// Wait for frameworks to load
24+
await testHelpers.waitForFrameworksToLoad();
25+
26+
const selectedFrameworks = await testHelpers.getSelectedFrameworks();
27+
expect(selectedFrameworks).toContain("react");
28+
expect(selectedFrameworks).toContain("svelte5");
29+
});
30+
31+
test("should allow toggling framework selection", async ({ page }) => {
32+
// Wait for frameworks to load
33+
await testHelpers.waitForFrameworksToLoad();
34+
35+
// Deselect React
36+
await testHelpers.deselectFramework("react");
37+
38+
// Verify React is no longer selected
39+
const selectedFrameworks = await testHelpers.getSelectedFrameworks();
40+
expect(selectedFrameworks).not.toContain("react");
41+
42+
// Reselect React
43+
await testHelpers.selectFramework("react");
44+
45+
// Wait for the selection to update
46+
await testHelpers.waitForFrameworksToLoad();
47+
48+
// Verify React is selected again
49+
const selectedFrameworksAfter = await testHelpers.getSelectedFrameworks();
50+
expect(selectedFrameworksAfter).toContain("react");
51+
});
52+
53+
test("should show framework selection prompt when no frameworks are selected", async ({
54+
page,
55+
}) => {
56+
// Clear localStorage to simulate first visit
57+
await testHelpers.clearFrameworkSelection();
58+
59+
await testHelpers.waitForFrameworksToLoad();
60+
61+
// Deselect all frameworks
62+
await testHelpers.deselectAllFrameworks();
63+
64+
await expect(page.getByTestId("empty-state")).toBeVisible();
65+
await expect(page.getByTestId("empty-state-message")).toContainText(
66+
"Please select a framework",
67+
);
68+
});
69+
70+
test("should display content sections when frameworks are selected", async ({
71+
page,
72+
}) => {
73+
// Wait for frameworks to be selected
74+
await testHelpers.waitForFrameworksToLoad();
75+
76+
// Wait for content to load
77+
await testHelpers.waitForContentToLoad();
78+
79+
// Check that we have content sections
80+
await expect(page.getByRole("heading", { level: 1 })).toHaveCount(7); // 6 main sections + 1 header
81+
82+
// Check for specific sections using test IDs
83+
await expect(page.getByTestId("section-reactivity")).toBeVisible();
84+
await expect(page.getByTestId("section-templating")).toBeVisible();
85+
});
86+
});

e2e/integration.test.ts renamed to test/e2e/integration.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ test.describe("Integration Tests", () => {
1515
}) => {
1616
// Start with no frameworks selected
1717
await helpers.clearFrameworkSelection();
18+
await helpers.deselectAllFrameworks();
1819

1920
// Verify empty state using test ID
2021
await expect(page.getByTestId("empty-state")).toBeVisible();
@@ -70,8 +71,8 @@ test.describe("Integration Tests", () => {
7071
// Add another framework
7172
await helpers.selectFramework("svelte5");
7273

73-
// Should navigate back to home
74-
await expect(page).toHaveURL("/");
74+
// Should navigate back to home (with framework parameters)
75+
await expect(page).toHaveURL(/\/\?f=/);
7576

7677
// Verify all three frameworks are selected
7778
const updatedFrameworks = await helpers.getSelectedFrameworks();

e2e/utils/test-helpers.ts renamed to test/e2e/utils/test-helpers.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export class TestHelpers {
66
async clearFrameworkSelection() {
77
await this.page.evaluate(() => {
88
localStorage.removeItem("framework_display");
9-
localStorage.setItem("framework_display_initialized", "true");
109
});
1110
await this.page.reload();
1211
}
@@ -35,6 +34,35 @@ export class TestHelpers {
3534
await button.click();
3635
}
3736

37+
async deselectFramework(frameworkId: string) {
38+
const button = this.page.getByTestId(`framework-button-${frameworkId}`);
39+
await expect(button).toBeVisible();
40+
await button.click();
41+
}
42+
43+
async toggleFramework(frameworkId: string) {
44+
const button = this.page.getByTestId(`framework-button-${frameworkId}`);
45+
await expect(button).toBeVisible();
46+
await button.click();
47+
}
48+
49+
async selectFrameworks(frameworkIds: string[]) {
50+
for (const frameworkId of frameworkIds) {
51+
await this.selectFramework(frameworkId);
52+
}
53+
}
54+
55+
async deselectFrameworks(frameworkIds: string[]) {
56+
for (const frameworkId of frameworkIds) {
57+
await this.deselectFramework(frameworkId);
58+
}
59+
}
60+
61+
async deselectAllFrameworks() {
62+
const selectedFrameworks = await this.getSelectedFrameworks();
63+
await this.deselectFrameworks(selectedFrameworks);
64+
}
65+
3866
async getFrameworkButton(frameworkId: string) {
3967
return this.page.getByTestId(`framework-button-${frameworkId}`);
4068
}

0 commit comments

Comments
 (0)