Commit 9469979a authored by Eric Eastwood's avatar Eric Eastwood

Try to clean up legit Vue error that was patched over

See https://gitlab.com/gitlab-org/gitlab-ce/issues/37619#note_50422859
parent c1fac478
...@@ -122,9 +122,7 @@ ...@@ -122,9 +122,7 @@
// we need to do this to prevent noteForm inconsistent content warning // we need to do this to prevent noteForm inconsistent content warning
// this is something we intentionally do so we need to recover the content // this is something we intentionally do so we need to recover the content
this.note.note = noteText; this.note.note = noteText;
if (this.$refs.noteBody) { this.$refs.noteBody.$refs.noteForm.note = noteText;
this.$refs.noteBody.$refs.noteForm.note = noteText; // TODO: This could be better
}
}, },
}, },
created() { created() {
......
...@@ -2,6 +2,7 @@ import Vue from 'vue'; ...@@ -2,6 +2,7 @@ import Vue from 'vue';
import issueNotesApp from '~/notes/components/issue_notes_app.vue'; import issueNotesApp from '~/notes/components/issue_notes_app.vue';
import service from '~/notes/services/notes_service'; import service from '~/notes/services/notes_service';
import * as mockData from '../mock_data'; import * as mockData from '../mock_data';
import getSetTimeoutPromise from '../../helpers/set_timeout_promise_helper';
describe('issue_note_app', () => { describe('issue_note_app', () => {
let mountComponent; let mountComponent;
...@@ -13,10 +14,20 @@ describe('issue_note_app', () => { ...@@ -13,10 +14,20 @@ describe('issue_note_app', () => {
})); }));
}; };
const discussionNoteInterceptor = (request, next) => { const noteInterceptor = (request, next) => {
next(request.respondWith(JSON.stringify(mockData.discussionNoteServerResponse), { if (request.url === '/gitlab-org/gitlab-ce/issues/26/discussions.json') {
status: 200, next(request.respondWith(JSON.stringify(mockData.discussionNoteServerResponse), {
})); status: 200,
}));
} else if (request.url === '/gitlab-org/gitlab-ce/noteable/issue/98/notes') {
next(request.respondWith(JSON.stringify(mockData.notesPollingResponse), {
status: 200,
}));
} else if (request.method === 'PUT' && request.url === '/gitlab-org/gitlab-ce/notes/1471') {
next(request.respondWith(JSON.stringify(mockData.updatedNoteResponse), {
status: 200,
}));
}
}; };
beforeEach(() => { beforeEach(() => {
...@@ -129,13 +140,13 @@ describe('issue_note_app', () => { ...@@ -129,13 +140,13 @@ describe('issue_note_app', () => {
describe('update note', () => { describe('update note', () => {
describe('individual note', () => { describe('individual note', () => {
beforeEach(() => { beforeEach(() => {
Vue.http.interceptors.push(individualNoteInterceptor); Vue.http.interceptors.push(noteInterceptor);
spyOn(service, 'updateNote').and.callFake(() => Promise.resolve()); spyOn(service, 'updateNote').and.callThrough();
vm = mountComponent(); vm = mountComponent();
}); });
afterEach(() => { afterEach(() => {
Vue.http.interceptors = _.without(Vue.http.interceptors, individualNoteInterceptor); Vue.http.interceptors = _.without(Vue.http.interceptors, noteInterceptor);
}); });
it('renders edit form', (done) => { it('renders edit form', (done) => {
...@@ -149,28 +160,33 @@ describe('issue_note_app', () => { ...@@ -149,28 +160,33 @@ describe('issue_note_app', () => {
}); });
it('calls the service to update the note', (done) => { it('calls the service to update the note', (done) => {
setTimeout(() => { getSetTimeoutPromise()
vm.$el.querySelector('.js-note-edit').click(); .then(() => {
Vue.nextTick(() => { vm.$el.querySelector('.js-note-edit').click();
})
.then(Vue.nextTick)
.then(() => {
vm.$el.querySelector('.js-vue-issue-note-form').value = 'this is a note'; vm.$el.querySelector('.js-vue-issue-note-form').value = 'this is a note';
vm.$el.querySelector('.js-vue-issue-save').click(); vm.$el.querySelector('.js-vue-issue-save').click();
expect(service.updateNote).toHaveBeenCalled(); expect(service.updateNote).toHaveBeenCalled();
done(); })
}); // Wait for the requests to finish before destroying
}, 0); .then(Vue.nextTick)
.then(done)
.catch(done.fail);
}); });
}); });
describe('dicussion note', () => { describe('dicussion note', () => {
beforeEach(() => { beforeEach(() => {
Vue.http.interceptors.push(discussionNoteInterceptor); Vue.http.interceptors.push(noteInterceptor);
spyOn(service, 'updateNote').and.callFake(() => Promise.resolve()); spyOn(service, 'updateNote').and.callThrough();
vm = mountComponent(); vm = mountComponent();
}); });
afterEach(() => { afterEach(() => {
Vue.http.interceptors = _.without(Vue.http.interceptors, discussionNoteInterceptor); Vue.http.interceptors = _.without(Vue.http.interceptors, noteInterceptor);
}); });
it('renders edit form', (done) => { it('renders edit form', (done) => {
...@@ -184,16 +200,21 @@ describe('issue_note_app', () => { ...@@ -184,16 +200,21 @@ describe('issue_note_app', () => {
}); });
it('updates the note and resets the edit form', (done) => { it('updates the note and resets the edit form', (done) => {
setTimeout(() => { getSetTimeoutPromise()
vm.$el.querySelector('.js-note-edit').click(); .then(() => {
Vue.nextTick(() => { vm.$el.querySelector('.js-note-edit').click();
})
.then(Vue.nextTick)
.then(() => {
vm.$el.querySelector('.js-vue-issue-note-form').value = 'this is a note'; vm.$el.querySelector('.js-vue-issue-note-form').value = 'this is a note';
vm.$el.querySelector('.js-vue-issue-save').click(); vm.$el.querySelector('.js-vue-issue-save').click();
expect(service.updateNote).toHaveBeenCalled(); expect(service.updateNote).toHaveBeenCalled();
done(); })
}); // Wait for the requests to finish before destroying
}, 0); .then(Vue.nextTick)
.then(done)
.catch(done.fail);
}); });
}); });
}); });
......
...@@ -447,3 +447,51 @@ export const discussionNoteServerResponse = [{ ...@@ -447,3 +447,51 @@ export const discussionNoteServerResponse = [{
}], }],
"individual_note": false "individual_note": false
}]; }];
export const notesPollingResponse = {
last_fetched_at: 1512900838,
notes: [],
};
export const updatedNoteResponse = {
"commands_changes": null,
"valid": true,
"id": 1471,
"attachment": null,
"author": {
"id": 1,
"name": "Root",
"username": "root",
"state": "active",
"avatar_url": null,
"path": "/root"
},
"created_at": "2017-08-08T16:53:00.666Z",
"updated_at": "2017-12-10T11:03:21.876Z",
"system": false,
"noteable_id": 124,
"noteable_type": "Issue",
"noteable_iid": 29,
"type": "DiscussionNote",
"human_access": "Owner",
"note": "Adding a comment",
"note_html": "\u003cp dir=\"auto\"\u003eAdding a comment\u003c/p\u003e",
"last_edited_at": "2017-12-10T11:03:21.876Z",
"last_edited_by": {
"id": 1,
"name": 'Root',
"username": 'root',
"state": 'active',
"avatar_url": null,
"path": '/root',
},
"current_user": {
"can_edit": true
},
"discussion_id": "a3ed36e29b1957efb3b68c53e2d7a2b24b1df052",
"emoji_awardable": true,
"award_emoji": [],
"toggle_award_path": "/gitlab-org/gitlab-ce/notes/1471/toggle_award_emoji",
"report_abuse_path": "/abuse_reports/new?ref_url=http%3A%2F%2Flocalhost%3A3000%2Fgitlab-org%2Fgitlab-ce%2Fissues%2F29%23note_1471\u0026user_id=1",
"path": "/gitlab-org/gitlab-ce/notes/1471"
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment