// TODO: Once this is merged, PR up the removal of this and in other tests and move it to testSetup.js import '@testing-library/jest-dom'; import { getByLabelText } from '@testing-library/dom'; import { getInstantClick, initializeMobileMenu, setCurrentPageIconLink, } from '../utilities'; // TODO: ★★★ These tests should be promoted to E2E tests once we have that in place. ★★★ describe('top navigation utilities', () => { beforeEach(() => { // Recreating the body element completely so as to remove any CSS classes // that were added to it. document.body = document.createElement('body'); }); describe('getInstantClick', () => { it('should fail if not found in the alloted time.', async () => { await expect(getInstantClick(50)).rejects.toEqual( new Error('Unable to resolve InstantClick'), ); }); it('should resolve InstantClick.', async () => { global.InstantClick = {}; expect(await getInstantClick(50)).toEqual(InstantClick); delete global.InstantClick; }); }); describe('initializeMobileMenu', () => { it('should open the hamburger menu', () => { document.body.innerHTML = ` `; const navButton = getByLabelText(document.body, 'nav-button-left'); initializeMobileMenu([navButton], []); expect(document.body.dataset.leftNavState).toBeUndefined(); navButton.click(); expect(document.body.dataset.leftNavState).toEqual('open'); }); it('should close the hamburger menu', () => { document.body.innerHTML = ` `; const navButton = getByLabelText(document.body, 'nav-button-left'); initializeMobileMenu([navButton], []); expect(document.body.dataset.leftNavState).toBeUndefined(); navButton.click(); expect(document.body.dataset.leftNavState).toEqual('open'); navButton.click(); expect(document.body.dataset.leftNavState).toEqual('closed'); }); }); describe('setCurrentPageIconLink', () => { it('should set the current page icon', () => { document.body.innerHTML = ` `; const notificationsLink = getByLabelText(document.body, 'Notifications'); const pageEntries = Object.entries({ 'page-1': notificationsLink, }); setCurrentPageIconLink('page-1', pageEntries); expect(notificationsLink).toHaveAttribute('aria-current', 'page'); }); }); });