import React from 'react' import { RenderResult, render, within } from '@testing-library/react' import { DataTableType } from './TableContent.types' import TableContent, { ROWS_PER_PAGE } from './TableContent' describe('Table content', () => { let data: DataTableType[] = [ { first_header: 'content header 1', second_header:
second text
}, { first_header: 'second content header 1', second_header:
second text header 2
} ] afterEach(() => { jest.resetAllMocks() }) describe('Empty table', () => { it('should render the empty table message', async () => { const { getByText } = render(
empty table
} total={0} /> ) expect(getByText('empty table')).toBeInTheDocument() }) }) describe('Should render the table correctly', () => { it('should render the table', async () => { const screen = render(
empty table
} total={0} /> ) const { getByTestId } = screen expect(getByTestId('table-content')).not.toBe(null) }) it('should render the headers', async () => { const screen = render(
empty table
} total={0} /> ) const { getByText } = screen expect(getByText('first_header')).not.toBe(null) expect(getByText('second_header')).not.toBe(null) }) it('should render the content', async () => { const screen = render(
empty table
} total={0} /> ) const { getByText } = screen expect(getByText('content header 1')).not.toBe(null) expect(getByText('second text')).not.toBe(null) expect(getByText('second content header 1')).not.toBe(null) expect(getByText('second text header 2')).not.toBe(null) }) }) describe('when custom headers are defined', () => { const customHeaderText = 'My super custom header' let screen: RenderResult beforeEach(() => { screen = render(
empty table
} total={0} /> ) }) it('should render custom headers correctly', () => { expect(screen.getByText(customHeaderText)).toBeInTheDocument() }) it('should render attribute key as header for non defined custom headers', () => { expect(screen.getByText('second_header')).toBeInTheDocument() }) }) describe('Should render the loader if its loading', () => { it('should render the loader', async () => { const screen = render(
empty table
} total={0} /> ) expect(screen.getByTestId('loader')).toBeInTheDocument() }) }) describe('Pagination', () => { describe('Should have pagination', () => { it('should render the pagination correctly', async () => { data = Array(ROWS_PER_PAGE).fill({ first_header: 'content 1', second_header: 'content 2' }) const screen = render(
empty table
} total={data.length} totalPages={2} activePage={1} /> ) const { getByRole } = screen const navigation = getByRole('navigation') expect(within(navigation).getByText('1')).toBeInTheDocument() expect(within(navigation).getByText('2')).toBeInTheDocument() }) }) describe('Should not have pagination', () => { it('should not render pagination as there is no need', async () => { const screen = render(
empty table
} total={data.length} totalPages={1} /> ) const { queryByRole } = screen expect(queryByRole('navigation')).not.toBeInTheDocument() }) }) }) })