From 06b8a279c758ca2db83571a532757e6dac15caf6 Mon Sep 17 00:00:00 2001 From: Nolann Biron Date: Tue, 17 Jun 2025 09:18:55 +0200 Subject: [PATCH] Add tests for mobile menu --- packages/gitbook/e2e/internal.spec.ts | 51 +++++++++++++++++++ packages/gitbook/e2e/util.ts | 15 ++++-- .../Header/HeaderMobileMenuButton.tsx | 1 + .../TableOfContents/TableOfContents.tsx | 4 +- 4 files changed, 66 insertions(+), 5 deletions(-) diff --git a/packages/gitbook/e2e/internal.spec.ts b/packages/gitbook/e2e/internal.spec.ts index 3efe00bd2..b35b0f182 100644 --- a/packages/gitbook/e2e/internal.spec.ts +++ b/packages/gitbook/e2e/internal.spec.ts @@ -1621,6 +1621,57 @@ const testCases: TestsCase[] = [ ]), ], }, + { + name: 'Mobile menu', + contentBaseURL: 'https://gitbook-open-e2e-sites.gitbook.io/', + tests: [ + { + name: 'Mobile menu open', + viewports: ['iphone-x'], + url: '', + run: async (page) => { + // Set mobile viewport size to ensure mobile menu is visible + await page.setViewportSize({ width: 375, height: 812 }); // iPhone X dimensions + + await page.locator('[data-testid="mobile-menu-button"]').click(); + + // Wait for table of contents to appear + const tableOfContents = page.locator('[data-testid="table-of-contents"]'); + await tableOfContents.waitFor({ state: 'visible', timeout: 5000 }); + await expect(tableOfContents).toBeVisible(); + }, + }, + { + name: 'Mobile menu with dropdown menu', + viewports: ['iphone-x'], + url: 'multi-variants/', + run: async (page) => { + // Set mobile viewport size to ensure mobile menu is visible + await page.setViewportSize({ width: 375, height: 812 }); // iPhone X dimensions + + await page.locator('[data-testid="mobile-menu-button"]').click(); + + // Wait for table of contents to appear + const tableOfContents = page.locator('[data-testid="table-of-contents"]'); + await tableOfContents.waitFor({ state: 'visible', timeout: 5000 }); + await expect(tableOfContents).toBeVisible(); + + // Wait for space dropdown button to be visible + const spaceDropdownButton = tableOfContents.locator( + '[data-testid="space-dropdown-button"]' + ); + await spaceDropdownButton.waitFor({ state: 'visible', timeout: 5000 }); + await expect(spaceDropdownButton).toBeVisible(); + await spaceDropdownButton.click(); + + // Wait for space dropdown to appear + const spaceDropdown = page.locator('[data-testid="dropdown-menu"]'); + await spaceDropdown.waitFor({ state: 'visible', timeout: 5000 }); + await expect(spaceDropdown).toBeVisible(); + }, + }, + ], + }, ]; runTestCases(testCases); diff --git a/packages/gitbook/e2e/util.ts b/packages/gitbook/e2e/util.ts index f54b70fbe..1d47459be 100644 --- a/packages/gitbook/e2e/util.ts +++ b/packages/gitbook/e2e/util.ts @@ -64,6 +64,10 @@ export interface Test { * Whether to only run this test. */ only?: boolean; + /** + * Viewport to use for the test. + */ + viewports?: ('macbook-16' | 'macbook-13' | 'ipad-2' | 'iphone-x')[]; } export type TestsCase = { @@ -159,7 +163,7 @@ export function runTestCases(testCases: TestsCase[]) { test.describe(testCase.name, () => { for (const testEntry of testCase.tests) { - const { mode = 'page' } = testEntry; + const { mode = 'page', viewports } = testEntry; const testFn = testEntry.only ? test.only : test; testFn(testEntry.name, async ({ page, context }) => { const testEntryPathname = @@ -204,13 +208,18 @@ export function runTestCases(testCases: TestsCase[]) { const screenshotName = `${testCase.name} - ${testEntry.name}`; if (mode === 'image') { await argosScreenshot(page, screenshotName, { - viewports: ['macbook-13'], + viewports: viewports ?? ['macbook-13'], threshold: screenshotOptions?.threshold ?? undefined, fullPage: true, }); } else { await argosScreenshot(page, screenshotName, { - viewports: ['macbook-16', 'macbook-13', 'ipad-2', 'iphone-x'], + viewports: viewports ?? [ + 'macbook-16', + 'macbook-13', + 'ipad-2', + 'iphone-x', + ], argosCSS: ` /* Hide Intercom */ .intercom-lightweight-app { diff --git a/packages/gitbook/src/components/Header/HeaderMobileMenuButton.tsx b/packages/gitbook/src/components/Header/HeaderMobileMenuButton.tsx index 99609a46d..5bb5cf146 100644 --- a/packages/gitbook/src/components/Header/HeaderMobileMenuButton.tsx +++ b/packages/gitbook/src/components/Header/HeaderMobileMenuButton.tsx @@ -23,6 +23,7 @@ export function HeaderMobileMenuButton(