diff --git a/.changeset/theme-toggle-followup.md b/.changeset/theme-toggle-followup.md new file mode 100644 index 00000000..ef937b02 --- /dev/null +++ b/.changeset/theme-toggle-followup.md @@ -0,0 +1,4 @@ +--- +--- + +test(e2e): name the theme navigation test for what it checks, fix tooltip test indentation, add a page-object html locator diff --git a/packages/bruno-api-docs/e2e/components/layout/theme-toggle.component.ts b/packages/bruno-api-docs/e2e/components/layout/theme-toggle.component.ts index 39dd6f7f..9176c2fb 100644 --- a/packages/bruno-api-docs/e2e/components/layout/theme-toggle.component.ts +++ b/packages/bruno-api-docs/e2e/components/layout/theme-toggle.component.ts @@ -3,6 +3,7 @@ import { BaseComponent } from '../base.component'; export class ThemeToggleComponent extends BaseComponent { readonly button = this.page.getByTestId('theme-toggle'); readonly tooltip = this.page.getByTestId('theme-toggle-tooltip'); + readonly html = this.page.locator('html'); async toggle(): Promise { await this.button.click(); diff --git a/packages/bruno-api-docs/e2e/tests/theming/theme-toggle.spec.ts b/packages/bruno-api-docs/e2e/tests/theming/theme-toggle.spec.ts index ff50bb7a..7597fb69 100644 --- a/packages/bruno-api-docs/e2e/tests/theming/theme-toggle.spec.ts +++ b/packages/bruno-api-docs/e2e/tests/theming/theme-toggle.spec.ts @@ -12,41 +12,40 @@ test.describe('Theme switcher', () => { await page.goto('/'); }); - test('starts in light mode, with the toggle offering "Switch to dark theme"', async ({ page, themeToggle }) => { - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light'); + test('starts in light mode, with the toggle offering "Switch to dark theme"', async ({ themeToggle }) => { + await expect(themeToggle.html).toHaveAttribute('data-theme', 'light'); await expect(themeToggle.button).toHaveAccessibleName('Switch to dark theme'); }); - test('names the action in a tooltip on hover', async ({ themeToggle }) => { - await themeToggle.button.hover(); + test('names the action in a tooltip on hover', async ({ themeToggle }) => { + await themeToggle.button.hover(); - await expect(themeToggle.tooltip).toHaveText('Switch to dark theme'); - }); + await expect(themeToggle.tooltip).toHaveText('Switch to dark theme'); + }); - test('switches the whole app to dark mode when the toggle is clicked', async ({ page, themeToggle }) => { - await themeToggle.toggle(); + test('switches the whole app to dark mode when the toggle is clicked', async ({ themeToggle }) => { + await themeToggle.toggle(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await expect(themeToggle.button).toHaveAccessibleName('Switch to light theme'); }); - test('switches back to light mode when the toggle is clicked again', async ({ page, themeToggle }) => { + test('switches back to light mode when the toggle is clicked again', async ({ themeToggle }) => { await themeToggle.toggle(); await themeToggle.toggle(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'light'); }); test('remembers the chosen theme across a page reload', async ({ page, themeToggle }) => { await themeToggle.toggle(); await page.reload(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); }); - test('remembers the chosen theme across Overview, Environments, and a request', async ({ - page, + test('keeps the chosen theme while moving between Overview, Environments, and a request', async ({ sidebar, themeToggle, overviewPage, @@ -54,35 +53,34 @@ test.describe('Theme switcher', () => { requestPage }) => { await themeToggle.toggle(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await sidebar.overview.click(); await expect(overviewPage.root).toBeVisible(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await sidebar.environments.click(); await expect(environmentsPage.root).toBeVisible(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await sidebar.open(['echo json']); await expect(requestPage.root).toBeVisible(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await expect(themeToggle.button).toHaveAccessibleName('Switch to light theme'); }); test('remembers the chosen theme when the doc is opened in a new tab', async ({ - page, context, themeToggle }) => { await themeToggle.toggle(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); const reopened = await context.newPage(); await reopened.goto('/'); const reopenedToggle = new ThemeToggleComponent(reopened); - await expect(reopened.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(reopenedToggle.html).toHaveAttribute('data-theme', 'dark'); await expect(reopenedToggle.button).toHaveAccessibleName('Switch to light theme'); }); }); @@ -94,18 +92,18 @@ test.describe('Theme switcher', () => { await page.goto('/'); }); - test('starts in dark mode, with the toggle offering "Switch to light theme"', async ({ page, themeToggle }) => { - await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + test('starts in dark mode, with the toggle offering "Switch to light theme"', async ({ themeToggle }) => { + await expect(themeToggle.html).toHaveAttribute('data-theme', 'dark'); await expect(themeToggle.button).toHaveAccessibleName('Switch to light theme'); }); test('keeps an explicit light choice after reload, even though the OS prefers dark', async ({ page, themeToggle }) => { await themeToggle.toggle(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'light'); await page.reload(); - await expect(page.locator('html')).toHaveAttribute('data-theme', 'light'); + await expect(themeToggle.html).toHaveAttribute('data-theme', 'light'); await expect(themeToggle.button).toHaveAccessibleName('Switch to dark theme'); }); });