diff --git a/package.json b/package.json index 8ef1991ed..a07d099f6 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "sinon": "^3.2.1", "string-replace-loader": "^1.3.0", "webpack": "^3.5.5", - "webpack-dev-server": "^2.7.1" + "webpack-dev-server": "^2.7.1", + "whatwg-fetch": "^2.0.3" }, "keywords": [ "wte", diff --git a/src/storage_manager/model/RemoteStorage.js b/src/storage_manager/model/RemoteStorage.js index 645fd938f..6feb3cf05 100644 --- a/src/storage_manager/model/RemoteStorage.js +++ b/src/storage_manager/model/RemoteStorage.js @@ -3,6 +3,8 @@ import { isUndefined } from 'underscore'; module.exports = require('backbone').Model.extend({ + fetch, + defaults: { urlStore: '', urlLoad: '', @@ -86,14 +88,14 @@ module.exports = require('backbone').Model.extend({ */ request(url, opts = {}, clb = null) { const typeJson = this.get('contentTypeJson'); - const headers = this.get('headers'); + const headers = this.get('headers') || {}; const params = this.get('params'); const reqHead = 'X-Requested-With'; const typeHead = 'Content-Type'; const body = opts.body; for (let param in params) { - body.append(param, params[param]); + body && body.append(param, params[param]); } if (isUndefined(headers[reqHead])) { @@ -106,7 +108,7 @@ module.exports = require('backbone').Model.extend({ } this.onStart(); - fetch(url, { + this.fetch(url, { method: opts.method || 'post', credentials: 'include', headers, diff --git a/test/helper.js b/test/helper.js index 88420f2e5..c3923f51e 100644 --- a/test/helper.js +++ b/test/helper.js @@ -30,6 +30,7 @@ var localStorage = { global.window = window; global.document = window.document; +global.FormData = window.FormData; global._ = _; global.expect = expect; global.sinon = sinon; diff --git a/test/specs/storage_manager/model/Models.js b/test/specs/storage_manager/model/Models.js index c30c4a5d2..25094c678 100644 --- a/test/specs/storage_manager/model/Models.js +++ b/test/specs/storage_manager/model/Models.js @@ -1,3 +1,5 @@ +import 'whatwg-fetch'; + const LocalStorage = require('storage_manager/model/LocalStorage'); const RemoteStorage = require('storage_manager/model/RemoteStorage'); @@ -57,6 +59,12 @@ module.exports = { var params = { test: 'testValue' }; var storageOptions; var data; + var mockResponse = (body = {}) => { + return new window.Response(JSON.stringify(body), { + status: 200, + headers: { 'Content-type': 'application/json' } + }); + } beforeEach(() => { data = { @@ -69,44 +77,28 @@ module.exports = { params, }; obj = new RemoteStorage(storageOptions); + sinon.stub(obj, 'fetch').returns( + Promise.resolve(mockResponse({data: 1})) + ); }); afterEach(() => { - $.ajax.restore(); + obj.fetch.restore(); obj = null; }); - // Stubbing will not return the original object so - // .always will not work - it.skip('Store data', () => { - sinon.stub($, "ajax"); - - for(var k in params) - data[k] = params[k]; - + it('Store data', () => { obj.store(data); - $.ajax.calledWithMatch({ - url: endpointStore, - data, - }).should.equal(true); + const callResult = obj.fetch; + expect(callResult.called).toEqual(true); + expect(callResult.firstCall.args[0]).toEqual(endpointStore); }); it('Load data', () => { - sinon.stub($, "ajax").returns({ - done() {} - }); - var dt = {}; - var keys = ['item1', 'item2']; - obj.load(keys); - dt.keys = keys; - - for(var k in params) - dt[k] = params[k]; - - expect($.ajax.calledWithMatch({ - url: endpointLoad, - data: dt - })).toEqual(true); + obj.load(['item1', 'item2']); + const callResult = obj.fetch; + expect(callResult.called).toEqual(true); + expect(callResult.firstCall.args[0]).toEqual(endpointLoad); }); });