// 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 {
getByTestId,
getByLabelText,
getByText,
fireEvent,
waitFor,
} from '@testing-library/dom';
import {
getInstantClick,
initializeMobileMenu,
setCurrentPageIconLink,
initializeMemberMenu,
} from '../utilities';
// TODO: ★★★ These tests should be promoted to E2E tests once we have that in place. ★★★
describe('top navigation utilitities', () => {
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');
});
it('should open the more menu', () => {
document.body.innerHTML = `
More...
`;
const menuNavButton = getByLabelText(document.body, 'Navigation menu');
const memberMenu = getByTestId(document.body, 'menu-dropdown');
initializeMemberMenu(memberMenu, menuNavButton);
await waitFor(() =>
expect(menuNavButton.getAttribute('aria-expanded')).toEqual('false'),
);
fireEvent.click(menuNavButton);
expect(menuNavButton.getAttribute('aria-expanded')).toEqual('true');
expect(memberMenu).toHaveClass('showing');
// Click on a link in the menu to close load a page and close the menu.
memberMenu.querySelector('a').click();
await waitFor(() =>
expect(menuNavButton.getAttribute('aria-expanded')).toEqual('false'),
);
expect(memberMenu).not.toHaveClass('showing');
});
});
});