From 67e77b84837cf8d9654493024c500bcf23bbaedb Mon Sep 17 00:00:00 2001 From: diana-nita Date: Thu, 2 Nov 2023 15:21:51 +0000 Subject: [PATCH] Unit tests for header.js --- tests/integration/jsdom/header.test.js | 114 +++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tests/integration/jsdom/header.test.js diff --git a/tests/integration/jsdom/header.test.js b/tests/integration/jsdom/header.test.js new file mode 100644 index 000000000..aed958ad1 --- /dev/null +++ b/tests/integration/jsdom/header.test.js @@ -0,0 +1,114 @@ +import Header from "../../../packages/components/header/header.js"; + +describe('Header class', () => { + beforeEach(() => { + document.body.innerHTML = ` +
+
+
  • Health A-Z
  • +
  • NHS services
  • +
  • Live Well
  • +
  • Mental health
  • +
  • Care and support
  • +
  • Pregnancy
  • +
  • Home
  • +
  • More
  • +
    +
    +
    +
    + ` + }) + it('Should create navigation elements in the DOM', async () => { + // Call the Header initialization function + await Header(); + + // Ensure the navigation elements are created in the DOM + expect(document.querySelector('.nhsuk-navigation')).not.toBeNull(); + }); + + it('Should toggle mobile menu visibility', async () => { + const toggleButton = document.querySelector('.nhsuk-header__menu-toggle'); + let mobileMenuList = document.querySelector('.nhsuk-mobile-menu-container ul'); + // Call the Header initialization function + await Header(); + + mobileMenuList = document.querySelector('.nhsuk-mobile-menu-container ul'); + // Initially, the menu should be closed + expect(mobileMenuList.classList.contains('nhsuk-header__drop-down--hidden')).toBe(true); + + // Open the mobile menu + toggleButton.click(); + + expect(mobileMenuList.classList.contains('nhsuk-header__drop-down--hidden')).toBe(false); + + // Close the mobile menu + toggleButton.click(); + + expect(mobileMenuList.classList.contains('nhsuk-header__drop-down--hidden')).toBe(true); + }); + + it('Should close menu when escape key is pressed', async () => { + //define a event for the escape key + const escapeKeyEvent = new KeyboardEvent('keydown', { + key: 'Escape', + code: 'Escape', + keyCode: 27, + which: 27, + charCode: 27, + }); + const toggleButton = document.querySelector('.nhsuk-header__menu-toggle'); + + await Header(); + + //Expect the menu to be hidden initially + expect(document.querySelector('.nhsuk-header__drop-down').classList.contains('nhsuk-header__drop-down--hidden')).toBe(true); + + //Toogle the menu - open it + toggleButton.click(); + expect(document.querySelector('.nhsuk-header__drop-down').classList.contains('nhsuk-header__drop-down--hidden')).toBe(false); + + //Press the escape key to close it + document.dispatchEvent(escapeKeyEvent); + expect(document.querySelector('.nhsuk-header__drop-down').classList.contains('nhsuk-header__drop-down--hidden')).toBe(true); + }); + + it('Should setup the Mobile Menu Container during initialization', async () => { + const mobileMenuContainer = document.querySelector('.nhsuk-mobile-menu-container'); + expect(mobileMenuContainer.childElementCount).toBe(0); + await Header(); + expect(mobileMenuContainer.childElementCount).toBeGreaterThan(0); + }); + + it('Should setup the Mobile Menu List during initialization', async () => { + //Initially there won't be any ul elements inside the container- it gets added in the setupMobileMenu method + let mobileMenuList = document.querySelector('.nhsuk-mobile-menu-container ul'); + + //So we expect that to be null until it gets created + expect(mobileMenuList).toBe(null); + + // Call the Header initialization function + await Header(); + + //We update the variable to hold the ul element from the container that has been created + mobileMenuList = document.querySelector('.nhsuk-mobile-menu-container ul'); + + expect(mobileMenuList).not.toBeNull(); + expect(mobileMenuList.classList).toContain('nhsuk-header__drop-down'); + expect(mobileMenuList.classList).toContain('nhsuk-header__drop-down--hidden'); + }); + + it.only('Should update navigation', async () => { + const mobileMenuToggleButton = document.querySelector('.nhsuk-header__menu-toggle'); + const mobileMenuContainer = document.querySelector('.nhsuk-mobile-menu-container'); + + expect(mobileMenuToggleButton.classList.contains('nhsuk-header__menu-toggle--visible')).toBe(false); + expect(mobileMenuContainer.classList.contains('nhsuk-mobile-menu-container--visible')).toBe(false); + + Header(); + + expect(mobileMenuToggleButton.classList.contains('nhsuk-header__menu-toggle--visible')).toEqual(true); + expect(mobileMenuContainer.classList.contains('nhsuk-mobile-menu-container--visible')).toEqual(true); + }); + +}) \ No newline at end of file