2021-08-25 08:27:04 -05:00
|
|
|
import { render, screen } from '@testing-library/react';
|
2022-04-22 08:33:13 -05:00
|
|
|
import React from 'react';
|
2021-08-25 08:27:04 -05:00
|
|
|
import { BrowserRouter } from 'react-router-dom';
|
2022-04-22 08:33:13 -05:00
|
|
|
|
2021-11-09 07:41:38 -06:00
|
|
|
import { NavBarMenuItem } from './NavBarMenuItem';
|
2018-09-04 10:24:08 -05:00
|
|
|
|
2021-11-09 07:41:38 -06:00
|
|
|
describe('NavBarMenuItem', () => {
|
2021-08-25 08:27:04 -05:00
|
|
|
const mockText = 'MyChildItem';
|
|
|
|
const mockUrl = '/route';
|
|
|
|
const mockIcon = 'home-alt';
|
2018-09-04 10:24:08 -05:00
|
|
|
|
2021-08-25 08:27:04 -05:00
|
|
|
it('displays the text', () => {
|
2021-11-09 07:41:38 -06:00
|
|
|
render(<NavBarMenuItem text={mockText} />);
|
2021-08-25 08:27:04 -05:00
|
|
|
const text = screen.getByText(mockText);
|
|
|
|
expect(text).toBeInTheDocument();
|
|
|
|
});
|
2018-09-04 10:24:08 -05:00
|
|
|
|
2021-08-31 04:37:51 -05:00
|
|
|
it('attaches the url to the text if provided', () => {
|
2021-08-25 08:27:04 -05:00
|
|
|
render(
|
|
|
|
<BrowserRouter>
|
2021-11-09 07:41:38 -06:00
|
|
|
<NavBarMenuItem text={mockText} url={mockUrl} />
|
2021-08-25 08:27:04 -05:00
|
|
|
</BrowserRouter>
|
|
|
|
);
|
|
|
|
const link = screen.getByRole('link', { name: mockText });
|
|
|
|
expect(link).toBeInTheDocument();
|
2021-08-31 04:37:51 -05:00
|
|
|
expect(link).toHaveAttribute('href', mockUrl);
|
2021-08-25 08:27:04 -05:00
|
|
|
});
|
2018-09-04 10:24:08 -05:00
|
|
|
|
2021-08-25 08:27:04 -05:00
|
|
|
it('displays an icon if a valid icon is provided', () => {
|
2021-11-09 07:41:38 -06:00
|
|
|
render(<NavBarMenuItem text={mockText} icon={mockIcon} />);
|
2021-08-25 08:27:04 -05:00
|
|
|
const icon = screen.getByTestId('dropdown-child-icon');
|
|
|
|
expect(icon).toBeInTheDocument();
|
2018-09-04 10:24:08 -05:00
|
|
|
});
|
|
|
|
|
2021-10-01 09:53:56 -05:00
|
|
|
it('displays an external link icon if the target is _blank', () => {
|
2021-11-09 07:41:38 -06:00
|
|
|
render(<NavBarMenuItem text={mockText} icon={mockIcon} url={mockUrl} target="_blank" />);
|
2021-10-01 09:53:56 -05:00
|
|
|
const icon = screen.getByTestId('external-link-icon');
|
|
|
|
expect(icon).toBeInTheDocument();
|
|
|
|
});
|
|
|
|
|
2021-08-25 08:27:04 -05:00
|
|
|
it('displays a divider instead when isDivider is true', () => {
|
2021-11-09 07:41:38 -06:00
|
|
|
render(<NavBarMenuItem text={mockText} icon={mockIcon} url={mockUrl} isDivider />);
|
2021-08-25 08:27:04 -05:00
|
|
|
|
|
|
|
// Check the divider is shown
|
|
|
|
const divider = screen.getByTestId('dropdown-child-divider');
|
|
|
|
expect(divider).toBeInTheDocument();
|
2018-09-04 10:24:08 -05:00
|
|
|
|
2021-08-25 08:27:04 -05:00
|
|
|
// Check nothing else is rendered
|
|
|
|
const text = screen.queryByText(mockText);
|
|
|
|
const icon = screen.queryByTestId('dropdown-child-icon');
|
|
|
|
const link = screen.queryByRole('link', { name: mockText });
|
|
|
|
expect(text).not.toBeInTheDocument();
|
|
|
|
expect(icon).not.toBeInTheDocument();
|
|
|
|
expect(link).not.toBeInTheDocument();
|
2018-09-04 10:24:08 -05:00
|
|
|
});
|
|
|
|
});
|