filestack-js
Version:
Official JavaScript library for Filestack
159 lines (157 loc) • 16.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/*
* Copyright (c) 2019 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.
*/
var file_tools_1 = require("./file_tools");
var utils = tslib_1.__importStar(require("./../../utils"));
var createFile = function (size, name, type) {
if (size === void 0) { size = 44320; }
if (name === void 0) { name = 'test.png'; }
if (type === void 0) { type = 'image/png'; }
return new File([new ArrayBuffer(size)], name, { type: type });
};
var sanitizeOptions = jest.fn().mockName('sanitizeOptions');
var base64Svg = 'PHN2ZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCI+CiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMyIgZmlsbD0icmVkIiAvPgogIFNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgU1ZHLiAgCjwvc3ZnPiA=';
var base64Png = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
var base64Gif = 'R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
describe('Api/Upload/FileTools', function () {
beforeAll(function () {
jest.spyOn(utils, 'sanitizeName').mockImplementation(function (val, opts) {
sanitizeOptions(opts);
return val;
});
});
describe('getFileBrowser', function () {
it('Should handle base64 encoded string (svg)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = expect;
return [4 /*yield*/, (0, file_tools_1.getFile)({
file: base64Svg,
name: 'test.svg',
})];
case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent()).mimetype]).toEqual('image/svg+xml')];
}
});
}); });
it('Should handle base64 encoded string (png)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = expect;
return [4 /*yield*/, (0, file_tools_1.getFile)(base64Png)];
case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent()).mimetype]).toEqual('image/png')];
}
});
}); });
it('Should handle base64 encoded string (gif)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = expect;
return [4 /*yield*/, (0, file_tools_1.getFile)(base64Gif)];
case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent()).mimetype]).toEqual('image/gif')];
}
});
}); });
it('Should handle base64 encoded string with b64 prefix (gif)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = expect;
return [4 /*yield*/, (0, file_tools_1.getFile)("data:image/gif;base64,".concat(base64Gif))];
case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent()).mimetype]).toEqual('image/gif')];
}
});
}); });
it('Should pass sanitize options to file instance', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var soptions, fileRes;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
soptions = {
replacement: '=',
};
return [4 /*yield*/, (0, file_tools_1.getFile)({
file: base64Png,
name: 'test<.jpg',
}, soptions)];
case 1:
fileRes = _a.sent();
expect(sanitizeOptions).toHaveBeenCalledWith(soptions);
return [2 /*return*/];
}
});
}); });
it('Should throw error when random string is provided', function () {
return expect((0, file_tools_1.getFile)('asdasdfasdf')).rejects.toEqual(new Error('Unsupported input file type'));
});
it('Should handle base64 named file (gif)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var file;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, file_tools_1.getFile)({
file: base64Gif,
name: 'test.gif',
})];
case 1:
file = _a.sent();
expect(file.mimetype).toEqual('image/gif');
expect(file.name).toEqual('test.gif');
return [2 /*return*/];
}
});
}); });
it('Should handle File input type', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var file;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, file_tools_1.getFile)(createFile())];
case 1:
file = _a.sent();
expect(file.mimetype).toEqual('image/png');
expect(file.name).toEqual('test.png');
expect(file.size).toEqual(44320);
return [2 /*return*/];
}
});
}); });
it('Should handle blob input type', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var file;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, file_tools_1.getFile)(new Blob([new ArrayBuffer(100)], {
type: 'image/jpg',
}))];
case 1:
file = _a.sent();
expect(file.mimetype).toEqual('image/jpg');
expect(file.name).toEqual(undefined);
expect(file.size).toEqual(100);
return [2 /*return*/];
}
});
}); });
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3VwbG9hZC9maWxlX3Rvb2xzLnNwZWMuYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCwyQ0FBdUM7QUFDdkMsMkRBQXVDO0FBRXZDLElBQU0sVUFBVSxHQUFHLFVBQUMsSUFBWSxFQUFFLElBQWlCLEVBQUUsSUFBa0I7SUFBbkQscUJBQUEsRUFBQSxZQUFZO0lBQUUscUJBQUEsRUFBQSxpQkFBaUI7SUFBRSxxQkFBQSxFQUFBLGtCQUFrQjtJQUFLLE9BQUEsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUF4RCxDQUF3RCxDQUFDO0FBRXJJLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU5RCxJQUFNLFNBQVMsR0FBRyxzT0FBc08sQ0FBQztBQUN6UCxJQUFNLFNBQVMsR0FBRyxrR0FBa0csQ0FBQztBQUNySCxJQUFNLFNBQVMsR0FBRyw4REFBOEQsQ0FBQztBQUVqRixRQUFRLENBQUMsc0JBQXNCLEVBQUU7SUFDL0IsU0FBUyxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUM3RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBRXpCLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTs7Ozs7d0JBQ3ZDLEtBQUEsTUFBTSxDQUFBO3dCQUFFLHFCQUFNLElBQUEsb0JBQU8sRUFBQztnQ0FD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QztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTs7Ozs0QkFDckIscUJBQU0sSUFBQSxvQkFBTyxFQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs0QkFDMUQsSUFBSSxFQUFFLFdBQVc7eUJBQ2xCLENBQUMsQ0FBQyxFQUFBOzt3QkFGRyxJQUFJLEdBQUcsU0FFVjt3QkFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7O2FBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL2FwaS91cGxvYWQvZmlsZV90b29scy5zcGVjLmJyb3dzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBnZXRGaWxlIH0gZnJvbSAnLi9maWxlX3Rvb2xzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBjcmVhdGVGaWxlID0gKHNpemUgPSA0NDMyMCwgbmFtZSA9ICd0ZXN0LnBuZycsIHR5cGUgPSAnaW1hZ2UvcG5nJykgPT4gbmV3IEZpbGUoW25ldyBBcnJheUJ1ZmZlcihzaXplKV0sIG5hbWUgLCB7IHR5cGU6IHR5cGUgfSk7XG5cbmNvbnN0IHNhbml0aXplT3B0aW9ucyA9IGplc3QuZm4oKS5tb2NrTmFtZSgnc2FuaXRpemVPcHRpb25zJyk7XG5cbmNvbnN0IGJhc2U2NFN2ZyA9ICdQSE4yWnlCb1pXbG5hSFE5SWpFd01DSWdkMmxrZEdnOUlqRXdNQ0krQ2lBZ1BHTnBjbU5zWlNCamVEMGlOVEFpSUdONVBTSTFNQ0lnY2owaU5EQWlJSE4wY205clpUMGlZbXhoWTJzaUlITjBjbTlyWlMxM2FXUjBhRDBpTXlJZ1ptbHNiRDBpY21Wa0lpQXZQZ29nSUZOdmNuSjVMQ0I1YjNWeUlHSnliM2R6WlhJZ1pHOWxjeUJ1YjNRZ2MzVndjRzl5ZENCcGJteHBibVVnVTFaSExpQWdDand2YzNablBpQT0nO1xuY29uc3QgYmFzZTY0UG5nID0gJ2lWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQURVbEVRVlI0Mm1OaytNOVFEd0FEaGdHQVdqUjlhd0FBQUFCSlJVNUVya0pnZ2c9PSc7XG5jb25zdCBiYXNlNjRHaWYgPSAnUjBsR09EbGhBUUFCQUlBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09JztcblxuZGVzY3JpYmUoJ0FwaS9VcGxvYWQvRmlsZVRvb2xzJywgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGplc3Quc3B5T24odXRpbHMsICdzYW5pdGl6ZU5hbWUnKS5tb2NrSW1wbGVtZW50YXRpb24oKHZhbCwgb3B0cykgPT4ge1xuICAgICAgc2FuaXRpemVPcHRpb25zKG9wdHMpO1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEZpbGVCcm93c2VyJywgKCkgPT4ge1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgYmFzZTY0IGVuY29kZWQgc3RyaW5nIChzdmcpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGV4cGVjdCgoYXdhaXQgZ2V0RmlsZSh7XG4gICAgICAgIGZpbGU6IGJhc2U2NFN2ZyxcbiAgICAgICAgbmFtZTogJ3Rlc3Quc3ZnJyxcbiAgICAgIH0pKS5taW1ldHlwZSkudG9FcXVhbCgnaW1hZ2Uvc3ZnK3htbCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgYmFzZTY0IGVuY29kZWQgc3RyaW5nIChwbmcpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGV4cGVjdCgoYXdhaXQgZ2V0RmlsZShiYXNlNjRQbmcpKS5taW1ldHlwZSkudG9FcXVhbCgnaW1hZ2UvcG5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgKGdpZiknLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gZXhwZWN0KChhd2FpdCBnZXRGaWxlKGJhc2U2NEdpZikpLm1pbWV0eXBlKS50b0VxdWFsKCdpbWFnZS9naWYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB3aXRoIGI2NCBwcmVmaXggKGdpZiknLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gZXhwZWN0KChhd2FpdCBnZXRGaWxlKGBkYXRhOmltYWdlL2dpZjtiYXNlNjQsJHtiYXNlNjRHaWZ9YCkpLm1pbWV0eXBlKS50b0VxdWFsKCdpbWFnZS9naWYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcGFzcyBzYW5pdGl6ZSBvcHRpb25zIHRvIGZpbGUgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzb3B0aW9ucyA9IHtcbiAgICAgICAgcmVwbGFjZW1lbnQ6ICc9JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbGVSZXMgPSBhd2FpdCBnZXRGaWxlKHtcbiAgICAgICAgZmlsZTogYmFzZTY0UG5nLFxuICAgICAgICBuYW1lOiAndGVzdDwuanBnJyxcbiAgICAgIH0sIHNvcHRpb25zKTtcblxuICAgICAgZXhwZWN0KHNhbml0aXplT3B0aW9ucykudG9IYXZlQmVlbkNhbGxlZFdpdGgoc29wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJhbmRvbSBzdHJpbmcgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gZXhwZWN0KGdldEZpbGUoJ2FzZGFzZGZhc2RmJykpLnJlamVjdHMudG9FcXVhbChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGlucHV0IGZpbGUgdHlwZScpKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIGJhc2U2NCBuYW1lZCBmaWxlIChnaWYpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGdldEZpbGUoe1xuICAgICAgICBmaWxlOiBiYXNlNjRHaWYsXG4gICAgICAgIG5hbWU6ICd0ZXN0LmdpZicsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChmaWxlLm1pbWV0eXBlKS50b0VxdWFsKCdpbWFnZS9naWYnKTtcbiAgICAgIGV4cGVjdChmaWxlLm5hbWUpLnRvRXF1YWwoJ3Rlc3QuZ2lmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBGaWxlIGlucHV0IHR5cGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgZ2V0RmlsZShjcmVhdGVGaWxlKCkpO1xuICAgICAgZXhwZWN0KGZpbGUubWltZXR5cGUpLnRvRXF1YWwoJ2ltYWdlL3BuZycpO1xuICAgICAgZXhwZWN0KGZpbGUubmFtZSkudG9FcXVhbCgndGVzdC5wbmcnKTtcbiAgICAgIGV4cGVjdChmaWxlLnNpemUpLnRvRXF1YWwoNDQzMjApO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgYmxvYiBpbnB1dCB0eXBlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGdldEZpbGUobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMDApXSwge1xuICAgICAgICB0eXBlOiAnaW1hZ2UvanBnJyxcbiAgICAgIH0pKTtcblxuICAgICAgZXhwZWN0KGZpbGUubWltZXR5cGUpLnRvRXF1YWwoJ2ltYWdlL2pwZycpO1xuICAgICAgZXhwZWN0KGZpbGUubmFtZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KGZpbGUuc2l6ZSkudG9FcXVhbCgxMDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
;