import React from 'react' import { render, screen, fireEvent } from '@testing-library/react' import Pagimagic from '../index' describe('Pagimagic', () => { const mockedBigList = ['Sofiia', 'Anna', 'Fedir', 'Emilia', 'Ko', 'JO', 'Mian', 'Ukraine', 'Germany', 'Deutschland', 'USA', 'Tatooine', 'Kyiv', 'Berlin', 'Brandenburg', 'Tokio', 'BJJ'] describe('#render', () => { const spyRenderFn = jest.fn() it('should render without crashing', () => { const props = { list: ['Sofiia', 'Anna', 'Fedir', 'Emilia'], itemsPerPage: 2, currentPageIndex: 0, maximumVisiblePaginators: 3, renderChildren: spyRenderFn, showCounter: true, className: 'test-classname' } render() expect(screen.getByText('1')).toBeTruthy() expect(screen.getByText('2')).toBeTruthy() expect(screen.getByText('1-2 of 4')).toBeTruthy() }) }) it('should change pagination back-n-forth', () => { const spyRenderFn = jest.fn() const props = { list: mockedBigList, itemsPerPage: 2, currentPageIndex: 2, maximumVisiblePaginators: 5, renderChildren: spyRenderFn, showCounter: true, className: 'test-classname', useDefaultStyles: true } render() expect(screen.queryByLabelText('current-page-number-2')).toBeNull() expect(screen.getByLabelText('current-page-number-3')).toBeInTheDocument() // can navigate back fireEvent.click(screen.getByLabelText('prev-page')) expect(screen.getByLabelText('current-page-number-2')).toBeInTheDocument() expect(screen.queryByLabelText('current-page-number-3')).toBeNull() // can navigate forward fireEvent.click(screen.getByLabelText('next-page')) expect(screen.getByLabelText('current-page-number-3')).toBeInTheDocument() expect(screen.queryByLabelText('current-page-number-2')).toBeNull() // can navigate one direction multiple times fireEvent.click(screen.getByLabelText('next-page')) expect(screen.getByLabelText('page-number-2')).toBeInTheDocument() expect(screen.getByLabelText('current-page-number-4')).toBeInTheDocument() expect(screen.queryByLabelText('page-number-5')).toBeNull() expect(screen.getByLabelText('page-number-9')).toBeInTheDocument() // can come to the middle when '...' is from both sides // eg 1 ... 4 [5] 6 ... 9 fireEvent.click(screen.getByLabelText('next-page')) expect(screen.getByLabelText('page-number-1')).toBeInTheDocument() expect(screen.queryByLabelText('page-number-2')).toBeNull() expect(screen.queryByLabelText('page-number-3')).toBeNull() expect(screen.getByLabelText('page-number-4')).toBeInTheDocument() expect(screen.getByLabelText('current-page-number-5')).toBeInTheDocument() expect(screen.getByLabelText('page-number-6')).toBeInTheDocument() expect(screen.queryByLabelText('page-number-7')).toBeNull() expect(screen.queryByLabelText('page-number-8')).toBeNull() expect(screen.getByLabelText('page-number-9')).toBeInTheDocument() // hits the last page and ... fireEvent.click(screen.getByLabelText('next-page')) fireEvent.click(screen.getByLabelText('next-page')) fireEvent.click(screen.getByLabelText('next-page')) fireEvent.click(screen.getByLabelText('next-page')) expect(screen.getByLabelText('current-page-number-9')).toBeInTheDocument() // ... doesn't go forward fireEvent.click(screen.getByLabelText('next-page')) expect(screen.getByLabelText('current-page-number-9')).toBeInTheDocument() }) it('should call custom changePageIndex callback', () => { const spyRenderFn = jest.fn() const mockChangePageFn = jest.fn() const props = { list: mockedBigList, itemsPerPage: 2, currentPageIndex: 0, maximumVisiblePaginators: 3, renderChildren: spyRenderFn, showCounter: true, className: 'test-classname', changePageIndex: mockChangePageFn } render() fireEvent.click(screen.getByLabelText('next-page')) expect(mockChangePageFn).toHaveBeenCalledWith(1) fireEvent.click(screen.getByLabelText('next-page')) expect(mockChangePageFn).toHaveBeenCalledWith(2) }) it('should render custom arrows', () => { const spyRenderFn = jest.fn() const mockChangePageFn = jest.fn() const props = { list: mockedBigList, itemsPerPage: 2, currentPageIndex: 0, maximumVisiblePaginators: 3, renderChildren: spyRenderFn, showCounter: true, className: 'test-classname', changePageIndex: mockChangePageFn, arrow: () =>

Johnny

} render() fireEvent.click(screen.queryAllByText('Johnny')[1]) expect(mockChangePageFn).toHaveBeenCalledWith(1) }) })