Skip to content

Commit dc6b7cb

Browse files
authored
test(e2e): lessons ordering (#366)
1 parent a1d4f3c commit dc6b7cb

File tree

8 files changed

+63
-5
lines changed

8 files changed

+63
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
---
22
type: chapter
3-
title: filesystem
3+
title: File system
44
---
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
type: lesson
3+
title: Page one
4+
---
5+
6+
# Lesson order test - Page one
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
type: lesson
3+
title: Page two
4+
---
5+
6+
# Lesson order test - Page two
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
type: lesson
3+
title: Page three
4+
---
5+
6+
# Lesson order test - Page three
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
type: chapter
3+
title: Lesson order
4+
lessons:
5+
- 2-lesson
6+
- 3-lesson
7+
- 1-lesson
8+
---

e2e/test/lesson-order.test.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { test, expect } from '@playwright/test';
2+
3+
const BASE_URL = '/tests/lesson-order';
4+
5+
test('developer can configure custom order for lessons', async ({ page }) => {
6+
await page.goto(`${BASE_URL}/1-lesson`);
7+
await expect(page.getByRole('heading', { level: 1, name: 'Lesson order test - Page one' })).toBeVisible();
8+
9+
// navigation select can take a while to hydrate on page load, click until responsive
10+
await expect(async () => {
11+
const button = page.getByRole('button', { name: 'Tests / Lesson order / Page one' });
12+
await button.click();
13+
await expect(page.locator('[data-state="open"]', { has: button })).toBeVisible({ timeout: 50 });
14+
}).toPass();
15+
16+
const list = page.getByRole('region', { name: 'Lesson order' });
17+
18+
// configured ordered is [2, 3, 1]
19+
await expect(list.getByRole('listitem').nth(0)).toHaveText('Page two');
20+
await expect(list.getByRole('listitem').nth(1)).toHaveText('Page three');
21+
await expect(list.getByRole('listitem').nth(2)).toHaveText('Page one');
22+
});

e2e/test/navigation.test.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@ test('user can navigate between lessons using nav bar links', async ({ page }) =
2323
test('user can navigate between lessons using breadcrumbs', async ({ page }) => {
2424
await page.goto(`${BASE_URL}/page-one`);
2525

26-
await page.getByRole('button', { name: 'Tests / Navigation / Page one' }).click({ force: true });
26+
// navigation select can take a while to hydrate on page load, click until responsive
27+
await expect(async () => {
28+
const button = page.getByRole('button', { name: 'Tests / Navigation / Page one' });
29+
await button.click();
30+
await expect(page.locator('[data-state="open"]', { has: button })).toBeVisible({ timeout: 50 });
31+
}).toPass();
32+
2733
await page.getByRole('region', { name: 'Navigation' }).getByRole('link', { name: 'Page three' }).click();
2834

2935
await expect(page.getByRole('heading', { level: 1, name: 'Navigation test - Page three' })).toBeVisible();

e2e/test/terminal.test.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ test('user can open terminal', async ({ page }) => {
1515
// await expect(tab).not.toBeVisible();
1616
// await expect(panel).not.toBeVisible();
1717

18-
await page.getByRole('button', { name: 'Toggle Terminal' }).click();
18+
// terminal toggle can take a while to hydrate on page load, click until responsive
19+
await expect(async () => {
20+
await page.getByRole('button', { name: 'Toggle Terminal' }).click();
21+
22+
await expect(tab).toBeVisible({ timeout: 100 });
23+
await expect(panel).toBeVisible({ timeout: 100 });
24+
}).toPass();
1925

20-
await expect(tab).toBeVisible();
21-
await expect(panel).toBeVisible();
2226
await expect(panel).toContainText('~/tutorial', { useInnerText: true });
2327
});
2428

0 commit comments

Comments
 (0)