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:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-20 21:07:53 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-20 21:07:53 +0300
commit682360490629376e2ec07d737c7d7dbfdaaeeab7 (patch)
tree7abe62a4d200738ac086ac0c0bd633ce0bc03f00 /spec/frontend/ide
parent2f26f81ce3e3f97ddc5ce5e2e103925d7d0d170f (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/ide')
-rw-r--r--spec/frontend/ide/stores/actions/file_spec.js52
-rw-r--r--spec/frontend/ide/stores/mutations/file_spec.js174
2 files changed, 172 insertions, 54 deletions
diff --git a/spec/frontend/ide/stores/actions/file_spec.js b/spec/frontend/ide/stores/actions/file_spec.js
index 283ea266821..e9a657ffbfc 100644
--- a/spec/frontend/ide/stores/actions/file_spec.js
+++ b/spec/frontend/ide/stores/actions/file_spec.js
@@ -1,20 +1,20 @@
import Vue from 'vue';
import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils';
-import store from '~/ide/stores';
+import { createStore } from '~/ide/stores';
import * as actions from '~/ide/stores/actions/file';
import * as types from '~/ide/stores/mutation_types';
import service from '~/ide/services';
import router from '~/ide/ide_router';
import eventHub from '~/ide/eventhub';
-import { file, resetStore } from '../../helpers';
-import testAction from '../../../helpers/vuex_action_helper';
+import { file } from '../../helpers';
const RELATIVE_URL_ROOT = '/gitlab';
describe('IDE store file actions', () => {
let mock;
let originalGon;
+ let store;
beforeEach(() => {
mock = new MockAdapter(axios);
@@ -24,12 +24,15 @@ describe('IDE store file actions', () => {
relative_url_root: RELATIVE_URL_ROOT,
};
+ store = createStore();
+
+ jest.spyOn(store, 'commit');
+ jest.spyOn(store, 'dispatch');
jest.spyOn(router, 'push').mockImplementation(() => {});
});
afterEach(() => {
mock.restore();
- resetStore(store);
window.gon = originalGon;
});
@@ -663,30 +666,33 @@ describe('IDE store file actions', () => {
});
describe('stageChange', () => {
- it('calls STAGE_CHANGE with file path', done => {
- testAction(
- actions.stageChange,
- 'path',
- store.state,
- [
- { type: types.STAGE_CHANGE, payload: 'path' },
- { type: types.SET_LAST_COMMIT_MSG, payload: '' },
- ],
- [],
- done,
+ it('calls STAGE_CHANGE with file path', () => {
+ const f = { ...file('path'), content: 'old' };
+
+ store.state.entries[f.path] = f;
+
+ actions.stageChange(store, 'path');
+
+ expect(store.commit).toHaveBeenCalledWith(
+ types.STAGE_CHANGE,
+ expect.objectContaining({ path: 'path' }),
);
+ expect(store.commit).toHaveBeenCalledWith(types.SET_LAST_COMMIT_MSG, '');
});
});
describe('unstageChange', () => {
- it('calls UNSTAGE_CHANGE with file path', done => {
- testAction(
- actions.unstageChange,
- 'path',
- store.state,
- [{ type: types.UNSTAGE_CHANGE, payload: 'path' }],
- [],
- done,
+ it('calls UNSTAGE_CHANGE with file path', () => {
+ const f = { ...file('path'), content: 'old' };
+
+ store.state.entries[f.path] = f;
+ store.state.stagedFiles.push({ f, content: 'new' });
+
+ actions.unstageChange(store, 'path');
+
+ expect(store.commit).toHaveBeenCalledWith(
+ types.UNSTAGE_CHANGE,
+ expect.objectContaining({ path: 'path' }),
);
});
});
diff --git a/spec/frontend/ide/stores/mutations/file_spec.js b/spec/frontend/ide/stores/mutations/file_spec.js
index 91506c1b46c..8cb386d27e5 100644
--- a/spec/frontend/ide/stores/mutations/file_spec.js
+++ b/spec/frontend/ide/stores/mutations/file_spec.js
@@ -1,14 +1,16 @@
import mutations from '~/ide/stores/mutations/file';
-import state from '~/ide/stores/state';
+import { createStore } from '~/ide/stores';
import { FILE_VIEW_MODE_PREVIEW } from '~/ide/constants';
import { file } from '../../helpers';
describe('IDE store file mutations', () => {
let localState;
+ let localStore;
let localFile;
beforeEach(() => {
- localState = state();
+ localStore = createStore();
+ localState = localStore.state;
localFile = { ...file(), type: 'blob' };
localState.entries[localFile.path] = localFile;
@@ -333,44 +335,154 @@ describe('IDE store file mutations', () => {
});
});
- describe('STAGE_CHANGE', () => {
- beforeEach(() => {
- mutations.STAGE_CHANGE(localState, localFile.path);
- });
+ describe.each`
+ mutationName | mutation | addedTo | removedFrom | staged | changedFilesCount | stagedFilesCount
+ ${'STAGE_CHANGE'} | ${mutations.STAGE_CHANGE} | ${'stagedFiles'} | ${'changedFiles'} | ${true} | ${0} | ${1}
+ ${'UNSTAGE_CHANGE'} | ${mutations.UNSTAGE_CHANGE} | ${'changedFiles'} | ${'stagedFiles'} | ${false} | ${1} | ${0}
+ `(
+ '$mutationName',
+ ({ mutation, changedFilesCount, removedFrom, addedTo, staged, stagedFilesCount }) => {
+ let unstagedFile;
+ let stagedFile;
+
+ beforeEach(() => {
+ unstagedFile = {
+ ...file('file'),
+ type: 'blob',
+ raw: 'original content',
+ content: 'changed content',
+ };
+
+ stagedFile = {
+ ...unstagedFile,
+ content: 'staged content',
+ staged: true,
+ };
+
+ localState.changedFiles.push(unstagedFile);
+ localState.stagedFiles.push(stagedFile);
+ localState.entries[unstagedFile.path] = unstagedFile;
+ });
- it('adds file into stagedFiles array', () => {
- expect(localState.stagedFiles.length).toBe(1);
- expect(localState.stagedFiles[0]).toEqual(localFile);
- });
+ it('removes all changes of a file if staged and unstaged change contents are equal', () => {
+ unstagedFile.content = 'original content';
- it('updates stagedFile if it is already staged', () => {
- localFile.raw = 'testing 123';
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
- mutations.STAGE_CHANGE(localState, localFile.path);
+ expect(localState.entries.file).toEqual(
+ expect.objectContaining({
+ content: 'original content',
+ staged: false,
+ changed: false,
+ }),
+ );
- expect(localState.stagedFiles.length).toBe(1);
- expect(localState.stagedFiles[0].raw).toEqual('testing 123');
- });
- });
+ expect(localState.stagedFiles.length).toBe(0);
+ expect(localState.changedFiles.length).toBe(0);
+ });
- describe('UNSTAGE_CHANGE', () => {
- let f;
+ it('removes all changes of a file if a file is deleted and a new file with same content is added', () => {
+ stagedFile.deleted = true;
+ unstagedFile.tempFile = true;
+ unstagedFile.content = 'original content';
- beforeEach(() => {
- f = { ...file(), type: 'blob', staged: true };
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
- localState.stagedFiles.push(f);
- localState.changedFiles.push(f);
- localState.entries[f.path] = f;
- });
+ expect(localState.stagedFiles.length).toBe(0);
+ expect(localState.changedFiles.length).toBe(0);
- it('removes from stagedFiles array', () => {
- mutations.UNSTAGE_CHANGE(localState, f.path);
+ expect(localState.entries.file).toEqual(
+ expect.objectContaining({
+ content: 'original content',
+ deleted: false,
+ tempFile: false,
+ }),
+ );
+ });
- expect(localState.stagedFiles.length).toBe(0);
- expect(localState.changedFiles.length).toBe(1);
- });
- });
+ it('merges deleted and added file into a changed file if the contents differ', () => {
+ stagedFile.deleted = true;
+ unstagedFile.tempFile = true;
+ unstagedFile.content = 'hello';
+
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
+
+ expect(localState.stagedFiles.length).toBe(stagedFilesCount);
+ expect(localState.changedFiles.length).toBe(changedFilesCount);
+
+ expect(unstagedFile).toEqual(
+ expect.objectContaining({
+ content: 'hello',
+ staged,
+ deleted: false,
+ tempFile: false,
+ changed: true,
+ }),
+ );
+ });
+
+ it('does not remove file from stagedFiles and changedFiles if the file was renamed, even if the contents are equal', () => {
+ unstagedFile.content = 'original content';
+ unstagedFile.prevPath = 'old_file';
+
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
+
+ expect(localState.entries.file).toEqual(
+ expect.objectContaining({
+ content: 'original content',
+ staged,
+ changed: false,
+ prevPath: 'old_file',
+ }),
+ );
+
+ expect(localState.stagedFiles.length).toBe(stagedFilesCount);
+ expect(localState.changedFiles.length).toBe(changedFilesCount);
+ });
+
+ it(`removes file from ${removedFrom} array and adds it into ${addedTo} array`, () => {
+ localState.stagedFiles.length = 0;
+
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
+
+ expect(localState.stagedFiles.length).toBe(stagedFilesCount);
+ expect(localState.changedFiles.length).toBe(changedFilesCount);
+
+ const f = localState.stagedFiles[0] || localState.changedFiles[0];
+ expect(f).toEqual(unstagedFile);
+ });
+
+ it(`updates file in ${addedTo} array if it is was already present in it`, () => {
+ unstagedFile.raw = 'testing 123';
+
+ mutation(localState, {
+ path: unstagedFile.path,
+ diffInfo: localStore.getters.getDiffInfo(unstagedFile.path),
+ });
+
+ expect(localState.stagedFiles.length).toBe(stagedFilesCount);
+ expect(localState.changedFiles.length).toBe(changedFilesCount);
+
+ const f = localState.stagedFiles[0] || localState.changedFiles[0];
+ expect(f.raw).toEqual('testing 123');
+ });
+ },
+ );
describe('TOGGLE_FILE_CHANGED', () => {
it('updates file changed status', () => {