import React from 'react'; import { act, fireEvent, render } from '@testing-library/react'; import 'jest-styled-components'; import '@testing-library/jest-dom'; import { Data } from '../../Data'; import { DataFilters } from '../../DataFilters'; import { DataTable } from '../../DataTable'; import { Grommet } from '../../Grommet'; import { DataTableColumns } from '..'; import { createPortal, expectPortal } from '../../../utils/portal'; const data = [ { name: 'a', size: 's' }, { name: 'b', size: 'm' }, ]; describe('DataTableColumns', () => { window.scrollTo = jest.fn(); beforeEach(createPortal); test('renders', () => { const { container, getByRole } = render( , ); expect(getByRole('button', { name: 'Open column selector' })).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('remove column', () => { jest.useFakeTimers(); const onView = jest.fn(); const { container, getByRole, getByText } = render( , ); expect(getByRole('button', { name: 'Open column selector' })).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); fireEvent.click(getByRole('button', { name: 'Open column selector' })); // advance timers so drop can open act(() => jest.advanceTimersByTime(200)); // snapshot on drop expectPortal('test-data--columns-control').toMatchSnapshot(); fireEvent.click(getByText('name')); expect(onView).toBeCalledWith( expect.objectContaining({ columns: ['size', 'age'] }), ); fireEvent.click(getByText('name')); expect(onView).toBeCalledWith( expect.objectContaining({ columns: ['name', 'size', 'age'] }), ); }); test('search', () => { jest.useFakeTimers(); const onView = jest.fn(); const { container, getByPlaceholderText, getByRole, getByText } = render( , ); expect(getByRole('button', { name: 'Open column selector' })).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); fireEvent.click(getByRole('button', { name: 'Open column selector' })); // advance timers so drop can open act(() => jest.advanceTimersByTime(200)); // snapshot on drop expectPortal('test-data--columns-control').toMatchSnapshot(); // add content to search fireEvent.change(getByPlaceholderText('Search'), { target: { value: 'n' }, }); expectPortal('test-data--columns-control').toMatchSnapshot(); fireEvent.click(getByText('name')); expect(onView).toBeCalledWith( expect.objectContaining({ columns: ['size'] }), ); }); });