import React from 'react'; import { shallow, mount } from 'enzyme'; import toJSON from 'enzyme-to-json'; import Pagination, { PAGINATION_QUERY } from '../components/Pagination'; import { MockedProvider } from 'react-apollo/test-utils'; import wait from 'waait'; import { fakeItem } from '../lib/testUtils'; import Router from 'next/router'; // mock the router because there isn't really a router instance Router.router = { push() {}, prefetch() {} }; function makeMocksFor(length) { return [ { request: { query: PAGINATION_QUERY, variables: { skip: 0, first: 4 } }, result: { data: { itemsConnection: { __typename: 'aggregate', aggregate: { count: length, __typename: 'count', }, }, }, }, }, ]; } describe('', () => { it('displays loading message', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(toJSON(wrapper.find('div[data-test="pagination"]'))).toMatchSnapshot(); }); it('renders pagination for 18 items', async () => { const wrapper = mount( ); await wait(); wrapper.update(); expect(wrapper.find('.totalPages').text()).toEqual('5'); }); it('disables prev button on first page', async () => { const wrapper = mount( ); await wait(); wrapper.update(); // first page 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(); // first page 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(); // first page expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(false); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(false); }); });