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/ide/stores')
-rw-r--r--spec/frontend/ide/stores/actions/file_spec.js14
-rw-r--r--spec/frontend/ide/stores/actions_spec.js12
-rw-r--r--spec/frontend/ide/stores/modules/editor/actions_spec.js36
-rw-r--r--spec/frontend/ide/stores/modules/editor/getters_spec.js31
-rw-r--r--spec/frontend/ide/stores/modules/editor/mutations_spec.js78
-rw-r--r--spec/frontend/ide/stores/modules/editor/setup_spec.js44
-rw-r--r--spec/frontend/ide/stores/mutations/file_spec.js12
7 files changed, 205 insertions, 22 deletions
diff --git a/spec/frontend/ide/stores/actions/file_spec.js b/spec/frontend/ide/stores/actions/file_spec.js
index 8f7fcc25cf0..cc290fc526e 100644
--- a/spec/frontend/ide/stores/actions/file_spec.js
+++ b/spec/frontend/ide/stores/actions/file_spec.js
@@ -7,7 +7,7 @@ import * as types from '~/ide/stores/mutation_types';
import service from '~/ide/services';
import { createRouter } from '~/ide/ide_router';
import eventHub from '~/ide/eventhub';
-import { file } from '../../helpers';
+import { file, createTriggerRenameAction } from '../../helpers';
const ORIGINAL_CONTENT = 'original content';
const RELATIVE_URL_ROOT = '/gitlab';
@@ -785,13 +785,19 @@ describe('IDE store file actions', () => {
});
describe('triggerFilesChange', () => {
+ const { payload: renamePayload } = createTriggerRenameAction('test', '123');
+
beforeEach(() => {
jest.spyOn(eventHub, '$emit').mockImplementation(() => {});
});
- it('emits event that files have changed', () => {
- return store.dispatch('triggerFilesChange').then(() => {
- expect(eventHub.$emit).toHaveBeenCalledWith('ide.files.change');
+ it.each`
+ args | payload
+ ${[]} | ${{}}
+ ${[renamePayload]} | ${renamePayload}
+ `('emits event that files have changed (args=$args)', ({ args, payload }) => {
+ return store.dispatch('triggerFilesChange', ...args).then(() => {
+ expect(eventHub.$emit).toHaveBeenCalledWith('ide.files.change', payload);
});
});
});
diff --git a/spec/frontend/ide/stores/actions_spec.js b/spec/frontend/ide/stores/actions_spec.js
index ebf39df2f6f..04128c27e70 100644
--- a/spec/frontend/ide/stores/actions_spec.js
+++ b/spec/frontend/ide/stores/actions_spec.js
@@ -19,7 +19,7 @@ import {
} from '~/ide/stores/actions';
import axios from '~/lib/utils/axios_utils';
import * as types from '~/ide/stores/mutation_types';
-import { file } from '../helpers';
+import { file, createTriggerRenameAction, createTriggerChangeAction } from '../helpers';
import testAction from '../../helpers/vuex_action_helper';
import eventHub from '~/ide/eventhub';
@@ -522,7 +522,7 @@ describe('Multi-file store actions', () => {
'path',
store.state,
[{ type: types.DELETE_ENTRY, payload: 'path' }],
- [{ type: 'stageChange', payload: 'path' }, { type: 'triggerFilesChange' }],
+ [{ type: 'stageChange', payload: 'path' }, createTriggerChangeAction()],
done,
);
});
@@ -551,7 +551,7 @@ describe('Multi-file store actions', () => {
[{ type: types.DELETE_ENTRY, payload: 'testFolder/entry-to-delete' }],
[
{ type: 'stageChange', payload: 'testFolder/entry-to-delete' },
- { type: 'triggerFilesChange' },
+ createTriggerChangeAction(),
],
done,
);
@@ -614,7 +614,7 @@ describe('Multi-file store actions', () => {
testEntry.path,
store.state,
[{ type: types.DELETE_ENTRY, payload: testEntry.path }],
- [{ type: 'stageChange', payload: testEntry.path }, { type: 'triggerFilesChange' }],
+ [{ type: 'stageChange', payload: testEntry.path }, createTriggerChangeAction()],
done,
);
});
@@ -754,7 +754,7 @@ describe('Multi-file store actions', () => {
payload: origEntry,
},
],
- [{ type: 'triggerFilesChange' }],
+ [createTriggerRenameAction('renamed', 'orig')],
done,
);
});
@@ -767,7 +767,7 @@ describe('Multi-file store actions', () => {
{ path: 'orig', name: 'renamed' },
store.state,
[expect.objectContaining({ type: types.RENAME_ENTRY })],
- [{ type: 'triggerFilesChange' }],
+ [createTriggerRenameAction('orig', 'renamed')],
done,
);
});
diff --git a/spec/frontend/ide/stores/modules/editor/actions_spec.js b/spec/frontend/ide/stores/modules/editor/actions_spec.js
new file mode 100644
index 00000000000..6a420ac32de
--- /dev/null
+++ b/spec/frontend/ide/stores/modules/editor/actions_spec.js
@@ -0,0 +1,36 @@
+import testAction from 'helpers/vuex_action_helper';
+import * as types from '~/ide/stores/modules/editor/mutation_types';
+import * as actions from '~/ide/stores/modules/editor/actions';
+import { createTriggerRenamePayload } from '../../../helpers';
+
+describe('~/ide/stores/modules/editor/actions', () => {
+ describe('updateFileEditor', () => {
+ it('commits with payload', () => {
+ const payload = {};
+
+ testAction(actions.updateFileEditor, payload, {}, [
+ { type: types.UPDATE_FILE_EDITOR, payload },
+ ]);
+ });
+ });
+
+ describe('removeFileEditor', () => {
+ it('commits with payload', () => {
+ const payload = 'path/to/file.txt';
+
+ testAction(actions.removeFileEditor, payload, {}, [
+ { type: types.REMOVE_FILE_EDITOR, payload },
+ ]);
+ });
+ });
+
+ describe('renameFileEditor', () => {
+ it('commits with payload', () => {
+ const payload = createTriggerRenamePayload('test', 'test123');
+
+ testAction(actions.renameFileEditor, payload, {}, [
+ { type: types.RENAME_FILE_EDITOR, payload },
+ ]);
+ });
+ });
+});
diff --git a/spec/frontend/ide/stores/modules/editor/getters_spec.js b/spec/frontend/ide/stores/modules/editor/getters_spec.js
new file mode 100644
index 00000000000..55e1e31f66f
--- /dev/null
+++ b/spec/frontend/ide/stores/modules/editor/getters_spec.js
@@ -0,0 +1,31 @@
+import { createDefaultFileEditor } from '~/ide/stores/modules/editor/utils';
+import * as getters from '~/ide/stores/modules/editor/getters';
+
+const TEST_PATH = 'test/path.md';
+const TEST_FILE_EDITOR = {
+ ...createDefaultFileEditor(),
+ editorRow: 7,
+ editorColumn: 8,
+ fileLanguage: 'markdown',
+};
+
+describe('~/ide/stores/modules/editor/getters', () => {
+ describe('activeFileEditor', () => {
+ it.each`
+ activeFile | fileEditors | expected
+ ${null} | ${{}} | ${null}
+ ${{}} | ${{}} | ${createDefaultFileEditor()}
+ ${{ path: TEST_PATH }} | ${{}} | ${createDefaultFileEditor()}
+ ${{ path: TEST_PATH }} | ${{ bogus: createDefaultFileEditor(), [TEST_PATH]: TEST_FILE_EDITOR }} | ${TEST_FILE_EDITOR}
+ `(
+ 'with activeFile=$activeFile and fileEditors=$fileEditors',
+ ({ activeFile, fileEditors, expected }) => {
+ const rootGetters = { activeFile };
+ const state = { fileEditors };
+ const result = getters.activeFileEditor(state, {}, {}, rootGetters);
+
+ expect(result).toEqual(expected);
+ },
+ );
+ });
+});
diff --git a/spec/frontend/ide/stores/modules/editor/mutations_spec.js b/spec/frontend/ide/stores/modules/editor/mutations_spec.js
new file mode 100644
index 00000000000..e4b330b3174
--- /dev/null
+++ b/spec/frontend/ide/stores/modules/editor/mutations_spec.js
@@ -0,0 +1,78 @@
+import { createDefaultFileEditor } from '~/ide/stores/modules/editor/utils';
+import * as types from '~/ide/stores/modules/editor/mutation_types';
+import mutations from '~/ide/stores/modules/editor/mutations';
+import { createTriggerRenamePayload } from '../../../helpers';
+
+const TEST_PATH = 'test/path.md';
+
+describe('~/ide/stores/modules/editor/mutations', () => {
+ describe(types.UPDATE_FILE_EDITOR, () => {
+ it('with path that does not exist, should initialize with default values', () => {
+ const state = { fileEditors: {} };
+ const data = { fileLanguage: 'markdown' };
+
+ mutations[types.UPDATE_FILE_EDITOR](state, { path: TEST_PATH, data });
+
+ expect(state.fileEditors).toEqual({
+ [TEST_PATH]: {
+ ...createDefaultFileEditor(),
+ ...data,
+ },
+ });
+ });
+
+ it('with existing path, should overwrite values', () => {
+ const state = {
+ fileEditors: {
+ foo: {},
+ [TEST_PATH]: { ...createDefaultFileEditor(), editorRow: 7, editorColumn: 7 },
+ },
+ };
+
+ mutations[types.UPDATE_FILE_EDITOR](state, {
+ path: TEST_PATH,
+ data: { fileLanguage: 'markdown' },
+ });
+
+ expect(state).toEqual({
+ fileEditors: {
+ foo: {},
+ [TEST_PATH]: {
+ ...createDefaultFileEditor(),
+ editorRow: 7,
+ editorColumn: 7,
+ fileLanguage: 'markdown',
+ },
+ },
+ });
+ });
+ });
+
+ describe(types.REMOVE_FILE_EDITOR, () => {
+ it.each`
+ fileEditors | path | expected
+ ${{}} | ${'does/not/exist.txt'} | ${{}}
+ ${{ foo: {}, [TEST_PATH]: {} }} | ${TEST_PATH} | ${{ foo: {} }}
+ `('removes file $path', ({ fileEditors, path, expected }) => {
+ const state = { fileEditors };
+
+ mutations[types.REMOVE_FILE_EDITOR](state, path);
+
+ expect(state).toEqual({ fileEditors: expected });
+ });
+ });
+
+ describe(types.RENAME_FILE_EDITOR, () => {
+ it.each`
+ fileEditors | payload | expected
+ ${{ foo: {} }} | ${createTriggerRenamePayload('does/not/exist', 'abc')} | ${{ foo: {} }}
+ ${{ foo: { a: 1 }, bar: {} }} | ${createTriggerRenamePayload('foo', 'abc/def')} | ${{ 'abc/def': { a: 1 }, bar: {} }}
+ `('renames fileEditor at $payload', ({ fileEditors, payload, expected }) => {
+ const state = { fileEditors };
+
+ mutations[types.RENAME_FILE_EDITOR](state, payload);
+
+ expect(state).toEqual({ fileEditors: expected });
+ });
+ });
+});
diff --git a/spec/frontend/ide/stores/modules/editor/setup_spec.js b/spec/frontend/ide/stores/modules/editor/setup_spec.js
new file mode 100644
index 00000000000..71b5d7590c5
--- /dev/null
+++ b/spec/frontend/ide/stores/modules/editor/setup_spec.js
@@ -0,0 +1,44 @@
+import Vuex from 'vuex';
+import eventHub from '~/ide/eventhub';
+import { createStoreOptions } from '~/ide/stores';
+import { setupFileEditorsSync } from '~/ide/stores/modules/editor/setup';
+import { createTriggerRenamePayload } from '../../../helpers';
+
+describe('~/ide/stores/modules/editor/setup', () => {
+ let store;
+
+ beforeEach(() => {
+ store = new Vuex.Store(createStoreOptions());
+ store.state.entries = {
+ foo: {},
+ bar: {},
+ };
+ store.state.editor.fileEditors = {
+ foo: {},
+ bizz: {},
+ };
+
+ setupFileEditorsSync(store);
+ });
+
+ it('when files change is emitted, removes unused fileEditors', () => {
+ eventHub.$emit('ide.files.change');
+
+ expect(store.state.entries).toEqual({
+ foo: {},
+ bar: {},
+ });
+ expect(store.state.editor.fileEditors).toEqual({
+ foo: {},
+ });
+ });
+
+ it('when files rename is emitted, renames fileEditor', () => {
+ eventHub.$emit('ide.files.change', createTriggerRenamePayload('foo', 'foo_new'));
+
+ expect(store.state.editor.fileEditors).toEqual({
+ foo_new: {},
+ bizz: {},
+ });
+ });
+});
diff --git a/spec/frontend/ide/stores/mutations/file_spec.js b/spec/frontend/ide/stores/mutations/file_spec.js
index d303de6e9ef..fd39cf21635 100644
--- a/spec/frontend/ide/stores/mutations/file_spec.js
+++ b/spec/frontend/ide/stores/mutations/file_spec.js
@@ -1,6 +1,5 @@
import mutations from '~/ide/stores/mutations/file';
import { createStore } from '~/ide/stores';
-import { FILE_VIEW_MODE_PREVIEW } from '~/ide/constants';
import { file } from '../../helpers';
describe('IDE store file mutations', () => {
@@ -532,17 +531,6 @@ describe('IDE store file mutations', () => {
});
});
- describe('SET_FILE_VIEWMODE', () => {
- it('updates file view mode', () => {
- mutations.SET_FILE_VIEWMODE(localState, {
- file: localFile,
- viewMode: FILE_VIEW_MODE_PREVIEW,
- });
-
- expect(localFile.viewMode).toBe(FILE_VIEW_MODE_PREVIEW);
- });
- });
-
describe('ADD_PENDING_TAB', () => {
beforeEach(() => {
const f = { ...file('openFile'), path: 'openFile', active: true, opened: true };