diff --git a/spec/javascripts/issue_show/issue_title_description_spec.js b/spec/javascripts/issue_show/issue_title_description_spec.js index 4c7d4748693..e1d0f51f9cb 100644 --- a/spec/javascripts/issue_show/issue_title_description_spec.js +++ b/spec/javascripts/issue_show/issue_title_description_spec.js @@ -7,9 +7,12 @@ import issueShowData from './mock_data'; window.$ = $; -const issueShowInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify(issueShowData), { +const issueShowInterceptor = data => (request, next) => { + next(request.respondWith(JSON.stringify(data), { status: 200, + headers: { + 'POLL-INTERVAL': 1, + }, })); }; @@ -22,16 +25,15 @@ describe('Issue Title', () => { beforeEach(() => { comps.IssueTitleComponent = Vue.extend(issueTitle); - Vue.http.interceptors.push(issueShowInterceptor); }); afterEach(() => { - Vue.http.interceptors = _.without( - Vue.http.interceptors, issueShowInterceptor, - ); + Vue.http.interceptors = _.without(Vue.http.interceptors, issueShowInterceptor); }); - it('should render a title', (done) => { + it('should render a title/description and update title/description on update', (done) => { + Vue.http.interceptors.push(issueShowInterceptor(issueShowData.initialRequest)); + const issueShowComponent = new comps.IssueTitleComponent({ propsData: { candescription: '.css-stuff', @@ -41,22 +43,21 @@ describe('Issue Title', () => { // need setTimeout because actual setTimeout in code :P setTimeout(() => { - expect(document.querySelector('title').innerText) - .toContain('this is a title (#1)'); + expect(document.querySelector('title').innerText).toContain('this is a title (#1)'); + expect(issueShowComponent.$el.querySelector('.title').innerHTML).toContain('

this is a title

'); + expect(issueShowComponent.$el.querySelector('.wiki').innerHTML).toContain('

this is a description!

'); + expect(issueShowComponent.$el.querySelector('.js-task-list-field').innerText).toContain('this is a description'); - expect(issueShowComponent.$el.querySelector('.title').innerHTML) - .toContain('

this is a title

'); + Vue.http.interceptors.push(issueShowInterceptor(issueShowData.secondRequest)); - expect(issueShowComponent.$el.querySelector('.wiki').innerHTML) - .toContain('

this is a description!

'); + setTimeout(() => { + expect(document.querySelector('title').innerText).toContain('2 (#1)'); + expect(issueShowComponent.$el.querySelector('.title').innerHTML).toContain('

2

'); + expect(issueShowComponent.$el.querySelector('.wiki').innerHTML).toContain('

42

'); + expect(issueShowComponent.$el.querySelector('.js-task-list-field').innerText).toContain('42'); - const hiddenText = issueShowComponent.$el - .querySelector('.js-task-list-field').innerText; - - expect(hiddenText) - .toContain('this is a description'); - - done(); + done(); + }, 10); }, 10); // 10ms is just long enough for the update hook to fire }); diff --git a/spec/javascripts/issue_show/mock_data.js b/spec/javascripts/issue_show/mock_data.js index b7b01391a18..5d234ebf254 100644 --- a/spec/javascripts/issue_show/mock_data.js +++ b/spec/javascripts/issue_show/mock_data.js @@ -1,8 +1,18 @@ export default { - title: '

this is a title

', - title_text: 'this is a title', - description: '

this is a description!

', - description_text: 'this is a description', - issue_number: 1, - task_status: '2/4 completed', + initialRequest: { + title: '

this is a title

', + title_text: 'this is a title', + description: '

this is a description!

', + description_text: 'this is a description', + issue_number: 1, + task_status: '2 of 4 completed', + }, + secondRequest: { + title: '

2

', + title_text: '2', + description: '

42

', + description_text: '42', + issue_number: 1, + task_status: '0 of 0 completed', + }, };