fix: unit test
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
|||||||
} from '@testing-library/react';
|
} from '@testing-library/react';
|
||||||
import { BrowserRouter } from 'react-router-dom';
|
import { BrowserRouter } from 'react-router-dom';
|
||||||
import { Navbar } from './navbar';
|
import { Navbar } from './navbar';
|
||||||
|
import { ModalLoginProvider } from '@imphnen-frontend-service/utils';
|
||||||
|
|
||||||
interface MatchMediaResult {
|
interface MatchMediaResult {
|
||||||
matches: boolean;
|
matches: boolean;
|
||||||
@@ -37,7 +38,16 @@ function mockMatchMedia(width: { matches: boolean }): void {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Navbar', () => {
|
const renderWithProvider = () =>
|
||||||
|
render(
|
||||||
|
<BrowserRouter>
|
||||||
|
<ModalLoginProvider>
|
||||||
|
<Navbar />
|
||||||
|
</ModalLoginProvider>
|
||||||
|
</BrowserRouter>
|
||||||
|
);
|
||||||
|
|
||||||
|
describe('Navbar Component', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
document.body.innerHTML = '';
|
document.body.innerHTML = '';
|
||||||
});
|
});
|
||||||
@@ -46,95 +56,57 @@ describe('Navbar', () => {
|
|||||||
vi.restoreAllMocks();
|
vi.restoreAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders the logo', () => {
|
it('Test renders the logo', () => {
|
||||||
render(
|
renderWithProvider();
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
const logo: HTMLElement = screen.getByAltText(/IMPHNEN Logo/i);
|
const logo: HTMLElement = screen.getByAltText(/IMPHNEN Logo/i);
|
||||||
expect(logo).toBeInTheDocument();
|
expect(logo).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders the Home link', () => {
|
it('Test renders the Home link', () => {
|
||||||
render(
|
renderWithProvider();
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
const homeLink: HTMLElement = screen.getByRole('link', { name: /home/i });
|
const homeLink: HTMLElement = screen.getByRole('link', { name: /home/i });
|
||||||
expect(homeLink).toBeInTheDocument();
|
expect(homeLink).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders the Merch Gacha link', () => {
|
it('Test renders the Merch Gacha link', () => {
|
||||||
render(
|
renderWithProvider();
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
const merchLink: HTMLElement = screen.getByRole('link', {
|
const merchLink: HTMLElement = screen.getByRole('link', {
|
||||||
name: /merch gacha/i,
|
name: /merch gacha/i,
|
||||||
});
|
});
|
||||||
expect(merchLink).toBeInTheDocument();
|
expect(merchLink).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('displays horizontal menu on desktop screens', () => {
|
it('Test displays horizontal menu on desktop screens', () => {
|
||||||
mockMatchMedia({ matches: true });
|
mockMatchMedia({ matches: true });
|
||||||
|
|
||||||
global.innerWidth = 1024;
|
global.innerWidth = 1024;
|
||||||
global.dispatchEvent(new Event('resize'));
|
global.dispatchEvent(new Event('resize'));
|
||||||
|
renderWithProvider();
|
||||||
render(
|
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
const navItems: HTMLElement = screen.getByRole('list');
|
const navItems: HTMLElement = screen.getByRole('list');
|
||||||
expect(navItems).toHaveClass('md:flex');
|
expect(navItems).toHaveClass('md:flex');
|
||||||
|
|
||||||
const hamburgerButton: HTMLElement = screen.getByRole('button');
|
const hamburgerButton: HTMLElement = screen.getByRole('button');
|
||||||
expect(hamburgerButton).toHaveClass('md:hidden');
|
expect(hamburgerButton).toHaveClass('md:hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('displays hamburger menu on mobile screens and can toggle dropdown', () => {
|
it('Test displays hamburger menu on mobile screens and can toggle dropdown', () => {
|
||||||
mockMatchMedia({ matches: false });
|
mockMatchMedia({ matches: false });
|
||||||
|
|
||||||
global.innerWidth = 375;
|
global.innerWidth = 375;
|
||||||
global.dispatchEvent(new Event('resize'));
|
global.dispatchEvent(new Event('resize'));
|
||||||
|
renderWithProvider();
|
||||||
render(
|
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
const hamburgerButton: HTMLElement = screen.getByRole('button');
|
const hamburgerButton: HTMLElement = screen.getByRole('button');
|
||||||
expect(hamburgerButton).toBeVisible();
|
expect(hamburgerButton).toBeVisible();
|
||||||
|
|
||||||
fireEvent.click(hamburgerButton);
|
fireEvent.click(hamburgerButton);
|
||||||
|
|
||||||
const dropdownMenu: HTMLElement[] = screen.getAllByRole('list');
|
const dropdownMenu: HTMLElement[] = screen.getAllByRole('list');
|
||||||
expect(dropdownMenu[1]).toBeVisible();
|
expect(dropdownMenu[1]).toBeVisible();
|
||||||
|
|
||||||
fireEvent.click(hamburgerButton);
|
fireEvent.click(hamburgerButton);
|
||||||
|
|
||||||
const updatedDropdownMenus: HTMLElement[] = screen.getAllByRole('list');
|
const updatedDropdownMenus: HTMLElement[] = screen.getAllByRole('list');
|
||||||
expect(updatedDropdownMenus.length).toBe(1);
|
expect(updatedDropdownMenus.length).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has correct height on tablet screens', () => {
|
it('Test has correct height on tablet screens', () => {
|
||||||
mockMatchMedia({ matches: true });
|
mockMatchMedia({ matches: true });
|
||||||
|
|
||||||
global.innerWidth = 768;
|
global.innerWidth = 768;
|
||||||
global.dispatchEvent(new Event('resize'));
|
global.dispatchEvent(new Event('resize'));
|
||||||
|
const { container }: RenderResult = renderWithProvider();
|
||||||
const { container }: RenderResult = render(
|
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
const header: HTMLElement | null = container.querySelector('header');
|
const header: HTMLElement | null = container.querySelector('header');
|
||||||
expect(header).not.toBeNull();
|
expect(header).not.toBeNull();
|
||||||
if (header) {
|
if (header) {
|
||||||
@@ -143,18 +115,11 @@ describe('Navbar', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has max width constraint on large screens', () => {
|
it('Test has max width constraint on large screens', () => {
|
||||||
mockMatchMedia({ matches: true });
|
mockMatchMedia({ matches: true });
|
||||||
|
|
||||||
global.innerWidth = 3840;
|
global.innerWidth = 3840;
|
||||||
global.dispatchEvent(new Event('resize'));
|
global.dispatchEvent(new Event('resize'));
|
||||||
|
const { container }: RenderResult = renderWithProvider();
|
||||||
const { container }: RenderResult = render(
|
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
const header: HTMLElement | null = container.querySelector('header');
|
const header: HTMLElement | null = container.querySelector('header');
|
||||||
expect(header).not.toBeNull();
|
expect(header).not.toBeNull();
|
||||||
if (header) {
|
if (header) {
|
||||||
@@ -163,13 +128,8 @@ describe('Navbar', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has correct ARIA role for nav', () => {
|
it('Test has correct ARIA role for nav', () => {
|
||||||
const { container }: RenderResult = render(
|
const { container }: RenderResult = renderWithProvider();
|
||||||
<BrowserRouter>
|
|
||||||
<Navbar />
|
|
||||||
</BrowserRouter>
|
|
||||||
);
|
|
||||||
|
|
||||||
const header: HTMLElement | null = container.querySelector('header');
|
const header: HTMLElement | null = container.querySelector('header');
|
||||||
expect(header).toHaveAttribute('role', 'nav');
|
expect(header).toHaveAttribute('role', 'nav');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,11 +5,14 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"gacha:dev": "nx serve gacha",
|
"gacha:dev": "nx serve gacha",
|
||||||
"gacha:build": "nx build gacha",
|
"gacha:build": "nx build gacha",
|
||||||
|
"gacha:test": "nx test gacha",
|
||||||
"gacha:prod": "serve ./dist/apps/gacha",
|
"gacha:prod": "serve ./dist/apps/gacha",
|
||||||
"backoffice:dev": "nx serve backoffice",
|
"backoffice:dev": "nx serve backoffice",
|
||||||
"backoffice:build": "nx build backoffice",
|
"backoffice:build": "nx build backoffice",
|
||||||
|
"backoffice:test": "nx test backoffice",
|
||||||
"backoffice:prod": "serve ./dist/apps/backoffice",
|
"backoffice:prod": "serve ./dist/apps/backoffice",
|
||||||
"dimentorin:dev": "nx serve dimentorin",
|
"dimentorin:dev": "nx serve dimentorin",
|
||||||
|
"dimentorin:test": "nx test dimentorin",
|
||||||
"dimentorin:build": "nx build dimentorin",
|
"dimentorin:build": "nx build dimentorin",
|
||||||
"dimentorin:prod": "serve ./dist/apps/dimentorin",
|
"dimentorin:prod": "serve ./dist/apps/dimentorin",
|
||||||
"landing:dev": "nx serve landing",
|
"landing:dev": "nx serve landing",
|
||||||
|
|||||||
Reference in New Issue
Block a user