import * as React from 'react'; import Dropdown from './Dropdown'; import {fireEvent, render} from '@testing-library/react'; const testItems = [ { label: 'text-1', url: 'url-1', }, { label: 'text-2', url: 'url-2', }, { label: 'text-3', url: 'url-3', }, ]; const testProps = { links: testItems, name: 'brainly', }; describe('', () => { it('should render name', () => { const component = render(); expect(component.queryByText(testProps.name)).toBeTruthy(); }); it('should render links with proper data', () => { const component = render(); // @ts-ignore TS2345 fireEvent.click(component.container.firstElementChild); expect(component.getAllByRole('link')[0].getAttribute('href')).toEqual( testItems[0].url ); }); it('should not be open by default', () => { const component = render(); expect(component.queryByRole('link')).toBeFalsy(); }); it('should open dropdown on click', () => { const component = render(); // @ts-ignore TS2345 fireEvent.click(component.container.firstElementChild); expect(component.getAllByRole('link')).toHaveLength(3); }); it('should close dropdown when click outside', () => { const component = render(); // @ts-ignore TS2345 fireEvent.click(component.container.firstElementChild); expect(component.getAllByRole('link')).toHaveLength(3); fireEvent.click(component.baseElement); expect(component.queryByRole('link')).toBeFalsy(); }); it('should call onSelectHanlder when link is clicked', () => { const onItemSelect = jest.fn(); const component = render( ); // @ts-ignore TS2345 fireEvent.click(component.container.firstElementChild); const link = component.getAllByRole('link')[0]; fireEvent.click(link); expect(onItemSelect).toHaveBeenCalledTimes(1); expect(onItemSelect).toHaveBeenCalledWith(expect.anything(), { label: 'text-1', url: 'url-1', }); }); });