import * as React from 'react';
import { userEvent } from '@testing-library/user-event';
import { render, screen } from '../../../../test-utils/testing-library';
import Header, { HeaderProps } from '../Header';
jest.mock('@box/blueprint-web-assets/icons/Logo', () => {
return {
BoxLogo: () =>
BoxLogo
,
};
});
describe('elements/common/header/Header', () => {
const renderComponent = (props?: Partial) =>
render();
test('disables search input when view is not `folder` and not `search`', () => {
renderComponent({ view: 'recents' });
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).toBeInTheDocument();
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).toBeDisabled();
});
test.each(['folder', 'search'])('does not disable search input when view is %s', view => {
renderComponent({ view });
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).toBeInTheDocument();
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).not.toBeDisabled();
});
test('onSearch is called when search input changes', async () => {
const onSearch = jest.fn();
renderComponent({ onSearch });
const searchInput = screen.getByRole('searchbox', { name: 'Search files and folders' });
expect(onSearch).not.toHaveBeenCalled();
await userEvent.type(searchInput, 'test');
expect(onSearch).toHaveBeenCalled();
});
describe('Logo', () => {
test('renders Logo component when isHeaderLogoVisible is `true`', () => {
renderComponent({ isHeaderLogoVisible: true });
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).toBeInTheDocument();
expect(screen.getByText('Logo')).toBeInTheDocument();
});
test('does not render Logo component when isHeaderLogoVisible is `false`', () => {
renderComponent({ isHeaderLogoVisible: false });
expect(screen.queryByText('Logo')).not.toBeInTheDocument();
expect(screen.getByRole('searchbox', { name: 'Search files and folders' })).toBeInTheDocument();
});
test('renders BoxLogo component when logoUrl is `box`', () => {
renderComponent({ logoUrl: 'box' });
expect(screen.getByText('BoxLogo')).toBeInTheDocument();
});
test('renders custom logo component when logoUrl is a string', () => {
renderComponent({ logoUrl: 'https://example.com/logo.png' });
expect(screen.getByRole('presentation')).toBeInTheDocument();
});
});
});