-
-
Notifications
You must be signed in to change notification settings - Fork 257
refactor: refactoring navbars #1195
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
51dc3f8
be70e99
0808cbc
949389f
bd7b348
482b405
80b836d
3eb6f20
53682b0
876486a
57dae95
b7de7a6
86f806b
09e42d4
f642c1c
6e0bc9d
c671d16
e0bf40d
21a333c
f4ec369
f66a9f1
5e5c0e1
76414e8
95b07eb
a15986e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,100 @@ | ||
| open ReactRouter | ||
| open Vitest | ||
|
|
||
| test("desktop has everything visible", async () => { | ||
| await viewport(1440, 500) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarPrimary /> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| let leftContent = await screen->getByTestId("navbar-primary-left-content") | ||
|
|
||
| await element(leftContent->getByText("Docs"))->toBeVisible | ||
|
||
| await element(leftContent->getByText("Playground"))->toBeVisible | ||
| await element(leftContent->getByText("Blog"))->toBeVisible | ||
| await element(leftContent->getByText("Community"))->toBeVisible | ||
|
|
||
| let rightContent = await screen->getByTestId("navbar-primary-right-content") | ||
|
|
||
| await element(rightContent->getByLabelText("Github"))->toBeVisible | ||
|
||
| await element(rightContent->getByLabelText("X (formerly Twitter)"))->toBeVisible | ||
| await element(rightContent->getByLabelText("Bluesky"))->toBeVisible | ||
| await element(rightContent->getByLabelText("Forum"))->toBeVisible | ||
|
|
||
| let navbar = await screen->getByTestId("navbar-primary") | ||
|
|
||
| await element(navbar)->toMatchScreenshot("desktop-navbar-primary") | ||
| }) | ||
|
|
||
| test("tablet has everything visible", async () => { | ||
| await viewport(900, 500) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarPrimary /> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| let leftContent = await screen->getByTestId("navbar-primary-left-content") | ||
|
|
||
| await element(leftContent->getByText("Docs"))->toBeVisible | ||
| await element(leftContent->getByText("Playground"))->toBeVisible | ||
| await element(leftContent->getByText("Blog"))->toBeVisible | ||
| await element(leftContent->getByText("Community"))->toBeVisible | ||
|
|
||
| let rightContent = await screen->getByTestId("navbar-primary-right-content") | ||
|
|
||
| await element(rightContent->getByLabelText("Github"))->toBeVisible | ||
| await element(rightContent->getByLabelText("X (formerly Twitter)"))->toBeVisible | ||
| await element(rightContent->getByLabelText("Bluesky"))->toBeVisible | ||
| await element(rightContent->getByLabelText("Forum"))->toBeVisible | ||
|
|
||
| let navbar = await screen->getByTestId("navbar-primary") | ||
|
|
||
| await element(navbar)->toMatchScreenshot("tablet-navbar-primary") | ||
| }) | ||
|
|
||
| test("phone has some things hidden and a mobile nav that can be toggled", async () => { | ||
| await viewport(600, 1200) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarPrimary /> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| let leftContent = await screen->getByTestId("navbar-primary-left-content") | ||
|
|
||
| await element(leftContent->getByText("Docs"))->toBeVisible | ||
| await element(leftContent->getByText("Playground"))->notToBeVisible | ||
| await element(leftContent->getByText("Blog"))->notToBeVisible | ||
| await element(leftContent->getByText("Community"))->notToBeVisible | ||
|
|
||
| let rightContent = await screen->getByTestId("navbar-primary-right-content") | ||
|
|
||
| await element(rightContent->getByLabelText("Github"))->notToBeVisible | ||
| await element(rightContent->getByLabelText("X (formerly Twitter)"))->notToBeVisible | ||
| await element(rightContent->getByLabelText("Bluesky"))->notToBeVisible | ||
| await element(rightContent->getByLabelText("Forum"))->notToBeVisible | ||
|
|
||
| await element(screen->getByTestId("mobile-nav"))->notToBeVisible | ||
|
|
||
| let button = await screen->getByTestId("toggle-mobile-overlay") | ||
|
|
||
| await element(button)->toBeVisible | ||
|
|
||
| await button->click | ||
|
|
||
| let mobileNav = await screen->getByTestId("mobile-nav") | ||
|
|
||
| await element(mobileNav)->toBeVisible | ||
|
|
||
| let navbar = await screen->getByTestId("navbar-primary") | ||
|
|
||
| await element(navbar)->toMatchScreenshot("mobile-navbar-primary") | ||
|
|
||
| await element(mobileNav)->toMatchScreenshot("mobile-overlay-navbar-primary") | ||
| }) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| open ReactRouter | ||
| open Vitest | ||
|
|
||
| let sidebarContent = | ||
| <aside> | ||
| <div dataTestId="sidebar-version-select"> {React.string("v12 (latest)")} </div> | ||
| <div dataTestId="sidebar-categories"> | ||
| <div> {React.string("OVERVIEW")} </div> | ||
| <div> {React.string("Introduction")} </div> | ||
| </div> | ||
| </aside> | ||
|
|
||
| let breadcrumbs = | ||
| <span dataTestId="breadcrumbs"> {React.string("Docs / Language Manual / Installation")} </span> | ||
|
|
||
| let editLink = <a dataTestId="edit-link" href="#"> {React.string("Edit")} </a> | ||
|
|
||
| test("desktop shows breadcrumbs and edit link", async () => { | ||
| await viewport(1440, 500) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarTertiary sidebar=sidebarContent> | ||
| breadcrumbs | ||
| editLink | ||
| </NavbarTertiary> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| let navbar = await screen->getByTestId("navbar-tertiary") | ||
|
|
||
| await element(navbar)->toBeVisible | ||
|
|
||
| let crumbs = await screen->getByTestId("breadcrumbs") | ||
| await element(crumbs)->toBeVisible | ||
|
|
||
| let edit = await screen->getByTestId("edit-link") | ||
| await element(edit)->toBeVisible | ||
|
|
||
| await element(navbar)->toMatchScreenshot("desktop-navbar-tertiary") | ||
| }) | ||
|
|
||
| test("mobile shows breadcrumbs and drawer button", async () => { | ||
| await viewport(600, 1200) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarTertiary sidebar=sidebarContent> | ||
| breadcrumbs | ||
| editLink | ||
| </NavbarTertiary> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| let navbar = await screen->getByTestId("navbar-tertiary") | ||
| await element(navbar)->toBeVisible | ||
|
|
||
| let crumbs = await screen->getByTestId("breadcrumbs") | ||
| await element(crumbs)->toBeVisible | ||
|
|
||
| let edit = await screen->getByTestId("edit-link") | ||
| await element(edit)->toBeVisible | ||
|
|
||
| await element(navbar)->toMatchScreenshot("mobile-navbar-tertiary") | ||
| }) | ||
|
|
||
| test("mobile drawer can be toggled open", async () => { | ||
| await viewport(600, 1200) | ||
|
|
||
| let screen = await render( | ||
| <BrowserRouter> | ||
| <NavbarTertiary sidebar=sidebarContent> | ||
| breadcrumbs | ||
| editLink | ||
| </NavbarTertiary> | ||
| </BrowserRouter>, | ||
| ) | ||
|
|
||
| // Sidebar dialog should not be visible initially | ||
| let sidebar = await screen->getByTestId("sidebar-categories") | ||
| await element(sidebar)->notToBeVisible | ||
|
|
||
| // Click the drawer toggle button | ||
| let drawerButton = await screen->getByRole(#button) | ||
| await drawerButton->click | ||
|
|
||
| // Sidebar content should now be visible | ||
| let sidebarAfter = await screen->getByTestId("sidebar-categories") | ||
| await element(sidebarAfter)->toBeVisible | ||
|
|
||
| let versionSelect = await screen->getByTestId("sidebar-version-select") | ||
| await element(versionSelect)->toBeVisible | ||
| }) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| open Vitest | ||
|
|
||
| test("renders current version label", async () => { | ||
| let screen = await render(<VersionSelect />) | ||
|
|
||
| let el = await screen->getByTestId("version-select") | ||
| await element(el)->toBeVisible | ||
|
|
||
| let label = await screen->getByText("v12 (latest)") | ||
| await element(label)->toBeVisible | ||
| }) | ||
|
|
||
| test("clicking button shows older versions", async () => { | ||
| let screen = await render(<VersionSelect />) | ||
|
|
||
| // Menu should be hidden initially | ||
| let v11 = await screen->getByText("v11") | ||
| await element(v11)->notToBeVisible | ||
|
|
||
| // Click the trigger button | ||
| let button = await screen->getByRole(#button) | ||
| await button->click | ||
|
|
||
| // Older versions should now be visible | ||
| let v11After = await screen->getByText("v11") | ||
| await element(v11After)->toBeVisible | ||
|
|
||
| let v9 = await screen->getByText("v9.1 - v10.1") | ||
| await element(v9)->toBeVisible | ||
|
|
||
| let v8 = await screen->getByText("v8.2 - v9.0") | ||
| await element(v8)->toBeVisible | ||
|
|
||
| let v6 = await screen->getByText("v6.0 - v8.1") | ||
| await element(v6)->toBeVisible | ||
| }) | ||
|
|
||
| test("clicking button again closes older versions", async () => { | ||
| let screen = await render(<VersionSelect />) | ||
|
|
||
| let button = await screen->getByRole(#button) | ||
|
|
||
| // Open | ||
| await button->click | ||
| let v11 = await screen->getByText("v11") | ||
| await element(v11)->toBeVisible | ||
|
|
||
| // Close | ||
| await button->click | ||
| let v11After = await screen->getByText("v11") | ||
| await element(v11After)->notToBeVisible | ||
| }) | ||
|
|
||
| test("multiple instances have unique popover IDs", async () => { | ||
| let screen = await render( | ||
| <div> | ||
| <div dataTestId="first"> | ||
| <VersionSelect /> | ||
| </div> | ||
| <div dataTestId="second"> | ||
| <VersionSelect /> | ||
| </div> | ||
| </div>, | ||
| ) | ||
|
|
||
| let first = await screen->getByTestId("first") | ||
| let second = await screen->getByTestId("second") | ||
|
|
||
| // Click the button in the first instance | ||
| let firstButton = await first->getByRole(#button) | ||
| await firstButton->click | ||
|
|
||
| // First instance menu should be visible | ||
| let firstV11 = await first->getByText("v11") | ||
| await element(firstV11)->toBeVisible | ||
|
|
||
| // Second instance menu should remain hidden | ||
| let secondV11 = await second->getByText("v11") | ||
| await element(secondV11)->notToBeVisible | ||
| }) |
Uh oh!
There was an error while loading. Please reload this page.