diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/frontend/pipeline_editor/pipeline_editor_app_spec.js | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) | |
download | gitlab-ce-311b0269b4eb9839fa63f80c8d7a58f32b8138a0.tar.gz |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/frontend/pipeline_editor/pipeline_editor_app_spec.js')
-rw-r--r-- | spec/frontend/pipeline_editor/pipeline_editor_app_spec.js | 117 |
1 files changed, 82 insertions, 35 deletions
diff --git a/spec/frontend/pipeline_editor/pipeline_editor_app_spec.js b/spec/frontend/pipeline_editor/pipeline_editor_app_spec.js index b6713319e69..f6afef595c6 100644 --- a/spec/frontend/pipeline_editor/pipeline_editor_app_spec.js +++ b/spec/frontend/pipeline_editor/pipeline_editor_app_spec.js @@ -1,11 +1,9 @@ -import { GlAlert, GlButton, GlLoadingIcon, GlTabs } from '@gitlab/ui'; +import { GlAlert, GlButton, GlLoadingIcon } from '@gitlab/ui'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import VueApollo from 'vue-apollo'; import createMockApollo from 'helpers/mock_apollo_helper'; import setWindowLocation from 'helpers/set_window_location_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import CommitForm from '~/pipeline_editor/components/commit/commit_form.vue'; -import TextEditor from '~/pipeline_editor/components/editor/text_editor.vue'; import PipelineEditorTabs from '~/pipeline_editor/components/pipeline_editor_tabs.vue'; import PipelineEditorEmptyState from '~/pipeline_editor/components/ui/pipeline_editor_empty_state.vue'; @@ -13,17 +11,21 @@ import PipelineEditorMessages from '~/pipeline_editor/components/ui/pipeline_edi import { COMMIT_SUCCESS, COMMIT_FAILURE } from '~/pipeline_editor/constants'; import getBlobContent from '~/pipeline_editor/graphql/queries/blob_content.graphql'; import getCiConfigData from '~/pipeline_editor/graphql/queries/ci_config.graphql'; -import getPipelineQuery from '~/pipeline_editor/graphql/queries/client/pipeline.graphql'; import getTemplate from '~/pipeline_editor/graphql/queries/get_starter_template.query.graphql'; import getLatestCommitShaQuery from '~/pipeline_editor/graphql/queries/latest_commit_sha.query.graphql'; + +import getPipelineQuery from '~/pipeline_editor/graphql/queries/client/pipeline.graphql'; + import PipelineEditorApp from '~/pipeline_editor/pipeline_editor_app.vue'; import PipelineEditorHome from '~/pipeline_editor/pipeline_editor_home.vue'; + import { mockCiConfigPath, mockCiConfigQueryResponse, mockBlobContentQueryResponse, mockBlobContentQueryResponseNoCiFile, mockCiYml, + mockCiTemplateQueryResponse, mockCommitSha, mockCommitShaResults, mockDefaultBranch, @@ -35,10 +37,6 @@ import { const localVue = createLocalVue(); localVue.use(VueApollo); -const MockSourceEditor = { - template: '<div/>', -}; - const mockProvide = { ciConfigPath: mockCiConfigPath, defaultBranch: mockDefaultBranch, @@ -55,19 +53,15 @@ describe('Pipeline editor app component', () => { let mockLatestCommitShaQuery; let mockPipelineQuery; - const createComponent = ({ blobLoading = false, options = {}, provide = {} } = {}) => { + const createComponent = ({ + blobLoading = false, + options = {}, + provide = {}, + stubs = {}, + } = {}) => { wrapper = shallowMount(PipelineEditorApp, { provide: { ...mockProvide, ...provide }, - stubs: { - GlTabs, - GlButton, - CommitForm, - PipelineEditorHome, - PipelineEditorTabs, - PipelineEditorMessages, - SourceEditor: MockSourceEditor, - PipelineEditorEmptyState, - }, + stubs, data() { return { commitSha: '', @@ -89,7 +83,7 @@ describe('Pipeline editor app component', () => { }); }; - const createComponentWithApollo = async ({ props = {}, provide = {} } = {}) => { + const createComponentWithApollo = async ({ provide = {}, stubs = {} } = {}) => { const handlers = [ [getBlobContent, mockBlobContentData], [getCiConfigData, mockCiConfigData], @@ -97,7 +91,6 @@ describe('Pipeline editor app component', () => { [getLatestCommitShaQuery, mockLatestCommitShaQuery], [getPipelineQuery, mockPipelineQuery], ]; - mockApollo = createMockApollo(handlers); const options = { @@ -105,13 +98,15 @@ describe('Pipeline editor app component', () => { data() { return { currentBranch: mockDefaultBranch, + lastCommitBranch: '', + appStatus: '', }; }, mocks: {}, apolloProvider: mockApollo, }; - createComponent({ props, provide, options }); + createComponent({ provide, stubs, options }); return waitForPromises(); }; @@ -119,7 +114,6 @@ describe('Pipeline editor app component', () => { const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon); const findAlert = () => wrapper.findComponent(GlAlert); const findEditorHome = () => wrapper.findComponent(PipelineEditorHome); - const findTextEditor = () => wrapper.findComponent(TextEditor); const findEmptyState = () => wrapper.findComponent(PipelineEditorEmptyState); const findEmptyStateButton = () => wrapper.findComponent(PipelineEditorEmptyState).findComponent(GlButton); @@ -141,7 +135,7 @@ describe('Pipeline editor app component', () => { createComponent({ blobLoading: true }); expect(findLoadingIcon().exists()).toBe(true); - expect(findTextEditor().exists()).toBe(false); + expect(findEditorHome().exists()).toBe(false); }); }); @@ -185,7 +179,11 @@ describe('Pipeline editor app component', () => { describe('when no CI config file exists', () => { beforeEach(async () => { mockBlobContentData.mockResolvedValue(mockBlobContentQueryResponseNoCiFile); - await createComponentWithApollo(); + await createComponentWithApollo({ + stubs: { + PipelineEditorEmptyState, + }, + }); jest .spyOn(wrapper.vm.$apollo.queries.commitSha, 'startPolling') @@ -206,8 +204,12 @@ describe('Pipeline editor app component', () => { it('shows a unkown error message', async () => { const loadUnknownFailureText = 'The CI configuration was not loaded, please try again.'; - mockBlobContentData.mockRejectedValueOnce(new Error('My error!')); - await createComponentWithApollo(); + mockBlobContentData.mockRejectedValueOnce(); + await createComponentWithApollo({ + stubs: { + PipelineEditorMessages, + }, + }); expect(findEmptyState().exists()).toBe(false); @@ -222,15 +224,20 @@ describe('Pipeline editor app component', () => { mockBlobContentData.mockResolvedValue(mockBlobContentQueryResponseNoCiFile); mockLatestCommitShaQuery.mockResolvedValue(mockEmptyCommitShaResults); - await createComponentWithApollo(); + await createComponentWithApollo({ + stubs: { + PipelineEditorHome, + PipelineEditorEmptyState, + }, + }); expect(findEmptyState().exists()).toBe(true); - expect(findTextEditor().exists()).toBe(false); + expect(findEditorHome().exists()).toBe(false); await findEmptyStateButton().vm.$emit('click'); expect(findEmptyState().exists()).toBe(false); - expect(findTextEditor().exists()).toBe(true); + expect(findEditorHome().exists()).toBe(true); }); }); @@ -241,7 +248,7 @@ describe('Pipeline editor app component', () => { describe('and the commit mutation succeeds', () => { beforeEach(async () => { window.scrollTo = jest.fn(); - await createComponentWithApollo(); + await createComponentWithApollo({ stubs: { PipelineEditorMessages } }); findEditorHome().vm.$emit('commit', { type: COMMIT_SUCCESS }); }); @@ -295,7 +302,7 @@ describe('Pipeline editor app component', () => { beforeEach(async () => { window.scrollTo = jest.fn(); - await createComponentWithApollo(); + await createComponentWithApollo({ stubs: { PipelineEditorMessages } }); findEditorHome().vm.$emit('showError', { type: COMMIT_FAILURE, @@ -319,7 +326,7 @@ describe('Pipeline editor app component', () => { beforeEach(async () => { window.scrollTo = jest.fn(); - await createComponentWithApollo(); + await createComponentWithApollo({ stubs: { PipelineEditorMessages } }); findEditorHome().vm.$emit('showError', { type: COMMIT_FAILURE, @@ -342,6 +349,8 @@ describe('Pipeline editor app component', () => { describe('when refetching content', () => { beforeEach(() => { + mockBlobContentData.mockResolvedValue(mockBlobContentQueryResponse); + mockCiConfigData.mockResolvedValue(mockCiConfigQueryResponse); mockLatestCommitShaQuery.mockResolvedValue(mockCommitShaResults); }); @@ -377,7 +386,10 @@ describe('Pipeline editor app component', () => { const originalLocation = window.location.href; beforeEach(() => { + mockBlobContentData.mockResolvedValue(mockBlobContentQueryResponse); + mockCiConfigData.mockResolvedValue(mockCiConfigQueryResponse); mockLatestCommitShaQuery.mockResolvedValue(mockCommitShaResults); + mockGetTemplate.mockResolvedValue(mockCiTemplateQueryResponse); setWindowLocation('?template=Android'); }); @@ -386,7 +398,9 @@ describe('Pipeline editor app component', () => { }); it('renders the given template', async () => { - await createComponentWithApollo(); + await createComponentWithApollo({ + stubs: { PipelineEditorHome, PipelineEditorTabs }, + }); expect(mockGetTemplate).toHaveBeenCalledWith({ projectPath: mockProjectFullPath, @@ -394,7 +408,40 @@ describe('Pipeline editor app component', () => { }); expect(findEmptyState().exists()).toBe(false); - expect(findTextEditor().exists()).toBe(true); + expect(findEditorHome().exists()).toBe(true); + }); + }); + + describe('when add_new_config_file query param is present', () => { + const originalLocation = window.location.href; + + beforeEach(() => { + setWindowLocation('?add_new_config_file=true'); + + mockCiConfigData.mockResolvedValue(mockCiConfigQueryResponse); + }); + + afterEach(() => { + setWindowLocation(originalLocation); + }); + + describe('when CI config file does not exist', () => { + beforeEach(async () => { + mockBlobContentData.mockResolvedValue(mockBlobContentQueryResponseNoCiFile); + mockLatestCommitShaQuery.mockResolvedValue(mockEmptyCommitShaResults); + mockGetTemplate.mockResolvedValue(mockCiTemplateQueryResponse); + + await createComponentWithApollo(); + + jest + .spyOn(wrapper.vm.$apollo.queries.commitSha, 'startPolling') + .mockImplementation(jest.fn()); + }); + + it('skips empty state and shows editor home component', () => { + expect(findEmptyState().exists()).toBe(false); + expect(findEditorHome().exists()).toBe(true); + }); }); }); }); |