summaryrefslogtreecommitdiff
path: root/spec/javascripts/ide/stores/modules/commit/actions_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/javascripts/ide/stores/modules/commit/actions_spec.js')
-rw-r--r--spec/javascripts/ide/stores/modules/commit/actions_spec.js603
1 files changed, 0 insertions, 603 deletions
diff --git a/spec/javascripts/ide/stores/modules/commit/actions_spec.js b/spec/javascripts/ide/stores/modules/commit/actions_spec.js
deleted file mode 100644
index fb8cb300209..00000000000
--- a/spec/javascripts/ide/stores/modules/commit/actions_spec.js
+++ /dev/null
@@ -1,603 +0,0 @@
-import { resetStore, file } from 'spec/ide/helpers';
-import rootActions from '~/ide/stores/actions';
-import { createStore } from '~/ide/stores';
-import service from '~/ide/services';
-import router from '~/ide/ide_router';
-import eventHub from '~/ide/eventhub';
-import consts from '~/ide/stores/modules/commit/constants';
-import * as mutationTypes from '~/ide/stores/modules/commit/mutation_types';
-import * as actions from '~/ide/stores/modules/commit/actions';
-import { commitActionTypes, PERMISSION_CREATE_MR } from '~/ide/constants';
-import testAction from '../../../../helpers/vuex_action_helper';
-
-const TEST_COMMIT_SHA = '123456789';
-const store = createStore();
-
-describe('IDE commit module actions', () => {
- beforeEach(() => {
- spyOn(router, 'push');
- });
-
- afterEach(() => {
- resetStore(store);
- });
-
- describe('updateCommitMessage', () => {
- it('updates store with new commit message', done => {
- store
- .dispatch('commit/updateCommitMessage', 'testing')
- .then(() => {
- expect(store.state.commit.commitMessage).toBe('testing');
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('discardDraft', () => {
- it('resets commit message to blank', done => {
- store.state.commit.commitMessage = 'testing';
-
- store
- .dispatch('commit/discardDraft')
- .then(() => {
- expect(store.state.commit.commitMessage).not.toBe('testing');
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('updateCommitAction', () => {
- it('updates store with new commit action', done => {
- store
- .dispatch('commit/updateCommitAction', '1')
- .then(() => {
- expect(store.state.commit.commitAction).toBe('1');
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('sets shouldCreateMR to true if "Create new MR" option is visible', done => {
- Object.assign(store.state, {
- shouldHideNewMrOption: false,
- });
-
- testAction(
- actions.updateCommitAction,
- {},
- store.state,
- [
- {
- type: mutationTypes.UPDATE_COMMIT_ACTION,
- payload: { commitAction: jasmine.anything() },
- },
- { type: mutationTypes.TOGGLE_SHOULD_CREATE_MR, payload: true },
- ],
- [],
- done,
- );
- });
-
- it('sets shouldCreateMR to false if "Create new MR" option is hidden', done => {
- Object.assign(store.state, {
- shouldHideNewMrOption: true,
- });
-
- testAction(
- actions.updateCommitAction,
- {},
- store.state,
- [
- {
- type: mutationTypes.UPDATE_COMMIT_ACTION,
- payload: { commitAction: jasmine.anything() },
- },
- { type: mutationTypes.TOGGLE_SHOULD_CREATE_MR, payload: false },
- ],
- [],
- done,
- );
- });
- });
-
- describe('updateBranchName', () => {
- it('updates store with new branch name', done => {
- store
- .dispatch('commit/updateBranchName', 'branch-name')
- .then(() => {
- expect(store.state.commit.newBranchName).toBe('branch-name');
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('setLastCommitMessage', () => {
- beforeEach(() => {
- Object.assign(store.state, {
- currentProjectId: 'abcproject',
- projects: {
- abcproject: {
- web_url: 'http://testing',
- },
- },
- });
- });
-
- it('updates commit message with short_id', done => {
- store
- .dispatch('commit/setLastCommitMessage', { short_id: '123' })
- .then(() => {
- expect(store.state.lastCommitMsg).toContain(
- 'Your changes have been committed. Commit <a href="http://testing/-/commit/123" class="commit-sha">123</a>',
- );
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('updates commit message with stats', done => {
- store
- .dispatch('commit/setLastCommitMessage', {
- short_id: '123',
- stats: {
- additions: '1',
- deletions: '2',
- },
- })
- .then(() => {
- expect(store.state.lastCommitMsg).toBe(
- 'Your changes have been committed. Commit <a href="http://testing/-/commit/123" class="commit-sha">123</a> with 1 additions, 2 deletions.',
- );
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('updateFilesAfterCommit', () => {
- const data = {
- id: '123',
- message: 'testing commit message',
- committed_date: '123',
- committer_name: 'root',
- };
- const branch = 'master';
- let f;
-
- beforeEach(() => {
- spyOn(eventHub, '$emit');
-
- f = file('changedFile');
- Object.assign(f, {
- active: true,
- changed: true,
- content: 'file content',
- });
-
- Object.assign(store.state, {
- currentProjectId: 'abcproject',
- currentBranchId: 'master',
- projects: {
- abcproject: {
- web_url: 'web_url',
- branches: {
- master: {
- workingReference: '',
- commit: {
- short_id: TEST_COMMIT_SHA,
- },
- },
- },
- },
- },
- stagedFiles: [
- f,
- {
- ...file('changedFile2'),
- changed: true,
- },
- ],
- openFiles: store.state.stagedFiles,
- });
-
- store.state.stagedFiles.forEach(stagedFile => {
- store.state.entries[stagedFile.path] = stagedFile;
- });
- });
-
- it('updates stores working reference', done => {
- store
- .dispatch('commit/updateFilesAfterCommit', {
- data,
- branch,
- })
- .then(() => {
- expect(store.state.projects.abcproject.branches.master.workingReference).toBe(data.id);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('resets all files changed status', done => {
- store
- .dispatch('commit/updateFilesAfterCommit', {
- data,
- branch,
- })
- .then(() => {
- store.state.openFiles.forEach(entry => {
- expect(entry.changed).toBeFalsy();
- });
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('sets files commit data', done => {
- store
- .dispatch('commit/updateFilesAfterCommit', {
- data,
- branch,
- })
- .then(() => {
- expect(f.lastCommitSha).toBe(data.id);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('updates raw content for changed file', done => {
- store
- .dispatch('commit/updateFilesAfterCommit', {
- data,
- branch,
- })
- .then(() => {
- expect(f.raw).toBe(f.content);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('emits changed event for file', done => {
- store
- .dispatch('commit/updateFilesAfterCommit', {
- data,
- branch,
- })
- .then(() => {
- expect(eventHub.$emit).toHaveBeenCalledWith(`editor.update.model.content.${f.key}`, {
- content: f.content,
- changed: false,
- });
- })
- .then(done)
- .catch(done.fail);
- });
- });
-
- describe('commitChanges', () => {
- let visitUrl;
-
- beforeEach(() => {
- visitUrl = spyOnDependency(rootActions, 'visitUrl');
-
- document.body.innerHTML += '<div class="flash-container"></div>';
-
- const f = {
- ...file('changed'),
- type: 'blob',
- active: true,
- lastCommitSha: TEST_COMMIT_SHA,
- content: '\n',
- raw: '\n',
- };
-
- Object.assign(store.state, {
- stagedFiles: [f],
- changedFiles: [f],
- openFiles: [f],
- currentProjectId: 'abcproject',
- currentBranchId: 'master',
- projects: {
- abcproject: {
- web_url: 'webUrl',
- branches: {
- master: {
- workingReference: '1',
- commit: {
- id: TEST_COMMIT_SHA,
- },
- },
- },
- userPermissions: {
- [PERMISSION_CREATE_MR]: true,
- },
- },
- },
- });
-
- store.state.commit.commitAction = '2';
- store.state.commit.commitMessage = 'testing 123';
-
- store.state.openFiles.forEach(localF => {
- store.state.entries[localF.path] = localF;
- });
- });
-
- afterEach(() => {
- document.querySelector('.flash-container').remove();
- });
-
- describe('success', () => {
- const COMMIT_RESPONSE = {
- id: '123456',
- short_id: '123',
- message: 'test message',
- committed_date: 'date',
- parent_ids: '321',
- stats: {
- additions: '1',
- deletions: '2',
- },
- };
-
- beforeEach(() => {
- spyOn(service, 'commit').and.returnValue(
- Promise.resolve({
- data: COMMIT_RESPONSE,
- }),
- );
- });
-
- it('calls service', done => {
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(service.commit).toHaveBeenCalledWith('abcproject', {
- branch: jasmine.anything(),
- commit_message: 'testing 123',
- actions: [
- {
- action: commitActionTypes.update,
- file_path: jasmine.anything(),
- content: '\n',
- encoding: jasmine.anything(),
- last_commit_id: undefined,
- previous_path: undefined,
- },
- ],
- start_sha: TEST_COMMIT_SHA,
- });
-
- done();
- })
- .catch(done.fail);
- });
-
- it('sends lastCommit ID when not creating new branch', done => {
- store.state.commit.commitAction = '1';
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(service.commit).toHaveBeenCalledWith('abcproject', {
- branch: jasmine.anything(),
- commit_message: 'testing 123',
- actions: [
- {
- action: commitActionTypes.update,
- file_path: jasmine.anything(),
- content: '\n',
- encoding: jasmine.anything(),
- last_commit_id: TEST_COMMIT_SHA,
- previous_path: undefined,
- },
- ],
- start_sha: undefined,
- });
-
- done();
- })
- .catch(done.fail);
- });
-
- it('sets last Commit Msg', done => {
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.state.lastCommitMsg).toBe(
- 'Your changes have been committed. Commit <a href="webUrl/-/commit/123" class="commit-sha">123</a> with 1 additions, 2 deletions.',
- );
-
- done();
- })
- .catch(done.fail);
- });
-
- it('adds commit data to files', done => {
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.state.entries[store.state.openFiles[0].path].lastCommitSha).toBe(
- COMMIT_RESPONSE.id,
- );
-
- done();
- })
- .catch(done.fail);
- });
-
- it('resets stores commit actions', done => {
- store.state.commit.commitAction = consts.COMMIT_TO_NEW_BRANCH;
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.state.commit.commitAction).not.toBe(consts.COMMIT_TO_NEW_BRANCH);
- })
- .then(done)
- .catch(done.fail);
- });
-
- it('removes all staged files', done => {
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.state.stagedFiles.length).toBe(0);
- })
- .then(done)
- .catch(done.fail);
- });
-
- describe('merge request', () => {
- it('redirects to new merge request page', done => {
- spyOn(eventHub, '$on');
-
- store.state.commit.commitAction = consts.COMMIT_TO_NEW_BRANCH;
- store.state.commit.shouldCreateMR = true;
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(visitUrl).toHaveBeenCalledWith(
- `webUrl/-/merge_requests/new?merge_request[source_branch]=${
- store.getters['commit/placeholderBranchName']
- }&merge_request[target_branch]=master&nav_source=webide`,
- );
-
- done();
- })
- .catch(done.fail);
- });
-
- it('does not redirect to new merge request page when shouldCreateMR is not checked', done => {
- spyOn(eventHub, '$on');
-
- store.state.commit.commitAction = consts.COMMIT_TO_NEW_BRANCH;
- store.state.commit.shouldCreateMR = false;
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(visitUrl).not.toHaveBeenCalled();
- done();
- })
- .catch(done.fail);
- });
-
- it('resets changed files before redirecting', done => {
- visitUrl = visitUrl.and.callFake(() => {
- expect(store.state.stagedFiles.length).toBe(0);
- done();
- });
-
- spyOn(eventHub, '$on');
-
- store.state.commit.commitAction = '3';
-
- store.dispatch('commit/commitChanges').catch(done.fail);
- });
- });
- });
-
- describe('failed', () => {
- beforeEach(() => {
- spyOn(service, 'commit').and.returnValue(
- Promise.resolve({
- data: {
- message: 'failed message',
- },
- }),
- );
- });
-
- it('shows failed message', done => {
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- const alert = document.querySelector('.flash-container');
-
- expect(alert.textContent.trim()).toBe('failed message');
-
- done();
- })
- .catch(done.fail);
- });
- });
-
- describe('first commit of a branch', () => {
- const COMMIT_RESPONSE = {
- id: '123456',
- short_id: '123',
- message: 'test message',
- committed_date: 'date',
- parent_ids: [],
- stats: {
- additions: '1',
- deletions: '2',
- },
- };
-
- it('commits TOGGLE_EMPTY_STATE mutation on empty repo', done => {
- spyOn(service, 'commit').and.returnValue(
- Promise.resolve({
- data: COMMIT_RESPONSE,
- }),
- );
-
- spyOn(store, 'commit').and.callThrough();
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.commit.calls.allArgs()).toEqual(
- jasmine.arrayContaining([
- ['TOGGLE_EMPTY_STATE', jasmine.any(Object), jasmine.any(Object)],
- ]),
- );
- done();
- })
- .catch(done.fail);
- });
-
- it('does not commmit TOGGLE_EMPTY_STATE mutation on existing project', done => {
- COMMIT_RESPONSE.parent_ids.push('1234');
- spyOn(service, 'commit').and.returnValue(
- Promise.resolve({
- data: COMMIT_RESPONSE,
- }),
- );
- spyOn(store, 'commit').and.callThrough();
-
- store
- .dispatch('commit/commitChanges')
- .then(() => {
- expect(store.commit.calls.allArgs()).not.toEqual(
- jasmine.arrayContaining([
- ['TOGGLE_EMPTY_STATE', jasmine.any(Object), jasmine.any(Object)],
- ]),
- );
- done();
- })
- .catch(done.fail);
- });
- });
- });
-
- describe('toggleShouldCreateMR', () => {
- it('commits both toggle and interacting with MR checkbox actions', done => {
- testAction(
- actions.toggleShouldCreateMR,
- {},
- store.state,
- [{ type: mutationTypes.TOGGLE_SHOULD_CREATE_MR }],
- [],
- done,
- );
- });
- });
-});