Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/pipeline_editor/components/commit/commit_section_spec.js')
-rw-r--r--spec/frontend/pipeline_editor/components/commit/commit_section_spec.js287
1 files changed, 0 insertions, 287 deletions
diff --git a/spec/frontend/pipeline_editor/components/commit/commit_section_spec.js b/spec/frontend/pipeline_editor/components/commit/commit_section_spec.js
deleted file mode 100644
index 744b0378a75..00000000000
--- a/spec/frontend/pipeline_editor/components/commit/commit_section_spec.js
+++ /dev/null
@@ -1,287 +0,0 @@
-import VueApollo from 'vue-apollo';
-import { GlFormTextarea, GlFormInput, GlLoadingIcon } from '@gitlab/ui';
-import { mount } from '@vue/test-utils';
-import Vue from 'vue';
-import createMockApollo from 'helpers/mock_apollo_helper';
-import waitForPromises from 'helpers/wait_for_promises';
-import CommitForm from '~/pipeline_editor/components/commit/commit_form.vue';
-import CommitSection from '~/pipeline_editor/components/commit/commit_section.vue';
-import {
- COMMIT_ACTION_CREATE,
- COMMIT_ACTION_UPDATE,
- COMMIT_SUCCESS,
- COMMIT_SUCCESS_WITH_REDIRECT,
-} from '~/pipeline_editor/constants';
-import { resolvers } from '~/pipeline_editor/graphql/resolvers';
-import commitCreate from '~/pipeline_editor/graphql/mutations/commit_ci_file.mutation.graphql';
-import getCurrentBranch from '~/pipeline_editor/graphql/queries/client/current_branch.query.graphql';
-import updatePipelineEtag from '~/pipeline_editor/graphql/mutations/client/update_pipeline_etag.mutation.graphql';
-
-import {
- mockCiConfigPath,
- mockCiYml,
- mockCommitCreateResponse,
- mockCommitCreateResponseNewEtag,
- mockCommitSha,
- mockCommitMessage,
- mockDefaultBranch,
- mockProjectFullPath,
-} from '../../mock_data';
-
-const mockVariables = {
- action: COMMIT_ACTION_UPDATE,
- projectPath: mockProjectFullPath,
- startBranch: mockDefaultBranch,
- message: mockCommitMessage,
- filePath: mockCiConfigPath,
- content: mockCiYml,
- lastCommitId: mockCommitSha,
-};
-
-const mockProvide = {
- ciConfigPath: mockCiConfigPath,
- projectFullPath: mockProjectFullPath,
-};
-
-describe('Pipeline Editor | Commit section', () => {
- let wrapper;
- let mockApollo;
- const mockMutateCommitData = jest.fn();
-
- const defaultProps = {
- ciFileContent: mockCiYml,
- commitSha: mockCommitSha,
- hasUnsavedChanges: true,
- isNewCiConfigFile: false,
- };
-
- const createComponent = ({ apolloConfig = {}, props = {}, options = {}, provide = {} } = {}) => {
- wrapper = mount(CommitSection, {
- propsData: { ...defaultProps, ...props },
- provide: { ...mockProvide, ...provide },
- data() {
- return {
- currentBranch: mockDefaultBranch,
- };
- },
- attachTo: document.body,
- ...apolloConfig,
- ...options,
- });
- };
-
- const createComponentWithApollo = (options) => {
- const handlers = [[commitCreate, mockMutateCommitData]];
- Vue.use(VueApollo);
- mockApollo = createMockApollo(handlers, resolvers);
-
- mockApollo.clients.defaultClient.cache.writeQuery({
- query: getCurrentBranch,
- data: {
- workBranches: {
- __typename: 'BranchList',
- current: {
- __typename: 'WorkBranch',
- name: mockDefaultBranch,
- },
- },
- },
- });
-
- const apolloConfig = {
- apolloProvider: mockApollo,
- };
-
- createComponent({ ...options, apolloConfig });
- };
-
- const findCommitForm = () => wrapper.findComponent(CommitForm);
- const findCommitBtnLoadingIcon = () =>
- wrapper.find('[type="submit"]').findComponent(GlLoadingIcon);
-
- const submitCommit = async ({
- message = mockCommitMessage,
- branch = mockDefaultBranch,
- openMergeRequest = false,
- } = {}) => {
- await findCommitForm().findComponent(GlFormTextarea).setValue(message);
- await findCommitForm().findComponent(GlFormInput).setValue(branch);
- if (openMergeRequest) {
- await findCommitForm().find('[data-testid="new-mr-checkbox"]').setChecked(openMergeRequest);
- }
- await findCommitForm().find('[type="submit"]').trigger('click');
- await waitForPromises();
- };
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- describe('when the user commits a new file', () => {
- beforeEach(async () => {
- mockMutateCommitData.mockResolvedValue(mockCommitCreateResponse);
- createComponentWithApollo({ props: { isNewCiConfigFile: true } });
- await submitCommit();
- });
-
- it('calls the mutation with the CREATE action', () => {
- expect(mockMutateCommitData).toHaveBeenCalledTimes(1);
- expect(mockMutateCommitData).toHaveBeenCalledWith({
- ...mockVariables,
- action: COMMIT_ACTION_CREATE,
- branch: mockDefaultBranch,
- });
- });
- });
-
- describe('when the user commits an update to an existing file', () => {
- beforeEach(async () => {
- createComponentWithApollo();
- await submitCommit();
- });
-
- it('calls the mutation with the UPDATE action', () => {
- expect(mockMutateCommitData).toHaveBeenCalledTimes(1);
- expect(mockMutateCommitData).toHaveBeenCalledWith({
- ...mockVariables,
- action: COMMIT_ACTION_UPDATE,
- branch: mockDefaultBranch,
- });
- });
- });
-
- describe('when the user commits changes to the current branch', () => {
- beforeEach(async () => {
- createComponentWithApollo();
- await submitCommit();
- });
-
- it('calls the mutation with the current branch', () => {
- expect(mockMutateCommitData).toHaveBeenCalledTimes(1);
- expect(mockMutateCommitData).toHaveBeenCalledWith({
- ...mockVariables,
- branch: mockDefaultBranch,
- });
- });
-
- it('emits an event to communicate the commit was successful', () => {
- expect(wrapper.emitted('commit')).toHaveLength(1);
- expect(wrapper.emitted('commit')[0]).toEqual([{ type: COMMIT_SUCCESS }]);
- });
-
- it('emits an event to refetch the commit sha', () => {
- expect(wrapper.emitted('updateCommitSha')).toHaveLength(1);
- });
-
- it('shows no saving state', () => {
- expect(findCommitBtnLoadingIcon().exists()).toBe(false);
- });
-
- it('a second commit submits the latest sha, keeping the form updated', async () => {
- await submitCommit();
-
- expect(mockMutateCommitData).toHaveBeenCalledTimes(2);
- expect(mockMutateCommitData).toHaveBeenCalledWith({
- ...mockVariables,
- branch: mockDefaultBranch,
- });
- });
- });
-
- describe('when the user commits changes to a new branch', () => {
- const newBranch = 'new-branch';
-
- beforeEach(async () => {
- createComponentWithApollo();
- await submitCommit({
- branch: newBranch,
- });
- });
-
- it('calls the mutation with the new branch', () => {
- expect(mockMutateCommitData).toHaveBeenCalledWith({
- ...mockVariables,
- branch: newBranch,
- });
- });
-
- it('does not emit an event to refetch the commit sha', () => {
- expect(wrapper.emitted('updateCommitSha')).toBeUndefined();
- });
- });
-
- describe('when the user commits changes to open a new merge request', () => {
- const newBranch = 'new-branch';
-
- beforeEach(async () => {
- mockMutateCommitData.mockResolvedValue(mockCommitCreateResponse);
- createComponentWithApollo();
- mockMutateCommitData.mockResolvedValue(mockCommitCreateResponse);
- await submitCommit({
- branch: newBranch,
- openMergeRequest: true,
- });
- });
-
- it('emits a commit event with the right type, sourceBranch and targetBranch', () => {
- expect(wrapper.emitted('commit')).toHaveLength(1);
- expect(wrapper.emitted('commit')[0]).toMatchObject([
- {
- type: COMMIT_SUCCESS_WITH_REDIRECT,
- params: { sourceBranch: newBranch, targetBranch: mockDefaultBranch },
- },
- ]);
- });
- });
-
- describe('when the commit is ocurring', () => {
- beforeEach(() => {
- createComponentWithApollo();
- });
-
- it('shows a saving state', async () => {
- mockMutateCommitData.mockImplementationOnce(() => {
- expect(findCommitBtnLoadingIcon().exists()).toBe(true);
- return Promise.resolve();
- });
-
- await submitCommit({
- message: mockCommitMessage,
- branch: mockDefaultBranch,
- openMergeRequest: false,
- });
- });
- });
-
- describe('when the commit returns a different etag path', () => {
- beforeEach(async () => {
- createComponentWithApollo();
- jest.spyOn(wrapper.vm.$apollo, 'mutate');
- mockMutateCommitData.mockResolvedValue(mockCommitCreateResponseNewEtag);
- await submitCommit();
- });
-
- it('calls the client mutation to update the etag', () => {
- // 1:Commit submission, 2:etag update, 3:currentBranch update, 4:lastCommit update
- expect(wrapper.vm.$apollo.mutate).toHaveBeenCalledTimes(4);
- expect(wrapper.vm.$apollo.mutate).toHaveBeenNthCalledWith(2, {
- mutation: updatePipelineEtag,
- variables: {
- pipelineEtag: mockCommitCreateResponseNewEtag.data.commitCreate.commitPipelinePath,
- },
- });
- });
- });
-
- it('sets listeners on commit form', () => {
- const handler = jest.fn();
- createComponent({ options: { listeners: { event: handler } } });
- findCommitForm().vm.$emit('event');
- expect(handler).toHaveBeenCalled();
- });
-
- it('passes down scroll-to-commit-form prop to commit form', () => {
- createComponent({ props: { 'scroll-to-commit-form': true } });
- expect(findCommitForm().props('scrollToCommitForm')).toBe(true);
- });
-});