Skip to content

Commit ad4e3d0

Browse files
committed
refactored dropbox and googledrive tests
refactored wireclient-suite, dropbox-suite and googledrive-suite to use common code for XHR and fetch() mocks, so now dropbox-suite and googledrive-suite will also test using fetch() beside XHR. fixed a test in dropbox-suite. added a test for WireClient when responseType is not set
1 parent e1115d2 commit ad4e3d0

File tree

4 files changed

+653
-620
lines changed

4 files changed

+653
-620
lines changed

test/helpers/mocks.js

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,192 @@ define([], function() {
9797
this._responses = {};
9898
};
9999

100+
},
101+
102+
undefineMocks(env) {
103+
delete global.Blob;
104+
delete global.FileReader;
105+
delete global.XMLHttpRequest;
106+
delete global.fetch;
107+
delete global.getMockRequestMethod;
108+
delete global.getMockRequestUrl;
109+
delete global.getMockRequestHeader;
110+
delete global.getMockRequestBody;
111+
delete global.mockRequestSuccess;
112+
delete global.mockRequestFail;
113+
delete global.addMockRequestCallback;
114+
delete env.blob;
115+
delete env.fileReaderResult;
116+
},
117+
118+
defineXMLHttpRequestMock(env) {
119+
120+
var requestCallbacks = [];
121+
global.XMLHttpRequest = function () {
122+
XMLHttpRequest.instances.push(this);
123+
this._headers = {};
124+
this._responseHeaders = {};
125+
};
126+
XMLHttpRequest.instances = [];
127+
XMLHttpRequest.prototype = {
128+
open: function () {
129+
this._open = Array.prototype.slice.call(arguments);
130+
},
131+
send: function () {
132+
this._send = Array.prototype.slice.call(arguments);
133+
134+
if (requestCallbacks.length)
135+
requestCallbacks.shift()(this);
136+
},
137+
setRequestHeader: function (key, value) {
138+
this._headers[key] = value;
139+
},
140+
getResponseHeader: function (key) {
141+
return this._responseHeaders[key] || null;
142+
}
143+
};
144+
['load', 'abort', 'error'].forEach(function (cb) {
145+
Object.defineProperty(XMLHttpRequest.prototype, 'on' + cb, {
146+
configurable: true,
147+
set: function (f) {
148+
this['_on' + cb] = f;
149+
}
150+
});
151+
});
152+
153+
global.addMockRequestCallback = function(callback) {
154+
requestCallbacks.push(callback);
155+
};
156+
157+
158+
global.getMockRequestMethod = function() {
159+
var request = XMLHttpRequest.instances[0];
160+
return request._open[0];
161+
};
162+
163+
global.getMockRequestUrl = function() {
164+
var request = XMLHttpRequest.instances[0];
165+
return request._open[1];
166+
};
167+
168+
global.getMockRequestHeader = function (headerName) {
169+
var req = XMLHttpRequest.instances[0];
170+
return req._headers[headerName];
171+
};
172+
173+
global.getMockRequestBody = function () {
174+
var request = XMLHttpRequest.instances[0];
175+
return request._send[0];
176+
};
177+
178+
global.mockRequestSuccess = function (param) {
179+
var req = XMLHttpRequest.instances.shift();
180+
req._responseHeaders = param.responseHeaders || {};
181+
req.status = param.status;
182+
req.response = param.arrayBuffer || param.responseText;
183+
req.responseText = param.responseText;
184+
req._onload();
185+
};
186+
187+
global.mockRequestFail = function (errMsg) {
188+
var req = XMLHttpRequest.instances.shift();
189+
req._onerror(errMsg);
190+
};
191+
},
192+
193+
defineFetchMock(env) {
194+
195+
var fetchesData = [];
196+
var requestCallbacks = [];
197+
198+
global.fetch = function (url, init) {
199+
init = init || {};
200+
promise = new Promise(function (resolve, reject) {
201+
fetchesData.push({
202+
url: url,
203+
method: init.method || 'GET',
204+
requestHeaders: init.headers || {},
205+
requestBody: init.body,
206+
resolve: resolve,
207+
reject: reject});
208+
});
209+
210+
if (requestCallbacks.length)
211+
requestCallbacks.shift()(this);
212+
return promise;
213+
214+
};
215+
216+
global.addMockRequestCallback = function(callback) {
217+
requestCallbacks.push(callback);
218+
};
219+
220+
global.getMockRequestMethod = function() {
221+
var fetchData = fetchesData[0];
222+
return fetchData.method;
223+
};
224+
225+
global.getMockRequestUrl = function() {
226+
var fetchData = fetchesData[0];
227+
return fetchData.url;
228+
};
229+
230+
global.getMockRequestHeader = function (headerName) {
231+
var fetchData = fetchesData[0];
232+
return fetchData.requestHeaders[headerName];
233+
};
234+
235+
global.getMockRequestBody = function () {
236+
var fetchData = fetchesData[0];
237+
return fetchData.requestBody;
238+
};
239+
240+
global.mockRequestSuccess = function (param) {
241+
var fetchData = fetchesData.shift();
242+
243+
var responseHeaders = { // mock Headers obj
244+
_headers: param.responseHeaders || {}, // POJSO
245+
forEach: function (callback, thisArg) {
246+
var thisObj = thisArg || responseHeaders;
247+
for (headerName in responseHeaders._headers) {
248+
callback.call(thisObj, responseHeaders._headers[headerName], headerName, responseHeaders);
249+
}
250+
}
251+
};
252+
var response = { // mock Response obj
253+
headers: responseHeaders,
254+
ok: param.status >= 200 && param.status < 300,
255+
redirected: false,
256+
status: param.status,
257+
statusText: param.statusText || '',
258+
type: param.corsResponseType || 'basic',
259+
url: fetchData.url,
260+
useFinalURL: true,
261+
body: function () { // getter for ReadableStream
262+
throw new Error("not implemented in mock");
263+
},
264+
bodyUsed: false,
265+
arrayBuffer: function () {
266+
return Promise.resolve(param.arrayBuffer);
267+
},
268+
blob: function () {
269+
throw new Error("not implemented in mock");
270+
},
271+
text: function () {
272+
return Promise.resolve(param.responseText);
273+
},
274+
json: function () {
275+
throw new Error("not implemented in mock");
276+
}
277+
};
278+
279+
fetchData.resolve(response);
280+
};
281+
282+
global.mockRequestFail = function (errMsg) {
283+
var fetchData = fetchesData.shift();
284+
fetchData.reject(errMsg);
285+
};
100286
}
101287
};
102288
});

0 commit comments

Comments
 (0)