import { click, render, screen, testA11y, waitFor } from '@fuels/jest'; import { composeStory } from '@storybook/react'; import Meta, * as Stories from './Nav.stories'; const Usage = composeStory(Stories.Usage, Meta); const NoConnection = composeStory(Stories.NoConnection, Meta); const Mobile = composeStory(Stories.Mobile, Meta); function fireResize(width: number) { window.innerWidth = width; window.dispatchEvent(new Event('resize')); } describe('Nav', () => { it('a11y', async () => { await testA11y(); }); it('should render a basic html for desktop', async () => { await waitFor(() => { fireResize(1024); }); const { container } = render(); expect(container.querySelector('.fuel_Nav-desktop')).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-logo')).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-menu')).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-spacer')).toBeInTheDocument(); expect( container.querySelector('.fuel_Nav-themeToggle'), ).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-network')).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-avatar')).toBeInTheDocument(); expect(screen.getByText('Developers')).toBeInTheDocument(); expect(screen.getByText('Community')).toBeInTheDocument(); expect(screen.getByText('Labs')).toBeInTheDocument(); expect(screen.getByText('Bridge')).toBeInTheDocument(); expect(screen.getByText('Explorer')).toBeInTheDocument(); expect(screen.getByText('Ecosystem')).toBeInTheDocument(); expect(screen.getByLabelText('Toggle Theme')).toBeInTheDocument(); expect(screen.getByText('Mainnet')).toBeInTheDocument(); }); it('should render a basic html for mobile', async () => { jest.spyOn(window, 'scrollTo').mockImplementation(() => {}); await waitFor(() => { fireResize(768); }); const { container } = render(); expect(container.querySelector('.fuel_Nav-mobile')).toBeInTheDocument(); expect( container.querySelector('.fuel_Nav-mobileContent'), ).toBeInTheDocument(); expect(container.querySelector('.fuel_Nav-logo')).toBeInTheDocument(); expect( container.querySelector('.fuel_Nav-themeToggle'), ).toBeInTheDocument(); expect(screen.getByLabelText('Toggle Theme')).toBeInTheDocument(); expect(() => screen.getByText('Mainnet')).toThrow(); const btn = screen.getByLabelText('Toggle Menu'); await click(btn); expect(screen.getByText('Developers')).toBeInTheDocument(); expect(screen.getByText('Community')).toBeInTheDocument(); expect(screen.getByText('Labs')).toBeInTheDocument(); expect(screen.getByText('Bridge')).toBeInTheDocument(); expect(screen.getByText('Explorer')).toBeInTheDocument(); expect(screen.getByText('Ecosystem')).toBeInTheDocument(); expect(() => screen.getByLabelText('Toggle Theme')).toThrow(); expect(screen.getByText('Mainnet')).toBeInTheDocument(); }); it('should show a connect button when missing props', async () => { await waitFor(() => { fireResize(1024); }); render(); expect(screen.getByText('Connect')).toBeInTheDocument(); expect(() => screen.getByText('Mainnet')).toThrow(); }); });