/** * @jest-environment jsdom */ import React from 'react' import { render } from '@testing-library/react' import navigationData from '../fixtures/index' import { Drawer as Subject } from '../../' const fixture = { data: { ...navigationData.data, currentPath: '/world' } } const loggedInUserFixture = { ...fixture, userIsAnonymous: false, userIsLoggedIn: true } const anonymousUserFixture = { ...fixture, userIsAnonymous: true, userIsLoggedIn: false } describe('dotcom-ui-header/src/components/drawer', () => { describe('editions', () => { it('renders the current edition text', () => { const { container } = render() expect(container.getElementsByClassName('o-header__drawer-current-edition')[0].innerHTML).toContain( 'UK' ) }) it('renders the alternative edition link', () => { const { container } = render() const [firstLink] = Array.from(container.getElementsByClassName('o-header__drawer-menu-link')) expect(firstLink.innerHTML).toContain('International') }) }) describe('navigation links', () => { it('renders the primary link section title', () => { const { container } = render() const [firstLink] = Array.from(container.getElementsByClassName('o-header__drawer-menu-item--heading')) expect(firstLink.innerHTML).toContain('Top sections') }) it('renders the secondary link section title', () => { const { container } = render() const secondLink = Array.from( container.getElementsByClassName('o-header__drawer-menu-item--heading') )[1] expect(secondLink.innerHTML).toContain('FT recommends') }) it('renders the tertiary link section divider', () => { const { container } = render() const [li] = Array.from(container.getElementsByClassName('o-header__drawer-menu-list--divide')) expect(li.children[0].innerHTML).toContain('myFT') }) it('renders primary link subsections', () => { const { container } = render() const parentHeaders = Array.from( container.getElementsByClassName('o-header__drawer-menu-link--parent') ).filter((header) => header.innerHTML.includes('Companies')) expect(parentHeaders.length).toBe(1) const toggleHeaders = Array.from( container.getElementsByClassName('o-header__drawer-menu-toggle') ).filter((header) => header.innerHTML.includes('Show more Companies')) expect(toggleHeaders.length).toBe(1) }) it('highlights the current page', () => { const { container } = render() const currentPage = container.querySelector('[aria-current="page"]') expect(currentPage?.innerHTML).toContain('World') }) }) describe('user menu', () => { describe('for a logged in user', () => { it('renders sign out link', () => { const { container } = render() const signOutLink = container.querySelector('a[data-trackable="Sign Out"]') expect(signOutLink?.innerHTML).toContain('Sign Out') }) it('renders settings and account link', () => { const { container } = render() const signOutLink = container.querySelector('a[data-trackable="Settings & Account"]') expect(signOutLink?.innerHTML).toContain('Settings & Account') }) }) describe('for an anonymous user', () => { it('renders sign in link', () => { const { container } = render() const signInLink = container.querySelector('a[data-trackable="Sign In"') expect(signInLink?.innerHTML).toContain('Sign In') }) it('renders subscribe link', () => { const { container } = render() const subscribeLink = container.querySelector('a[data-trackable="Subscribe"]') expect(subscribeLink?.innerHTML).toContain('Subscribe') }) }) }) })