import React from 'react'; import { fireEvent, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import 'jest-styled-components'; import { Grommet } from '../../Grommet'; import { DataFilters } from '../../DataFilters'; import { DataTable } from '../../DataTable'; import { Pagination } from '../../Pagination'; import { Data } from '..'; import { createPortal, expectPortal } from '../../../utils/portal'; const data = [ { name: 'aa', enabled: true, rating: 2.3, sub: { note: 'ZZ' }, tags: ['qa', 'staging', 'prod'], }, { name: 'bb', enabled: false, rating: 4.3, sub: { note: 'YY' }, tags: ['qa', 'staging'], }, { name: 'cc', sub: {}, tags: ['qa'] }, { name: 'dd' }, ]; describe('Data', () => { window.scrollTo = jest.fn(); beforeEach(createPortal); test('renders', () => { const { container } = render( , ); expect(container.firstChild).toMatchSnapshot(); }); test('toolbar', () => { const { getByText, container } = render( , ); expect(getByText('4 items')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('view', () => { const { getByText, container } = render( , ); expect(getByText('bb')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('view search', () => { const { getByText, queryByText, container } = render( , ); expect(getByText('1 result of 4 items')).toBeTruthy(); expect(getByText('aa')).toBeTruthy(); expect(queryByText('bb')).toBeFalsy(); expect(container.firstChild).toMatchSnapshot(); }); test('view property option', () => { const { getByText, container } = render( , ); expect(getByText('1 result of 4 items')).toBeTruthy(); expect(getByText('aa')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('view property range', () => { const { getByText, container } = render( , ); expect(getByText('1 result of 4 items')).toBeTruthy(); expect(getByText('bb')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('view sort', () => { const { getByText, container } = render( , ); expect(getByText('4 items')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('view all', () => { const { getByText, container } = render( , ); expect(getByText('1 result of 4 items')).toBeTruthy(); expect(getByText('aa')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('messages', () => { const { getByText, container } = render( , ); expect(getByText('4 things')).toBeTruthy(); expect(getByText('aa')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); }); test('uncontrolled search', () => { const { getByRole, getByText, queryByText, container } = render( , ); expect(getByText('4 items')).toBeTruthy(); expect(getByText('bb')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); fireEvent.change(getByRole('searchbox'), { target: { value: 'a' }, }); expect(getByText('1 result of 4 items')).toBeTruthy(); expect(queryByText('bb')).toBeFalsy(); expect(container.firstChild).toMatchSnapshot(); }); test('controlled search', () => { const onView = jest.fn(); const { getByRole, getByText, container } = render( , ); expect(getByText('bb')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); fireEvent.change(getByRole('searchbox'), { target: { value: 'a' }, }); expect(getByText('bb')).toBeTruthy(); expect(container.firstChild).toMatchSnapshot(); expect(onView).toHaveBeenNthCalledWith( 1, expect.objectContaining({ search: 'a', properties: {}, }), ); }); test('toolbar search', () => { const { container } = render( , ); expect(container.firstChild).toMatchSnapshot(); }); test('toolbar filters', () => { const { container } = render( , ); expect(container.firstChild).toMatchSnapshot(); }); test('pagination', () => { const { container } = render( {}} view={{ page: 2, step: 2 }} > , ); expect(container.firstChild).toMatchSnapshot(); }); test('pagination step', () => { const { container } = render( {}} > , ); expect(container.firstChild).toMatchSnapshot(); }); test('onView', () => { const onView = jest.fn(); const { container } = render( , ); expect(container.firstChild).toMatchSnapshot(); }); test('properties when property is an array', async () => { const user = userEvent.setup(); const { asFragment } = render( (tags ? tags.join(', ') : null), }, ]} /> , ); expect(asFragment()).toMatchSnapshot(); const filtersButton = screen.getByRole('button', { name: 'Open filters' }); expect(filtersButton).toBeTruthy(); await user.click(filtersButton); expect(screen.getByRole('button', { name: 'Apply filters' })).toBeTruthy(); expectPortal('data--filters-control').toMatchSnapshot(); }); });