summaryrefslogtreecommitdiff
path: root/spec/frontend/static_site_editor/components/edit_meta_modal_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/static_site_editor/components/edit_meta_modal_spec.js')
-rw-r--r--spec/frontend/static_site_editor/components/edit_meta_modal_spec.js127
1 files changed, 109 insertions, 18 deletions
diff --git a/spec/frontend/static_site_editor/components/edit_meta_modal_spec.js b/spec/frontend/static_site_editor/components/edit_meta_modal_spec.js
index 7a5685033f3..c7d0abee05c 100644
--- a/spec/frontend/static_site_editor/components/edit_meta_modal_spec.js
+++ b/spec/frontend/static_site_editor/components/edit_meta_modal_spec.js
@@ -1,48 +1,87 @@
import { shallowMount } from '@vue/test-utils';
-
import { GlModal } from '@gitlab/ui';
-
+import { useLocalStorageSpy } from 'helpers/local_storage_helper';
+import MockAdapter from 'axios-mock-adapter';
+import axios from '~/lib/utils/axios_utils';
+import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import EditMetaModal from '~/static_site_editor/components/edit_meta_modal.vue';
import EditMetaControls from '~/static_site_editor/components/edit_meta_controls.vue';
-
-import { sourcePath, mergeRequestMeta } from '../mock_data';
+import { MR_META_LOCAL_STORAGE_KEY } from '~/static_site_editor/constants';
+import {
+ sourcePath,
+ mergeRequestMeta,
+ mergeRequestTemplates,
+ project as namespaceProject,
+} from '../mock_data';
describe('~/static_site_editor/components/edit_meta_modal.vue', () => {
+ useLocalStorageSpy();
+
let wrapper;
- let resetCachedEditable;
- let mockEditMetaControlsInstance;
+ let mockAxios;
const { title, description } = mergeRequestMeta;
+ const [namespace, project] = namespaceProject.split('/');
- const buildWrapper = (propsData = {}) => {
+ const buildWrapper = (propsData = {}, data = {}) => {
wrapper = shallowMount(EditMetaModal, {
propsData: {
sourcePath,
+ namespace,
+ project,
...propsData,
},
+ data: () => data,
});
};
- const buildMocks = () => {
- resetCachedEditable = jest.fn();
- mockEditMetaControlsInstance = { resetCachedEditable };
- wrapper.vm.$refs.editMetaControls = mockEditMetaControlsInstance;
+ const buildMockAxios = () => {
+ mockAxios = new MockAdapter(axios);
+ const templatesMergeRequestsPath = `templates/merge_request`;
+ mockAxios
+ .onGet(`${namespace}/${project}/${templatesMergeRequestsPath}`)
+ .reply(200, mergeRequestTemplates);
+ };
+
+ const buildMockRefs = () => {
+ wrapper.vm.$refs.editMetaControls = { resetCachedEditable: jest.fn() };
};
const findGlModal = () => wrapper.find(GlModal);
const findEditMetaControls = () => wrapper.find(EditMetaControls);
+ const findLocalStorageSync = () => wrapper.find(LocalStorageSync);
beforeEach(() => {
+ localStorage.setItem(MR_META_LOCAL_STORAGE_KEY);
+
+ buildMockAxios();
buildWrapper();
- buildMocks();
+ buildMockRefs();
return wrapper.vm.$nextTick();
});
afterEach(() => {
+ mockAxios.restore();
+
wrapper.destroy();
wrapper = null;
});
+ it('initializes initial merge request meta with local storage data', async () => {
+ const localStorageMeta = {
+ title: 'stored title',
+ description: 'stored description',
+ templates: null,
+ currentTemplate: null,
+ };
+
+ findLocalStorageSync().vm.$emit('input', localStorageMeta);
+
+ await wrapper.vm.$nextTick();
+
+ expect(findEditMetaControls().props()).toEqual(localStorageMeta);
+ });
+
it('renders the modal', () => {
expect(findGlModal().exists()).toBe(true);
});
@@ -63,18 +102,70 @@ describe('~/static_site_editor/components/edit_meta_modal.vue', () => {
expect(findEditMetaControls().props('description')).toBe(description);
});
- it('emits the primary event with mergeRequestMeta', () => {
- findGlModal().vm.$emit('primary', mergeRequestMeta);
- expect(wrapper.emitted('primary')).toEqual([[mergeRequestMeta]]);
+ it('forwards the templates prop', () => {
+ expect(findEditMetaControls().props('templates')).toBe(null);
+ });
+
+ it('forwards the currentTemplate prop', () => {
+ expect(findEditMetaControls().props('currentTemplate')).toBe(null);
+ });
+
+ describe('when save button is clicked', () => {
+ beforeEach(() => {
+ findGlModal().vm.$emit('primary', mergeRequestMeta);
+ });
+
+ it('removes merge request meta from local storage', () => {
+ expect(findLocalStorageSync().props().clear).toBe(true);
+ });
+
+ it('emits the primary event with mergeRequestMeta', () => {
+ expect(wrapper.emitted('primary')).toEqual([[mergeRequestMeta]]);
+ });
});
- it('calls resetCachedEditable on EditMetaControls when primary emits', () => {
- findGlModal().vm.$emit('primary', mergeRequestMeta);
- expect(mockEditMetaControlsInstance.resetCachedEditable).toHaveBeenCalled();
+ describe('when templates exist', () => {
+ const template1 = mergeRequestTemplates[0];
+
+ beforeEach(() => {
+ buildWrapper({}, { templates: mergeRequestTemplates, currentTemplate: null });
+ });
+
+ it('sets the currentTemplate on the changeTemplate event', async () => {
+ findEditMetaControls().vm.$emit('changeTemplate', template1);
+
+ await wrapper.vm.$nextTick();
+
+ expect(findEditMetaControls().props().currentTemplate).toBe(template1);
+
+ findEditMetaControls().vm.$emit('changeTemplate', null);
+
+ await wrapper.vm.$nextTick();
+
+ expect(findEditMetaControls().props().currentTemplate).toBe(null);
+ });
+
+ it('updates the description on the changeTemplate event', async () => {
+ findEditMetaControls().vm.$emit('changeTemplate', template1);
+
+ await wrapper.vm.$nextTick();
+
+ expect(findEditMetaControls().props().description).toEqual(template1.content);
+ });
});
it('emits the hide event', () => {
findGlModal().vm.$emit('hide');
expect(wrapper.emitted('hide')).toEqual([[]]);
});
+
+ it('stores merge request meta changes in local storage when changes happen', async () => {
+ const newMeta = { title: 'new title', description: 'new description' };
+
+ findEditMetaControls().vm.$emit('updateSettings', newMeta);
+
+ await wrapper.vm.$nextTick();
+
+ expect(findLocalStorageSync().props('value')).toEqual(newMeta);
+ });
});