diff options
Diffstat (limited to 'spec/javascripts/vue_mr_widget')
6 files changed, 19 insertions, 381 deletions
diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js index de1d351677c..3cbaa47c832 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_header_spec.js @@ -153,7 +153,7 @@ describe('MRWidgetHeader', () => { beforeEach(() => { vm = mountComponent(Component, { - mr: Object.assign({}, mrDefaultOptions), + mr: { ...mrDefaultOptions }, }); }); @@ -176,7 +176,7 @@ describe('MRWidgetHeader', () => { }); it('renders web ide button in disabled state with no href', () => { - const mr = Object.assign({}, mrDefaultOptions, { canPushToSourceBranch: false }); + const mr = { ...mrDefaultOptions, canPushToSourceBranch: false }; vm = mountComponent(Component, { mr }); const link = vm.$el.querySelector('.js-web-ide'); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js deleted file mode 100644 index 76827cde093..00000000000 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_container_spec.js +++ /dev/null @@ -1,99 +0,0 @@ -import { mount, createLocalVue } from '@vue/test-utils'; -import MrWidgetPipelineContainer from '~/vue_merge_request_widget/components/mr_widget_pipeline_container.vue'; -import MrWidgetPipeline from '~/vue_merge_request_widget/components/mr_widget_pipeline.vue'; -import ArtifactsApp from '~/vue_merge_request_widget/components/artifacts_list_app.vue'; -import { mockStore } from '../mock_data'; - -const localVue = createLocalVue(); - -describe('MrWidgetPipelineContainer', () => { - let wrapper; - - const factory = (props = {}) => { - wrapper = mount(localVue.extend(MrWidgetPipelineContainer), { - propsData: { - mr: Object.assign({}, mockStore), - ...props, - }, - localVue, - }); - }; - - afterEach(() => { - wrapper.destroy(); - }); - - describe('when pre merge', () => { - beforeEach(() => { - factory(); - }); - - it('renders pipeline', () => { - expect(wrapper.find(MrWidgetPipeline).exists()).toBe(true); - expect(wrapper.find(MrWidgetPipeline).props()).toEqual( - jasmine.objectContaining({ - pipeline: mockStore.pipeline, - pipelineCoverageDelta: mockStore.pipelineCoverageDelta, - ciStatus: mockStore.ciStatus, - hasCi: mockStore.hasCI, - sourceBranch: mockStore.sourceBranch, - sourceBranchLink: mockStore.sourceBranchLink, - }), - ); - }); - - it('renders deployments', () => { - const expectedProps = mockStore.deployments.map(dep => - jasmine.objectContaining({ - deployment: dep, - showMetrics: false, - }), - ); - - const deployments = wrapper.findAll('.mr-widget-extension .js-pre-deployment'); - - expect(deployments.wrappers.map(x => x.props())).toEqual(expectedProps); - }); - }); - - describe('when post merge', () => { - beforeEach(() => { - factory({ - isPostMerge: true, - }); - }); - - it('renders pipeline', () => { - expect(wrapper.find(MrWidgetPipeline).exists()).toBe(true); - expect(wrapper.find(MrWidgetPipeline).props()).toEqual( - jasmine.objectContaining({ - pipeline: mockStore.mergePipeline, - pipelineCoverageDelta: mockStore.pipelineCoverageDelta, - ciStatus: mockStore.ciStatus, - hasCi: mockStore.hasCI, - sourceBranch: mockStore.targetBranch, - sourceBranchLink: mockStore.targetBranch, - }), - ); - }); - - it('renders deployments', () => { - const expectedProps = mockStore.postMergeDeployments.map(dep => - jasmine.objectContaining({ - deployment: dep, - showMetrics: true, - }), - ); - - const deployments = wrapper.findAll('.mr-widget-extension .js-post-deployment'); - - expect(deployments.wrappers.map(x => x.props())).toEqual(expectedProps); - }); - }); - - describe('with artifacts path', () => { - it('renders the artifacts app', () => { - expect(wrapper.find(ArtifactsApp).isVisible()).toBe(true); - }); - }); -}); diff --git a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_spec.js b/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_spec.js index 5997c93105e..883c41085fa 100644 --- a/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_spec.js +++ b/spec/javascripts/vue_mr_widget/components/mr_widget_pipeline_spec.js @@ -122,6 +122,19 @@ describe('MRWidgetPipeline', () => { ); }); + it('should render CI error when no CI is provided and pipeline must succeed is turned on', () => { + vm = mountComponent(Component, { + pipeline: {}, + hasCi: false, + pipelineMustSucceed: true, + troubleshootingDocsPath: 'help', + }); + + expect(vm.$el.querySelector('.media-body').textContent.trim()).toContain( + 'No pipeline has been run for this commit.', + ); + }); + describe('with a pipeline', () => { beforeEach(() => { vm = mountComponent(Component, { diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js index d396f2d9271..9ba429c3d20 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js @@ -18,6 +18,7 @@ const createTestMr = customConfig => { isPipelineFailed: false, isPipelinePassing: false, isMergeAllowed: true, + isApproved: true, onlyAllowMergeIfPipelineSucceeds: false, ffOnlyEnabled: false, hasCI: false, @@ -919,8 +920,8 @@ describe('ReadyToMerge', () => { }); }); - describe('Commit message area', () => { - describe('when using merge commits', () => { + describe('Merge request project settings', () => { + describe('when the merge commit merge method is enabled', () => { beforeEach(() => { vm = createComponent({ mr: { ffOnlyEnabled: false }, @@ -936,7 +937,7 @@ describe('ReadyToMerge', () => { }); }); - describe('when fast-forward merge is enabled', () => { + describe('when the fast-forward merge method is enabled', () => { beforeEach(() => { vm = createComponent({ mr: { ffOnlyEnabled: true }, diff --git a/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js b/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js deleted file mode 100644 index 5070e74b5d2..00000000000 --- a/spec/javascripts/vue_mr_widget/stores/artifacts_list/actions_spec.js +++ /dev/null @@ -1,165 +0,0 @@ -import MockAdapter from 'axios-mock-adapter'; -import testAction from 'spec/helpers/vuex_action_helper'; -import { TEST_HOST } from 'spec/test_constants'; -import axios from '~/lib/utils/axios_utils'; -import { - setEndpoint, - requestArtifacts, - clearEtagPoll, - stopPolling, - fetchArtifacts, - receiveArtifactsSuccess, - receiveArtifactsError, -} from '~/vue_merge_request_widget/stores/artifacts_list/actions'; -import state from '~/vue_merge_request_widget/stores/artifacts_list/state'; -import * as types from '~/vue_merge_request_widget/stores/artifacts_list/mutation_types'; - -describe('Artifacts App Store Actions', () => { - let mockedState; - - beforeEach(() => { - mockedState = state(); - }); - - describe('setEndpoint', () => { - it('should commit SET_ENDPOINT mutation', done => { - testAction( - setEndpoint, - 'endpoint.json', - mockedState, - [{ type: types.SET_ENDPOINT, payload: 'endpoint.json' }], - [], - done, - ); - }); - }); - - describe('requestArtifacts', () => { - it('should commit REQUEST_ARTIFACTS mutation', done => { - testAction( - requestArtifacts, - null, - mockedState, - [{ type: types.REQUEST_ARTIFACTS }], - [], - done, - ); - }); - }); - - describe('fetchArtifacts', () => { - let mock; - - beforeEach(() => { - mockedState.endpoint = `${TEST_HOST}/endpoint.json`; - mock = new MockAdapter(axios); - }); - - afterEach(() => { - mock.restore(); - stopPolling(); - clearEtagPoll(); - }); - - describe('success', () => { - it('dispatches requestArtifacts and receiveArtifactsSuccess ', done => { - mock.onGet(`${TEST_HOST}/endpoint.json`).replyOnce(200, [ - { - text: 'result.txt', - url: 'asda', - job_name: 'generate-artifact', - job_path: 'asda', - }, - ]); - - testAction( - fetchArtifacts, - null, - mockedState, - [], - [ - { - type: 'requestArtifacts', - }, - { - payload: { - data: [ - { - text: 'result.txt', - url: 'asda', - job_name: 'generate-artifact', - job_path: 'asda', - }, - ], - status: 200, - }, - type: 'receiveArtifactsSuccess', - }, - ], - done, - ); - }); - }); - - describe('error', () => { - beforeEach(() => { - mock.onGet(`${TEST_HOST}/endpoint.json`).reply(500); - }); - - it('dispatches requestArtifacts and receiveArtifactsError ', done => { - testAction( - fetchArtifacts, - null, - mockedState, - [], - [ - { - type: 'requestArtifacts', - }, - { - type: 'receiveArtifactsError', - }, - ], - done, - ); - }); - }); - }); - - describe('receiveArtifactsSuccess', () => { - it('should commit RECEIVE_ARTIFACTS_SUCCESS mutation with 200', done => { - testAction( - receiveArtifactsSuccess, - { data: { summary: {} }, status: 200 }, - mockedState, - [{ type: types.RECEIVE_ARTIFACTS_SUCCESS, payload: { summary: {} } }], - [], - done, - ); - }); - - it('should not commit RECEIVE_ARTIFACTS_SUCCESS mutation with 204', done => { - testAction( - receiveArtifactsSuccess, - { data: { summary: {} }, status: 204 }, - mockedState, - [], - [], - done, - ); - }); - }); - - describe('receiveArtifactsError', () => { - it('should commit RECEIVE_ARTIFACTS_ERROR mutation', done => { - testAction( - receiveArtifactsError, - null, - mockedState, - [{ type: types.RECEIVE_ARTIFACTS_ERROR }], - [], - done, - ); - }); - }); -}); diff --git a/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js b/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js deleted file mode 100644 index 1906585af7b..00000000000 --- a/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js +++ /dev/null @@ -1,112 +0,0 @@ -import MergeRequestStore from '~/vue_merge_request_widget/stores/mr_widget_store'; -import { stateKey } from '~/vue_merge_request_widget/stores/state_maps'; -import mockData from '../mock_data'; - -describe('MergeRequestStore', () => { - let store; - - beforeEach(() => { - store = new MergeRequestStore(mockData); - }); - - describe('setData', () => { - it('should set isSHAMismatch when the diff SHA changes', () => { - store.setData({ ...mockData, diff_head_sha: 'a-different-string' }); - - expect(store.isSHAMismatch).toBe(true); - }); - - it('should not set isSHAMismatch when other data changes', () => { - store.setData({ ...mockData, work_in_progress: !mockData.work_in_progress }); - - expect(store.isSHAMismatch).toBe(false); - }); - - it('should update cached sha after rebasing', () => { - store.setData({ ...mockData, diff_head_sha: 'abc123' }, true); - - expect(store.isSHAMismatch).toBe(false); - expect(store.sha).toBe('abc123'); - }); - - describe('isPipelinePassing', () => { - it('is true when the CI status is `success`', () => { - store.setData({ ...mockData, ci_status: 'success' }); - - expect(store.isPipelinePassing).toBe(true); - }); - - it('is true when the CI status is `success-with-warnings`', () => { - store.setData({ ...mockData, ci_status: 'success-with-warnings' }); - - expect(store.isPipelinePassing).toBe(true); - }); - - it('is false when the CI status is `failed`', () => { - store.setData({ ...mockData, ci_status: 'failed' }); - - expect(store.isPipelinePassing).toBe(false); - }); - - it('is false when the CI status is anything except `success`', () => { - store.setData({ ...mockData, ci_status: 'foobarbaz' }); - - expect(store.isPipelinePassing).toBe(false); - }); - }); - - describe('isPipelineSkipped', () => { - it('should set isPipelineSkipped=true when the CI status is `skipped`', () => { - store.setData({ ...mockData, ci_status: 'skipped' }); - - expect(store.isPipelineSkipped).toBe(true); - }); - - it('should set isPipelineSkipped=false when the CI status is anything except `skipped`', () => { - store.setData({ ...mockData, ci_status: 'foobarbaz' }); - - expect(store.isPipelineSkipped).toBe(false); - }); - }); - - describe('isNothingToMergeState', () => { - it('returns true when nothingToMerge', () => { - store.state = stateKey.nothingToMerge; - - expect(store.isNothingToMergeState).toEqual(true); - }); - - it('returns false when not nothingToMerge', () => { - store.state = 'state'; - - expect(store.isNothingToMergeState).toEqual(false); - }); - }); - }); - - describe('setPaths', () => { - it('should set the add ci config path', () => { - store.setData({ ...mockData }); - - expect(store.mergeRequestAddCiConfigPath).toEqual('/group2/project2/new/pipeline'); - }); - - it('should set humanAccess=Maintainer when user has that role', () => { - store.setData({ ...mockData }); - - expect(store.humanAccess).toEqual('Maintainer'); - }); - - it('should set pipelinesEmptySvgPath', () => { - store.setData({ ...mockData }); - - expect(store.pipelinesEmptySvgPath).toBe('/path/to/svg'); - }); - - it('should set newPipelinePath', () => { - store.setData({ ...mockData }); - - expect(store.newPipelinePath).toBe('/group2/project2/pipelines/new'); - }); - }); -}); |