filestack-js
Version:
Official JavaScript library for Filestack
166 lines (164 loc) • 17.7 kB
JavaScript
/*
* Copyright (c) 2018 by Filestack
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { __awaiter, __generator } from "tslib";
import { prepareData, parseResponse } from './data';
describe('Request/Helpers/Data', function () {
describe('prepare data', function () {
it('should return empty data', function () {
var data = { url: 'https://filestack.com', data: {} };
expect(prepareData(data)).toEqual(data);
});
it('should return ArrayBuffer', function () {
var data = { url: 'https://filestack.com', data: new ArrayBuffer(10) };
expect(prepareData(data)).toEqual(data);
});
it('should return url params', function () {
var data = { url: 'https://filestack.com', data: new URLSearchParams('q=search&id=1') };
expect(prepareData(data)).toEqual(data);
});
});
describe('parse response', function () {
it('should return equal response data', function () { return __awaiter(void 0, void 0, void 0, function () {
var response, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
response = {
status: 200,
statusText: 'ok',
headers: {},
data: [],
config: {
url: 'https://filestack.com',
},
};
_a = expect;
return [4 /*yield*/, parseResponse(response)];
case 1:
_a.apply(void 0, [_b.sent()]).toEqual(response);
return [2 /*return*/];
}
});
}); });
it('should return response with application/json and data stringify', function () { return __awaiter(void 0, void 0, void 0, function () {
var response, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
response = {
status: 200,
statusText: 'ok',
headers: {
'content-type': 'application/json',
},
data: JSON.stringify({ a: 1 }),
config: {
url: 'https://filestack.com',
},
};
_a = expect;
return [4 /*yield*/, parseResponse(response)];
case 1:
_a.apply(void 0, [_b.sent()]).toEqual(response);
return [2 /*return*/];
}
});
}); });
it('should return response with application/json and json data ', function () { return __awaiter(void 0, void 0, void 0, function () {
var response, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
response = {
status: 200,
statusText: 'ok',
headers: {
'content-type': 'application/json',
},
data: { a: 1 },
config: {
url: 'https://filestack.com',
},
};
_a = expect;
return [4 /*yield*/, parseResponse(response)];
case 1:
_a.apply(void 0, [_b.sent()]).toEqual(response);
return [2 /*return*/];
}
});
}); });
it('should return text/plain response with ArrayBuffer ', function () { return __awaiter(void 0, void 0, void 0, function () {
var response, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
response = {
status: 200,
statusText: 'ok',
headers: {
'content-type': 'text/plain',
},
data: new ArrayBuffer(10),
config: {
url: 'https://filestack.com',
},
};
_a = expect;
return [4 /*yield*/, parseResponse(response)];
case 1:
_a.apply(void 0, [_b.sent()]).toEqual(response);
return [2 /*return*/];
}
});
}); });
it('should parse application/xml response to json', function () { return __awaiter(void 0, void 0, void 0, function () {
var response, res;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
response = {
status: 200,
statusText: 'ok',
headers: {
'content-type': 'application/xml',
},
data: Buffer.from('<?xml version="1.0" encoding="UTF-8"?><Error><code>RequestTimeTooSkewed</code><Message>The difference between the request time and the current time is toolarge.</Message><RequestTime>20191102T153031Z</RequestTime><ServerTime>2019-11-02T15:56:35Z</ServerTime><MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds><RequestId>6C8855BC97D17A1B</RequestId><HostId>3bwhtSpY9tAypFr9L6V+W6UAxFUyk7mK+VQGhIu4Bxj0t7jhQWMEEinW4YHpi8Q9qONnx1CEHKE=</HostId></Error>'),
config: {
url: 'https://filestack.com',
},
};
return [4 /*yield*/, parseResponse(response)];
case 1:
res = _a.sent();
return [2 /*return*/, expect(res.data).toEqual({
Error: {
code: 'RequestTimeTooSkewed',
Message: 'The difference between the request time and the current time is toolarge.',
RequestTime: '20191102T153031Z',
ServerTime: '2019-11-02T15:56:35Z',
MaxAllowedSkewMilliseconds: 900000,
RequestId: '6C8855BC97D17A1B',
HostId: '3bwhtSpY9tAypFr9L6V+W6UAxFUyk7mK+VQGhIu4Bxj0t7jhQWMEEinW4YHpi8Q9qONnx1CEHKE=',
},
})];
}
});
}); });
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9oZWxwZXJzL2RhdGEuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7O0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEQsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDdkIsRUFBRSxDQUFDLDBCQUEwQixFQUFFO1lBQzdCLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFO1lBQzlCLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMEJBQTBCLEVBQUU7WUFDN0IsSUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FB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QzlCLEtBQUssRUFBRTtvQ0FDTCxJQUFJLEVBQUUsc0JBQXNCO29DQUM1QixPQUFPLEVBQUUsMkVBQTJFO29DQUNwRixXQUFXLEVBQUUsa0JBQWtCO29DQUMvQixVQUFVLEVBQUUsc0JBQXNCO29DQUNsQywwQkFBMEIsRUFBRSxNQUFNO29DQUNsQyxTQUFTLEVBQUUsa0JBQWtCO29DQUM3QixNQUFNLEVBQUUsOEVBQThFO2lDQUN2Rjs2QkFDRixDQUFDLEVBQUM7OzthQUNKLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL3JlcXVlc3QvaGVscGVycy9kYXRhLnNwZWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IHByZXBhcmVEYXRhLCBwYXJzZVJlc3BvbnNlIH0gZnJvbSAnLi9kYXRhJztcblxuZGVzY3JpYmUoJ1JlcXVlc3QvSGVscGVycy9EYXRhJywgKCkgPT4ge1xuICBkZXNjcmliZSgncHJlcGFyZSBkYXRhJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyB1cmw6ICdodHRwczovL2ZpbGVzdGFjay5jb20nLCBkYXRhOiB7fSB9O1xuICAgICAgZXhwZWN0KHByZXBhcmVEYXRhKGRhdGEpKS50b0VxdWFsKGRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gQXJyYXlCdWZmZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyB1cmw6ICdodHRwczovL2ZpbGVzdGFjay5jb20nLCBkYXRhOiBuZXcgQXJyYXlCdWZmZXIoMTApIH07XG4gICAgICBleHBlY3QocHJlcGFyZURhdGEoZGF0YSkpLnRvRXF1YWwoZGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1cmwgcGFyYW1zJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgdXJsOiAnaHR0cHM6Ly9maWxlc3RhY2suY29tJywgZGF0YTogbmV3IFVSTFNlYXJjaFBhcmFtcygncT1zZWFyY2gmaWQ9MScpIH07XG4gICAgICBleHBlY3QocHJlcGFyZURhdGEoZGF0YSkpLnRvRXF1YWwoZGF0YSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZSByZXNwb25zZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlcXVhbCByZXNwb25zZSBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnb2snLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIHVybDogJ2h0dHBzOi8vZmlsZXN0YWNrLmNvbScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgZXhwZWN0KGF3YWl0IHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpKS50b0VxdWFsKHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlIHdpdGggYXBwbGljYXRpb24vanNvbiBhbmQgZGF0YSBzdHJpbmdpZnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdvaycsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IGE6IDEgfSksXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIHVybDogJ2h0dHBzOi8vZmlsZXN0YWNrLmNvbScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgZXhwZWN0KGF3YWl0IHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpKS50b0VxdWFsKHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlIHdpdGggYXBwbGljYXRpb24vanNvbiBhbmQganNvbiBkYXRhICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ29rJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHsgYTogMSB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICB1cmw6ICdodHRwczovL2ZpbGVzdGFjay5jb20nLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChhd2FpdCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlKSkudG9FcXVhbChyZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0ZXh0L3BsYWluIHJlc3BvbnNlIHdpdGggQXJyYXlCdWZmZXIgJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnb2snLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICd0ZXh0L3BsYWluJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogbmV3IEFycmF5QnVmZmVyKDEwKSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgdXJsOiAnaHR0cHM6Ly9maWxlc3RhY2suY29tJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoYXdhaXQgcGFyc2VSZXNwb25zZShyZXNwb25zZSkpLnRvRXF1YWwocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhcHBsaWNhdGlvbi94bWwgcmVzcG9uc2UgdG8ganNvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ29rJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogQnVmZmVyLmZyb20oJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PjxFcnJvcj48Y29kZT5SZXF1ZXN0VGltZVRvb1NrZXdlZDwvY29kZT48TWVzc2FnZT5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZXF1ZXN0IHRpbWUgYW5kIHRoZSBjdXJyZW50IHRpbWUgaXMgdG9vbGFyZ2UuPC9NZXNzYWdlPjxSZXF1ZXN0VGltZT4yMDE5MTEwMlQxNTMwMzFaPC9SZXF1ZXN0VGltZT48U2VydmVyVGltZT4yMDE5LTExLTAyVDE1OjU2OjM1WjwvU2VydmVyVGltZT48TWF4QWxsb3dlZFNrZXdNaWxsaXNlY29uZHM+OTAwMDAwPC9NYXhBbGxvd2VkU2tld01pbGxpc2Vjb25kcz48UmVxdWVzdElkPjZDODg1NUJDOTdEMTdBMUI8L1JlcXVlc3RJZD48SG9zdElkPjNid2h0U3BZOXRBeXBGcjlMNlYrVzZVQXhGVXlrN21LK1ZRR2hJdTRCeGowdDdqaFFXTUVFaW5XNFlIcGk4UTlxT05ueDFDRUhLRT08L0hvc3RJZD48L0Vycm9yPicpLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICB1cmw6ICdodHRwczovL2ZpbGVzdGFjay5jb20nLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgcGFyc2VSZXNwb25zZShyZXNwb25zZSk7XG5cbiAgICAgIHJldHVybiBleHBlY3QocmVzLmRhdGEpLnRvRXF1YWwoe1xuICAgICAgICBFcnJvcjoge1xuICAgICAgICAgIGNvZGU6ICdSZXF1ZXN0VGltZVRvb1NrZXdlZCcsXG4gICAgICAgICAgTWVzc2FnZTogJ1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlcXVlc3QgdGltZSBhbmQgdGhlIGN1cnJlbnQgdGltZSBpcyB0b29sYXJnZS4nLFxuICAgICAgICAgIFJlcXVlc3RUaW1lOiAnMjAxOTExMDJUMTUzMDMxWicsXG4gICAgICAgICAgU2VydmVyVGltZTogJzIwMTktMTEtMDJUMTU6NTY6MzVaJyxcbiAgICAgICAgICBNYXhBbGxvd2VkU2tld01pbGxpc2Vjb25kczogOTAwMDAwLFxuICAgICAgICAgIFJlcXVlc3RJZDogJzZDODg1NUJDOTdEMTdBMUInLFxuICAgICAgICAgIEhvc3RJZDogJzNid2h0U3BZOXRBeXBGcjlMNlYrVzZVQXhGVXlrN21LK1ZRR2hJdTRCeGowdDdqaFFXTUVFaW5XNFlIcGk4UTlxT05ueDFDRUhLRT0nLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=