Skip to content

Commit ecf37bc

Browse files
authored
test: increase test coverage for navbarmobile (#398)
* test:increased test coverage for navbarmobile.tsx * test:increased test coverage for navbarmobile.tsx
1 parent 7eea998 commit ecf37bc

4 files changed

Lines changed: 50 additions & 7 deletions

File tree

frontend/src/components/LandingComponents/Navbar/NavbarMobile.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ export const NavbarMobile = () => {
2020
<ModeToggle />
2121

2222
<Sheet open={isOpen} onOpenChange={setIsOpen}>
23-
<SheetTrigger className="px-2">
24-
<Menu
25-
className="flex md:hidden h-5 w-5"
26-
onClick={() => setIsOpen(true)}
27-
>
23+
<SheetTrigger
24+
data-testid="menu-icon"
25+
className="px-2"
26+
onClick={() => setIsOpen(true)}
27+
>
28+
<Menu className="flex md:hidden h-5 w-5">
2829
<span className="sr-only">Menu Icon</span>
2930
</Menu>
3031
</SheetTrigger>
@@ -33,7 +34,10 @@ export const NavbarMobile = () => {
3334
<SheetHeader>
3435
<SheetTitle className="font-bold text-xl">CCSync</SheetTitle>
3536
</SheetHeader>
36-
<nav className="flex flex-col justify-center items-center gap-2 mt-4">
37+
<nav
38+
data-testid="route-list"
39+
className="flex flex-col justify-center items-center gap-2 mt-4"
40+
>
3741
{routeList.map(({ href, label }) => (
3842
<a
3943
rel="noreferrer noopener"
Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,46 @@
11
import { NavbarMobile } from '../NavbarMobile';
2-
import { render } from '@testing-library/react';
2+
import { fireEvent, render, screen } from '@testing-library/react';
33

44
describe('NavbarMobile component using snapshot', () => {
55
it('renders correctly', () => {
66
const { asFragment } = render(<NavbarMobile />);
77
expect(asFragment()).toMatchSnapshot();
88
});
99
});
10+
11+
describe('NavbarMobile component test', () => {
12+
test('renders ModeToggle and menu trigger', () => {
13+
render(<NavbarMobile />);
14+
15+
expect(screen.getByTestId('sun-icon')).toBeInTheDocument();
16+
expect(screen.getByTestId('menu-icon')).toBeInTheDocument();
17+
});
18+
19+
test('menu should NOT be visible initially', () => {
20+
render(<NavbarMobile />);
21+
22+
expect(screen.queryByText('CCSync')).not.toBeInTheDocument();
23+
expect(screen.queryByTestId('route-list')).not.toBeInTheDocument();
24+
});
25+
26+
test('clicking on menu-icon opens menu', () => {
27+
render(<NavbarMobile />);
28+
29+
const button = screen.getByTestId('menu-icon');
30+
fireEvent.click(button);
31+
32+
expect(screen.getByText('CCSync')).toBeInTheDocument();
33+
expect(screen.getByTestId('route-list')).toBeInTheDocument();
34+
});
35+
36+
test('clicking on any route closes menu -> setIsOpen(false)', () => {
37+
render(<NavbarMobile />);
38+
39+
fireEvent.click(screen.getByTestId('menu-icon'));
40+
41+
const firstRoute = screen.getByRole('link', { name: /home/i });
42+
fireEvent.click(firstRoute);
43+
44+
expect(screen.queryByTestId('route-list')).not.toBeInTheDocument();
45+
});
46+
});

frontend/src/components/LandingComponents/Navbar/__tests__/__snapshots__/Navbar.test.tsx.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ exports[`Navbar component using snapshot renders correctly 1`] = `
259259
aria-haspopup="dialog"
260260
class="px-2"
261261
data-state="closed"
262+
data-testid="menu-icon"
262263
type="button"
263264
>
264265
<svg

frontend/src/components/LandingComponents/Navbar/__tests__/__snapshots__/NavbarMobile.test.tsx.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ exports[`NavbarMobile component using snapshot renders correctly 1`] = `
8585
aria-haspopup="dialog"
8686
class="px-2"
8787
data-state="closed"
88+
data-testid="menu-icon"
8889
type="button"
8990
>
9091
<svg

0 commit comments

Comments
 (0)