import { mount } from 'enzyme'; import wait from 'waait'; import toJSON from 'enzyme-to-json'; import Router from 'next/router'; import Pagination, { PAGINATION_QUERY } from '../components/Pagination'; import { MockedProvider } from 'react-apollo/test-utils'; Router.router = { push() {}, prefetch() {}, }; function makeMocksFor(length) { return [ { request: { query: PAGINATION_QUERY }, result: { data: { itemsConnection: { __typename: 'aggregate', aggregate: { count: length, __typename: 'count', }, }, }, }, }, ]; } describe('', () => { it('displays a loading message', () => { const wrapper = mount( ); expect(wrapper.text()).toContain('Loading...'); }); it('renders pagination for 18 items', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(wrapper.find('.totalPages').text()).toEqual('5'); const pagination = wrapper.find('div[data-test="pagination"]'); expect(toJSON(pagination)).toMatchSnapshot(); }); it('disables prev button on first page', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(true); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(false); }); it('disables next button on last page', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(false); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(true); }); it('enables all buttons on a middle page', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(false); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(false); }); });