Skip to content
Snippets Groups Projects
Commit 45064348 authored by Heinrich Lee Yu's avatar Heinrich Lee Yu :basketball:
Browse files

Fix conflict warning being incorrectly displayed

Hide warning when update request is in progress
parent d70529df
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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);
Loading
Loading
@@ -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
Loading
Loading
---
title: Fix flashing conflict warning when editing issues
merge_request: 31469
author:
type: fixed
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);
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment