diff options
author | Heinrich Lee Yu <heinrich@gitlab.com> | 2019-08-05 16:56:03 +0800 |
---|---|---|
committer | Heinrich Lee Yu <heinrich@gitlab.com> | 2019-08-12 13:42:20 +0800 |
commit | 45064348619ce7585d15756950eae5f5346ee631 (patch) | |
tree | ad8bc69450e4d4f36a5f91fd35f96e8969091141 | |
parent | d70529df4dcc6c32c98e3e8febf9bd654789d8d2 (diff) | |
download | gitlab-ce-45064348619ce7585d15756950eae5f5346ee631.tar.gz |
Fix conflict warning being incorrectly displayed44036-someone-edited-the-issue-at-the-same-time-is-regularly-seen-despite-that-being-a-filthy-lie
Hide warning when update request is in progress
3 files changed, 73 insertions, 48 deletions
diff --git a/app/assets/javascripts/issue_show/components/form.vue b/app/assets/javascripts/issue_show/components/form.vue index 528ccb77efc..d48bf1fe7a9 100644 --- a/app/assets/javascripts/issue_show/components/form.vue +++ b/app/assets/javascripts/issue_show/components/form.vue @@ -70,6 +70,9 @@ export default { hasIssuableTemplates() { return this.issuableTemplates.length; }, + showLockedWarning() { + return this.formState.lockedWarningVisible && !this.formState.updateLoading; + }, }, created() { eventHub.$on('delete.issuable', this.resetAutosave); @@ -117,7 +120,7 @@ export default { <template> <form> - <locked-warning v-if="formState.lockedWarningVisible" /> + <locked-warning v-if="showLockedWarning" /> <div class="row"> <div v-if="hasIssuableTemplates" class="col-sm-4 col-lg-3"> <description-template diff --git a/changelogs/unreleased/44036-someone-edited-the-issue-at-the-same-time-is-regularly-seen-despite-that-being-a-filthy-lie.yml b/changelogs/unreleased/44036-someone-edited-the-issue-at-the-same-time-is-regularly-seen-despite-that-being-a-filthy-lie.yml new file mode 100644 index 00000000000..674d53286e6 --- /dev/null +++ b/changelogs/unreleased/44036-someone-edited-the-issue-at-the-same-time-is-regularly-seen-despite-that-being-a-filthy-lie.yml @@ -0,0 +1,5 @@ +--- +title: Fix flashing conflict warning when editing issues +merge_request: 31469 +author: +type: fixed diff --git a/spec/javascripts/issue_show/components/form_spec.js b/spec/javascripts/issue_show/components/form_spec.js index b0f4ab2b12d..a111333ac80 100644 --- a/spec/javascripts/issue_show/components/form_spec.js +++ b/spec/javascripts/issue_show/components/form_spec.js @@ -1,81 +1,98 @@ import Vue from 'vue'; +import mountComponent from 'spec/helpers/vue_mount_component_helper'; import formComponent from '~/issue_show/components/form.vue'; import eventHub from '~/issue_show/event_hub'; describe('Inline edit form component', () => { let vm; - let autosave; - let autosaveObj; - - beforeEach(done => { - autosaveObj = { reset: jasmine.createSpy() }; - - autosave = spyOnDependency(formComponent, 'Autosave').and.returnValue(autosaveObj); + const defaultProps = { + canDestroy: true, + formState: { + title: 'b', + description: 'a', + lockedWarningVisible: false, + }, + issuableType: 'issue', + markdownPreviewPath: '/', + markdownDocsPath: '/', + projectPath: '/', + projectNamespace: '/', + }; + + afterEach(() => { + vm.$destroy(); + }); + const createComponent = props => { const Component = Vue.extend(formComponent); - vm = new Component({ - propsData: { - canDestroy: true, - formState: { - title: 'b', - description: 'a', - lockedWarningVisible: false, - }, - issuableType: 'issue', - markdownPreviewPath: '/', - markdownDocsPath: '/', - projectPath: '/', - projectNamespace: '/', - }, - }).$mount(); - - Vue.nextTick(done); - }); + vm = mountComponent(Component, { + ...defaultProps, + ...props, + }); + }; it('does not render template selector if no templates exist', () => { + createComponent(); + expect(vm.$el.querySelector('.js-issuable-selector-wrap')).toBeNull(); }); - it('renders template selector when templates exists', done => { - vm.issuableTemplates = ['test']; - - Vue.nextTick(() => { - expect(vm.$el.querySelector('.js-issuable-selector-wrap')).not.toBeNull(); + it('renders template selector when templates exists', () => { + createComponent({ issuableTemplates: ['test'] }); - done(); - }); + expect(vm.$el.querySelector('.js-issuable-selector-wrap')).not.toBeNull(); }); it('hides locked warning by default', () => { + createComponent(); + expect(vm.$el.querySelector('.alert')).toBeNull(); }); - it('shows locked warning if formState is different', done => { - vm.formState.lockedWarningVisible = true; + it('shows locked warning if formState is different', () => { + createComponent({ formState: { ...defaultProps.formState, lockedWarningVisible: true } }); - Vue.nextTick(() => { - expect(vm.$el.querySelector('.alert')).not.toBeNull(); + expect(vm.$el.querySelector('.alert')).not.toBeNull(); + }); - done(); + it('hides locked warning when currently saving', () => { + createComponent({ + formState: { ...defaultProps.formState, updateLoading: true, lockedWarningVisible: true }, }); - }); - it('initialized Autosave on mount', () => { - expect(autosave).toHaveBeenCalledTimes(2); + expect(vm.$el.querySelector('.alert')).toBeNull(); }); - it('calls reset on autosave when eventHub emits appropriate events', () => { - eventHub.$emit('close.form'); + describe('autosave', () => { + let autosaveObj; + let autosave; + + beforeEach(() => { + autosaveObj = { reset: jasmine.createSpy() }; + autosave = spyOnDependency(formComponent, 'Autosave').and.returnValue(autosaveObj); + }); + + it('initialized Autosave on mount', () => { + createComponent(); - expect(autosaveObj.reset).toHaveBeenCalledTimes(2); + expect(autosave).toHaveBeenCalledTimes(2); + }); + + it('calls reset on autosave when eventHub emits appropriate events', () => { + createComponent(); + + eventHub.$emit('close.form'); - eventHub.$emit('delete.issuable'); + expect(autosaveObj.reset).toHaveBeenCalledTimes(2); - expect(autosaveObj.reset).toHaveBeenCalledTimes(4); + eventHub.$emit('delete.issuable'); - eventHub.$emit('update.issuable'); + expect(autosaveObj.reset).toHaveBeenCalledTimes(4); - expect(autosaveObj.reset).toHaveBeenCalledTimes(6); + eventHub.$emit('update.issuable'); + + expect(autosaveObj.reset).toHaveBeenCalledTimes(6); + }); }); }); |