diff options
Diffstat (limited to 'spec/frontend/commit/pipelines/pipelines_table_spec.js')
-rw-r--r-- | spec/frontend/commit/pipelines/pipelines_table_spec.js | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/spec/frontend/commit/pipelines/pipelines_table_spec.js b/spec/frontend/commit/pipelines/pipelines_table_spec.js index e209f628aa2..203a4d23160 100644 --- a/spec/frontend/commit/pipelines/pipelines_table_spec.js +++ b/spec/frontend/commit/pipelines/pipelines_table_spec.js @@ -1,11 +1,14 @@ import { GlEmptyState, GlLoadingIcon, GlModal, GlTableLite } from '@gitlab/ui'; import { mount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; +import { nextTick } from 'vue'; import fixture from 'test_fixtures/pipelines/pipelines.json'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import waitForPromises from 'helpers/wait_for_promises'; import Api from '~/api'; import PipelinesTable from '~/commit/pipelines/pipelines_table.vue'; +import httpStatusCodes from '~/lib/utils/http_status'; +import createFlash from '~/flash'; import { TOAST_MESSAGE } from '~/pipelines/constants'; import axios from '~/lib/utils/axios_utils'; @@ -13,6 +16,8 @@ const $toast = { show: jest.fn(), }; +jest.mock('~/flash'); + describe('Pipelines table in Commits and Merge requests', () => { let wrapper; let pipeline; @@ -183,36 +188,61 @@ describe('Pipelines table in Commits and Merge requests', () => { mergeRequestId: 3, }); - jest.spyOn(Api, 'postMergeRequestPipeline').mockReturnValue(Promise.resolve()); - await waitForPromises(); }); + describe('success', () => { + beforeEach(() => { + jest.spyOn(Api, 'postMergeRequestPipeline').mockReturnValue(Promise.resolve()); + }); + it('displays a toast message during pipeline creation', async () => { + await findRunPipelineBtn().trigger('click'); - it('displays a toast message during pipeline creation', async () => { - await findRunPipelineBtn().trigger('click'); + expect($toast.show).toHaveBeenCalledWith(TOAST_MESSAGE); + }); - expect($toast.show).toHaveBeenCalledWith(TOAST_MESSAGE); - }); + it('on desktop, shows a loading button', async () => { + await findRunPipelineBtn().trigger('click'); - it('on desktop, shows a loading button', async () => { - await findRunPipelineBtn().trigger('click'); + expect(findRunPipelineBtn().props('loading')).toBe(true); - expect(findRunPipelineBtn().props('loading')).toBe(true); + await waitForPromises(); - await waitForPromises(); + expect(findRunPipelineBtn().props('loading')).toBe(false); + }); - expect(findRunPipelineBtn().props('loading')).toBe(false); + it('on mobile, shows a loading button', async () => { + await findRunPipelineBtnMobile().trigger('click'); + + expect(findRunPipelineBtn().props('loading')).toBe(true); + + await waitForPromises(); + + expect(findRunPipelineBtn().props('disabled')).toBe(false); + expect(findRunPipelineBtn().props('loading')).toBe(false); + }); }); - it('on mobile, shows a loading button', async () => { - await findRunPipelineBtnMobile().trigger('click'); + describe('failure', () => { + const permissionsMsg = 'You do not have permission to run a pipeline on this branch.'; - expect(findRunPipelineBtn().props('loading')).toBe(true); + it.each` + status | message + ${httpStatusCodes.BAD_REQUEST} | ${permissionsMsg} + ${httpStatusCodes.UNAUTHORIZED} | ${permissionsMsg} + ${httpStatusCodes.INTERNAL_SERVER_ERROR} | ${'An error occurred while trying to run a new pipeline for this merge request.'} + `('displays permissions error message', async ({ status, message }) => { + const response = { response: { status } }; - await waitForPromises(); + jest + .spyOn(Api, 'postMergeRequestPipeline') + .mockImplementation(() => Promise.reject(response)); + + await findRunPipelineBtn().trigger('click'); - expect(findRunPipelineBtn().props('disabled')).toBe(false); - expect(findRunPipelineBtn().props('loading')).toBe(false); + await waitForPromises(); + + expect(createFlash).toHaveBeenCalledWith({ message }); + }); }); }); @@ -238,7 +268,7 @@ describe('Pipelines table in Commits and Merge requests', () => { it('on desktop, shows a security warning modal', async () => { await findRunPipelineBtn().trigger('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findModal()).not.toBeNull(); }); |