diff options
Diffstat (limited to 'spec/frontend/vue_shared/components/incubation/pagination_spec.js')
-rw-r--r-- | spec/frontend/vue_shared/components/incubation/pagination_spec.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/spec/frontend/vue_shared/components/incubation/pagination_spec.js b/spec/frontend/vue_shared/components/incubation/pagination_spec.js new file mode 100644 index 00000000000..a621e60c627 --- /dev/null +++ b/spec/frontend/vue_shared/components/incubation/pagination_spec.js @@ -0,0 +1,76 @@ +import { GlKeysetPagination } from '@gitlab/ui'; +import { mountExtended } from 'helpers/vue_test_utils_helper'; +import Pagination from '~/vue_shared/components/incubation/pagination.vue'; + +describe('~/vue_shared/incubation/components/pagination.vue', () => { + let wrapper; + + const pageInfo = { + startCursor: 'eyJpZCI6IjE2In0', + endCursor: 'eyJpZCI6IjIifQ', + hasNextPage: true, + hasPreviousPage: true, + }; + + const findPagination = () => wrapper.findComponent(GlKeysetPagination); + + const createWrapper = (pageInfoProp) => { + wrapper = mountExtended(Pagination, { + propsData: pageInfoProp, + }); + }; + + describe('when neither next nor previous page exists', () => { + beforeEach(() => { + const emptyPageInfo = { ...pageInfo, hasPreviousPage: false, hasNextPage: false }; + + createWrapper(emptyPageInfo); + }); + + it('should not render pagination component', () => { + expect(wrapper.html()).toBe(''); + }); + }); + + describe('when Pagination is rendered for environment details page', () => { + beforeEach(() => { + createWrapper(pageInfo); + }); + + it('should pass correct props to keyset pagination', () => { + expect(findPagination().exists()).toBe(true); + expect(findPagination().props()).toEqual(expect.objectContaining(pageInfo)); + }); + + describe.each([ + { + testPageInfo: pageInfo, + expectedAfter: `cursor=${pageInfo.endCursor}`, + expectedBefore: `cursor=${pageInfo.startCursor}`, + }, + { + testPageInfo: { ...pageInfo, hasNextPage: true, hasPreviousPage: false }, + expectedAfter: `cursor=${pageInfo.endCursor}`, + expectedBefore: '', + }, + { + testPageInfo: { ...pageInfo, hasNextPage: false, hasPreviousPage: true }, + expectedAfter: '', + expectedBefore: `cursor=${pageInfo.startCursor}`, + }, + ])( + 'button links generation for $testPageInfo', + ({ testPageInfo, expectedAfter, expectedBefore }) => { + beforeEach(() => { + createWrapper(testPageInfo); + }); + + it(`should have button links defined as ${expectedAfter || 'empty'} and + ${expectedBefore || 'empty'}`, () => { + expect(findPagination().props().prevButtonLink).toContain(expectedBefore); + expect(findPagination().props().nextButtonLink).toContain(expectedAfter); + }); + }, + ); + }); +}); |