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'] }),
);
});
});