summaryrefslogtreecommitdiff
path: root/spec/frontend/ide/stores/modules/editor
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/ide/stores/modules/editor')
-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
4 files changed, 189 insertions, 0 deletions
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: {},
+ });
+ });
+});