Skip to content

Commit 0bf1034

Browse files
committed
Add integration tests for dark mode toggle functionality on desktop and mobile
1 parent 781cf69 commit 0bf1034

4 files changed

Lines changed: 58 additions & 10 deletions

File tree

src/lib/components/dark-mode-navigation-button.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@
3333
tooltip={buttonText}
3434
label={buttonText}
3535
icon={buttonIcon}
36+
data-testid="dark-mode-navigation-button"
3637
/>

src/lib/holocene/navigation/navigation-button.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<div
2626
class="flex h-6 w-6 items-center after:absolute after:left-[calc(100%_+_1.5rem)] after:top-0 after:hidden after:h-8 after:items-center after:bg-slate-800 after:p-1 after:px-2 after:text-xs after:text-white after:content-[attr(data-tooltip)] group-data-[nav=closed]:hover:after:flex"
2727
data-tooltip={tooltip}
28+
aria-hidden="true"
2829
>
2930
<Icon name={icon} {animate} {active} />
3031
</div>

tests/integration/dark-mode-toggle.desktop.spec.ts renamed to tests/integration/dark-mode.desktop.spec.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
import { expect, test } from '@playwright/test';
22

3-
import {
4-
mockWorkflowsApis,
5-
waitForWorkflowsApis,
6-
} from '~/test-utilities/mock-apis';
3+
import { mockWorkflowsApis } from '~/test-utilities/mock-apis';
74

85
test.describe('Dark Mode Toggle', () => {
96
test.beforeEach(async ({ page }) => {
107
await mockWorkflowsApis(page);
11-
await page.goto('/namespaces/default/workflows');
12-
await waitForWorkflowsApis(page, false);
8+
await page.goto('/');
139
});
1410

1511
test('user can toggle dark mode between on, off, and system default', async ({
@@ -20,7 +16,6 @@ test.describe('Dark Mode Toggle', () => {
2016
const dayLabel = 'Day';
2117

2218
// starts on day mode
23-
// const button = page.getByRole('button', { name: dayLabel });
2419
const button = page.getByTestId('dark-mode-icon-button');
2520

2621
await expect(button).toBeVisible();
@@ -31,21 +26,21 @@ test.describe('Dark Mode Toggle', () => {
3126

3227
// after day is system mode
3328
await button.click();
34-
await expect(button).toHaveAttribute('aria-label', systemDefaultLabel);
29+
await expect(button).toHaveAccessibleName(systemDefaultLabel);
3530
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
3631
JSON.stringify('system'),
3732
);
3833

3934
// after system is dark mode
4035
await button.click();
41-
await expect(button).toHaveAttribute('aria-label', nightLabel);
36+
await expect(button).toHaveAccessibleName(nightLabel);
4237
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
4338
JSON.stringify(true),
4439
);
4540

4641
// cycle back to day
4742
await button.click();
48-
await expect(button).toHaveAttribute('aria-label', dayLabel);
43+
await expect(button).toHaveAccessibleName(dayLabel);
4944
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
5045
JSON.stringify(false),
5146
);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { expect, test } from '@playwright/test';
2+
3+
import { mockWorkflowsApis } from '~/test-utilities/mock-apis';
4+
5+
test.describe('Dark Mode Toggle', () => {
6+
test.beforeEach(async ({ page }) => {
7+
await mockWorkflowsApis(page);
8+
await page.goto('/');
9+
});
10+
11+
test('user can toggle dark mode between on, off, and system default', async ({
12+
page,
13+
}) => {
14+
const nightLabel = 'Night';
15+
const systemDefaultLabel = 'System Default';
16+
const dayLabel = 'Day';
17+
18+
// on mobile, the dark mode button is in the profile menu
19+
await page.getByTestId('nav-profile-button').click();
20+
21+
// starts on day mode
22+
const button = page.getByTestId('dark-mode-navigation-button');
23+
24+
await expect(button).toBeVisible();
25+
26+
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
27+
null, // nothing in local storage yet
28+
);
29+
30+
// after day is system mode
31+
await button.click();
32+
await expect(button).toHaveAccessibleName(systemDefaultLabel);
33+
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
34+
JSON.stringify('system'),
35+
);
36+
37+
// after system is dark mode
38+
await button.click();
39+
await expect(button).toHaveAccessibleName(nightLabel);
40+
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
41+
JSON.stringify(true),
42+
);
43+
44+
// cycle back to day
45+
await button.click();
46+
await expect(button).toHaveAccessibleName(dayLabel);
47+
expect(await page.evaluate(() => localStorage.getItem('dark mode'))).toBe(
48+
JSON.stringify(false),
49+
);
50+
});
51+
});

0 commit comments

Comments
 (0)