diff options
| author | Wes Bos <wesbos@gmail.com> | 2018-05-08 13:00:51 -0400 |
|---|---|---|
| committer | Wes Bos <wesbos@gmail.com> | 2018-05-08 13:00:51 -0400 |
| commit | ad3671675719eb11a81245bffbe0fb18880b479b (patch) | |
| tree | 561db1323073a22969bef7c5aa4db4a7fe2ad0ed /frontend/__tests__/Pagination.test.js | |
| parent | c9a2b488c83dcaae0a00d2177d3bfe1f185c28bf (diff) | |
omg
Diffstat (limited to 'frontend/__tests__/Pagination.test.js')
| -rw-r--r-- | frontend/__tests__/Pagination.test.js | 112 |
1 files changed, 73 insertions, 39 deletions
diff --git a/frontend/__tests__/Pagination.test.js b/frontend/__tests__/Pagination.test.js index 4aa590e..6be60c1 100644 --- a/frontend/__tests__/Pagination.test.js +++ b/frontend/__tests__/Pagination.test.js @@ -3,61 +3,95 @@ import { shallow, mount } from 'enzyme'; import toJSON from 'enzyme-to-json'; import Pagination from '../components/Pagination'; import { MockedProvider } from 'react-apollo/test-utils'; +import wait from 'waait'; import { fakeItem } from '../lib/testUtils'; import { ALL_ITEMS_QUERY } from '../queries/queries'; -const data = { - itemsConnection: { aggregate: { count: 18 } }, - items: [fakeItem()], -}; +import Router from 'next/router'; -describe('<Pagination/>', () => { - fit('displays loading message', () => { - const mocks = [ - { - request: { query: ALL_ITEMS_QUERY, variables: { skip: 0 } }, - delay: 50, - result: { data }, +Router.router = { push() {} }; + +function makeMocksFor(length) { + return [ + { + request: { query: ALL_ITEMS_QUERY, variables: { skip: 0, first: 4 } }, + result: { + data: { + itemsConnection: { + // TODO what are these typenames ???? + __typename: 'aggregate', + aggregate: { + count: length, + __typename: 'count', + }, + }, + // items: [fakeItem()], + items: Array.from({ length }, (_, i) => fakeItem({ id: `item${i}` })), + }, }, - ]; + }, + ]; +} +describe('<Pagination/>', () => { + it('displays loading message', async () => { const wrapper = mount( - <MockedProvider mocks={mocks}> + <MockedProvider mocks={makeMocksFor(1)}> <Pagination page={1} /> </MockedProvider> ); - console.log(wrapper.debug()); - // expect(toJSON(wrapper)).toMatchSnapshot(); + await wait(); + wrapper.update(); + expect(toJSON(wrapper.find('div[data-test="pagination"]'))).toMatchSnapshot(); }); - it('renders pagination for 18 items', () => { - const wrapper = shallow(<Pagination loading={false} page={1} itemsQuery={fakeQuery} />); - expect(toJSON(wrapper)).toMatchSnapshot(); - expect(wrapper.find('.totalPages').text()).toEqual('2'); + it('renders pagination for 18 items', async () => { + const wrapper = mount( + <MockedProvider mocks={makeMocksFor(18)}> + <Pagination page={1} /> + </MockedProvider> + ); + await wait(); + wrapper.update(); + expect(wrapper.find('.totalPages').text()).toEqual('5'); }); - it('renders pagination for 28 items', () => { - const fakeQuery2 = { - itemsConnection: { aggregate: { count: 28 } }, - }; - const wrapper = shallow(<Pagination loading={false} page={1} itemsQuery={fakeQuery2} />); - expect(wrapper.find('.totalPages').text()).toEqual('4'); + it('disables prev button on first page', async () => { + const wrapper = mount( + <MockedProvider mocks={makeMocksFor(18)}> + <Pagination page={1} /> + </MockedProvider> + ); + 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 and enables next/prev buttons', () => { - const fakeQuery3 = { - itemsConnection: { aggregate: { count: 100 } }, - }; - const wrapper = shallow(<Pagination loading={false} page={1} itemsQuery={fakeQuery} />); + it('disables next button on last page', async () => { + const wrapper = mount( + <MockedProvider mocks={makeMocksFor(18)}> + <Pagination page={5} /> + </MockedProvider> + ); + 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); + }); - expect(wrapper.find('a.prev').props()['aria-disabled']).toEqual(true); - expect(wrapper.find('a.next').props()['aria-disabled']).toEqual(false); - wrapper.setProps({ page: 2 }); - expect(wrapper.find('a.prev').props()['aria-disabled']).toEqual(false); - expect(wrapper.find('a.next').props()['aria-disabled']).toEqual(true); - // when in the middle, both should work - wrapper.setProps({ itemsQuery: fakeQuery3, page: 3 }); - expect(wrapper.find('a.prev').props()['aria-disabled']).toEqual(false); - expect(wrapper.find('a.next').props()['aria-disabled']).toEqual(false); + it('enables all buttons on a middle page', async () => { + const wrapper = mount( + <MockedProvider mocks={makeMocksFor(18)}> + <Pagination page={2} /> + </MockedProvider> + ); + 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); }); }); |
