From 4a4b586aa0cd1298d515fb172a7bd90ff3591970 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 10 May 2017 20:41:06 +0100 Subject: [PATCH] Removed vue and vue-resource from poll_spec in an attempt to fix the transient failures relating to async timeout --- spec/javascripts/lib/utils/poll_spec.js | 87 +++++++++---------------- 1 file changed, 29 insertions(+), 58 deletions(-) diff --git a/spec/javascripts/lib/utils/poll_spec.js b/spec/javascripts/lib/utils/poll_spec.js index 918b6d32c43..bba7fc387ff 100644 --- a/spec/javascripts/lib/utils/poll_spec.js +++ b/spec/javascripts/lib/utils/poll_spec.js @@ -1,9 +1,5 @@ -import Vue from 'vue'; -import VueResource from 'vue-resource'; import Poll from '~/lib/utils/poll'; -Vue.use(VueResource); - const waitForAllCallsToFinish = (service, waitForCount, successCallback) => { const timer = () => { setTimeout(() => { @@ -12,25 +8,20 @@ const waitForAllCallsToFinish = (service, waitForCount, successCallback) => { } else { timer(); } - }, 5); + }, 0); }; timer(); }; -class ServiceMock { - constructor(endpoint) { - this.service = Vue.resource(endpoint); - } - - fetch() { - return this.service.get(); - } +function mockServiceCall(service, mockCall) { + service.fetch.calls.reset(); + service.fetch.and.callFake(mockCall); } describe('Poll', () => { + const service = jasmine.createSpyObj('service', ['fetch']); let callbacks; - let service; beforeEach(() => { callbacks = { @@ -38,19 +29,15 @@ describe('Poll', () => { error: () => {}, }; - service = new ServiceMock('endpoint'); - spyOn(callbacks, 'success'); spyOn(callbacks, 'error'); - spyOn(service, 'fetch').and.callThrough(); }); it('calls the success callback when no header for interval is provided', (done) => { - const successInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 200 })); - }; - - Vue.http.interceptors.push(successInterceptor); + mockServiceCall( + service, + () => Promise.resolve({ status: 200, headers: {} }), + ); new Poll({ resource: service, @@ -63,18 +50,15 @@ describe('Poll', () => { expect(callbacks.success).toHaveBeenCalled(); expect(callbacks.error).not.toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, successInterceptor); - done(); }, 0); }); it('calls the error callback whe the http request returns an error', (done) => { - const errorInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 500 })); - }; - - Vue.http.interceptors.push(errorInterceptor); + mockServiceCall( + service, + () => Promise.reject({ status: 500, headers: {} }), + ); new Poll({ resource: service, @@ -86,18 +70,16 @@ describe('Poll', () => { waitForAllCallsToFinish(service, 1, () => { expect(callbacks.success).not.toHaveBeenCalled(); expect(callbacks.error).toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, errorInterceptor); done(); }); }); it('should call the success callback when the interval header is -1', (done) => { - const intervalInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 200, headers: { 'poll-interval': -1 } })); - }; - - Vue.http.interceptors.push(intervalInterceptor); + mockServiceCall( + service, + () => Promise.resolve({ status: 200, headers: { 'poll-interval': -1 } }), + ); new Poll({ resource: service, @@ -110,18 +92,15 @@ describe('Poll', () => { expect(callbacks.success).toHaveBeenCalled(); expect(callbacks.error).not.toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, intervalInterceptor); - done(); }, 0); }); it('starts polling when http status is 200 and interval header is provided', (done) => { - const pollInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 200, headers: { 'poll-interval': 2 } })); - }; - - Vue.http.interceptors.push(pollInterceptor); + mockServiceCall( + service, + () => Promise.resolve({ status: 200, headers: { 'poll-interval': 1 } }), + ); const Polling = new Poll({ resource: service, @@ -141,19 +120,16 @@ describe('Poll', () => { expect(callbacks.success).toHaveBeenCalled(); expect(callbacks.error).not.toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, pollInterceptor); - done(); }); }); describe('stop', () => { it('stops polling when method is called', (done) => { - const pollInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 200, headers: { 'poll-interval': 2 } })); - }; - - Vue.http.interceptors.push(pollInterceptor); + mockServiceCall( + service, + () => Promise.resolve({ status: 200, headers: { 'poll-interval': 1 } }), + ); const Polling = new Poll({ resource: service, @@ -174,8 +150,6 @@ describe('Poll', () => { expect(service.fetch).toHaveBeenCalledWith({ page: 1 }); expect(Polling.stop).toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, pollInterceptor); - done(); }); }); @@ -183,11 +157,10 @@ describe('Poll', () => { describe('restart', () => { it('should restart polling when its called', (done) => { - const pollInterceptor = (request, next) => { - next(request.respondWith(JSON.stringify([]), { status: 200, headers: { 'poll-interval': 2 } })); - }; - - Vue.http.interceptors.push(pollInterceptor); + mockServiceCall( + service, + () => Promise.resolve({ status: 200, headers: { 'poll-interval': 1 } }), + ); const Polling = new Poll({ resource: service, @@ -215,8 +188,6 @@ describe('Poll', () => { expect(Polling.stop).toHaveBeenCalled(); expect(Polling.restart).toHaveBeenCalled(); - Vue.http.interceptors = _.without(Vue.http.interceptors, pollInterceptor); - done(); }); });