/* * Copyright (c) 2015 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause */ import React from 'react'; import { screen } from '@testing-library/react'; import render from '../../test/testrenderer'; import { setCurrentPane, setPaneDisabled, setPaneHidden, setPanes, } from '../App/appLayout'; import NavMenu from './NavMenu'; const aPane = { name: 'an menu item', Main: () =>
A pane
, }; const anotherPane = { name: 'another menu item', Main: () =>
Another pane
, }; expect.extend({ toBeHighlighted(element) { const pass = element.classList.contains('selected'); const not = pass ? 'not ' : ''; const message = () => `Expected the element to ${not}contain a class 'selected' to signify that ` + `it is ${not}highlighted. It actually contained: ${element.className}`; return { pass, message }; }, }); describe('NavMenu', () => { it('displays multiple items', () => { render(, [setPanes([aPane, anotherPane])]); expect(screen.getByText('an menu item')).toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeInTheDocument(); }); it('shows the selected item', () => { render(, [setPanes([aPane, anotherPane])]); expect(screen.getByText('an menu item')).toBeHighlighted(); expect(screen.getByText('another menu item')).not.toBeHighlighted(); }); it('reacts to changing the selected item', () => { render(, [ setPanes([aPane, anotherPane]), setCurrentPane('another menu item'), ]); expect(screen.getByText('an menu item')).not.toBeHighlighted(); expect(screen.getByText('another menu item')).toBeHighlighted(); }); it('hides prehidden items', () => { render(, [ setPanes([{ ...aPane, preHidden: true }, anotherPane]), ]); expect(screen.queryByText('an menu item')).not.toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeInTheDocument(); }); it('reacts to hiding items', () => { render(, [ setPanes([aPane, anotherPane]), setPaneHidden({ name: aPane.name, hidden: true }), ]); expect(screen.queryByText('an menu item')).not.toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeHighlighted(); }); it('disables preDisabled items', () => { render(, [ setPanes([{ ...aPane, preDisabled: true }, anotherPane]), ]); expect(screen.getByText('an menu item')).not.toBeEnabled(); expect(screen.getByText('another menu item')).toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeHighlighted(); }); it('reacts to disabling items', () => { render(, [ setPanes([aPane, anotherPane]), setPaneDisabled({ name: aPane.name, disabled: true }), ]); expect(screen.getByText('an menu item')).not.toBeEnabled(); expect(screen.getByText('another menu item')).toBeInTheDocument(); expect(screen.getByText('another menu item')).toBeHighlighted(); }); });