UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

157 lines (155 loc) 16.6 kB
import { __awaiter, __generator } from "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. */ import { getFile } from './file_tools'; import * as utils from './../../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 __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: _a = expect; return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: _a = expect; return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: _a = expect; return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: _a = expect; return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var soptions, fileRes; return __generator(this, function (_a) { switch (_a.label) { case 0: soptions = { replacement: '=', }; return [4 /*yield*/, 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(getFile('asdasdfasdf')).rejects.toEqual(new Error('Unsupported input file type')); }); it('Should handle base64 named file (gif)', function () { return __awaiter(void 0, void 0, void 0, function () { var file; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var file; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () { var file; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL3VwbG9hZC9maWxlX3Rvb2xzLnNwZWMuYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLGVBQWUsQ0FBQztBQUV2QyxJQUFNLFVBQVUsR0FBRyxVQUFDLElBQVksRUFBRSxJQUFpQixFQUFFLElBQWtCO0lBQW5ELHFCQUFBLEVBQUEsWUFBWTtJQUFFLHFCQUFBLEVBQUEsaUJBQWlCO0lBQUUscUJBQUEsRUFBQSxrQkFBa0I7SUFBSyxPQUFBLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFBeEQsQ0FBd0QsQ0FBQztBQUVySSxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFOUQsSUFBTSxTQUFTLEdBQUcsc09BQXNPLENBQUM7QUFDelAsSUFBTSxTQUFTLEdBQUcsa0dBQWtHLENBQUM7QUFDckgsSUFBTSxTQUFTLEdBQUcsOERBQThELENBQUM7QUFFakYsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFNBQVMsQ0FBQztRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFVBQUMsR0FBRyxFQUFFLElBQUk7WUFDN0QsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUV6QixFQUFFLENBQUMsMkNBQTJDLEVBQUU7Ozs7O3dCQUN2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QUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUU7Ozs7NEJBQ3JCLHFCQUFNLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQzFELElBQUksRUFBRSxXQUFXO3lCQUNsQixDQUFDLENBQUMsRUFBQTs7d0JBRkcsSUFBSSxHQUFHLFNBRVY7d0JBRUgsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7OzthQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImxpYi9hcGkvdXBsb2FkL2ZpbGVfdG9vbHMuc3BlYy5icm93c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgZ2V0RmlsZSB9IGZyb20gJy4vZmlsZV90b29scyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLy4uLy4uL3V0aWxzJztcblxuY29uc3QgY3JlYXRlRmlsZSA9IChzaXplID0gNDQzMjAsIG5hbWUgPSAndGVzdC5wbmcnLCB0eXBlID0gJ2ltYWdlL3BuZycpID0+IG5ldyBGaWxlKFtuZXcgQXJyYXlCdWZmZXIoc2l6ZSldLCBuYW1lICwgeyB0eXBlOiB0eXBlIH0pO1xuXG5jb25zdCBzYW5pdGl6ZU9wdGlvbnMgPSBqZXN0LmZuKCkubW9ja05hbWUoJ3Nhbml0aXplT3B0aW9ucycpO1xuXG5jb25zdCBiYXNlNjRTdmcgPSAnUEhOMlp5Qm9aV2xuYUhROUlqRXdNQ0lnZDJsa2RHZzlJakV3TUNJK0NpQWdQR05wY21Oc1pTQmplRDBpTlRBaUlHTjVQU0kxTUNJZ2NqMGlOREFpSUhOMGNtOXJaVDBpWW14aFkyc2lJSE4wY205clpTMTNhV1IwYUQwaU15SWdabWxzYkQwaWNtVmtJaUF2UGdvZ0lGTnZjbko1TENCNWIzVnlJR0p5YjNkelpYSWdaRzlsY3lCdWIzUWdjM1Z3Y0c5eWRDQnBibXhwYm1VZ1UxWkhMaUFnQ2p3dmMzWm5QaUE9JztcbmNvbnN0IGJhc2U2NFBuZyA9ICdpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFEVWxFUVZSNDJtTmsrTTlRRHdBRGhnR0FXalI5YXdBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuY29uc3QgYmFzZTY0R2lmID0gJ1IwbEdPRGxoQVFBQkFJQUFBUC8vL3dBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSc7XG5cbmRlc2NyaWJlKCdBcGkvVXBsb2FkL0ZpbGVUb29scycsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0LnNweU9uKHV0aWxzLCAnc2FuaXRpemVOYW1lJykubW9ja0ltcGxlbWVudGF0aW9uKCh2YWwsIG9wdHMpID0+IHtcbiAgICAgIHNhbml0aXplT3B0aW9ucyhvcHRzKTtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRGaWxlQnJvd3NlcicsICgpID0+IHtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyAoc3ZnKScsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBleHBlY3QoKGF3YWl0IGdldEZpbGUoe1xuICAgICAgICBmaWxlOiBiYXNlNjRTdmcsXG4gICAgICAgIG5hbWU6ICd0ZXN0LnN2ZycsXG4gICAgICB9KSkubWltZXR5cGUpLnRvRXF1YWwoJ2ltYWdlL3N2Zyt4bWwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIGJhc2U2NCBlbmNvZGVkIHN0cmluZyAocG5nKScsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBleHBlY3QoKGF3YWl0IGdldEZpbGUoYmFzZTY0UG5nKSkubWltZXR5cGUpLnRvRXF1YWwoJ2ltYWdlL3BuZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgYmFzZTY0IGVuY29kZWQgc3RyaW5nIChnaWYpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGV4cGVjdCgoYXdhaXQgZ2V0RmlsZShiYXNlNjRHaWYpKS5taW1ldHlwZSkudG9FcXVhbCgnaW1hZ2UvZ2lmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgd2l0aCBiNjQgcHJlZml4IChnaWYpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGV4cGVjdCgoYXdhaXQgZ2V0RmlsZShgZGF0YTppbWFnZS9naWY7YmFzZTY0LCR7YmFzZTY0R2lmfWApKS5taW1ldHlwZSkudG9FcXVhbCgnaW1hZ2UvZ2lmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHBhc3Mgc2FuaXRpemUgb3B0aW9ucyB0byBmaWxlIGluc3RhbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc29wdGlvbnMgPSB7XG4gICAgICAgIHJlcGxhY2VtZW50OiAnPScsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaWxlUmVzID0gYXdhaXQgZ2V0RmlsZSh7XG4gICAgICAgIGZpbGU6IGJhc2U2NFBuZyxcbiAgICAgICAgbmFtZTogJ3Rlc3Q8LmpwZycsXG4gICAgICB9LCBzb3B0aW9ucyk7XG5cbiAgICAgIGV4cGVjdChzYW5pdGl6ZU9wdGlvbnMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHNvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdGhyb3cgZXJyb3Igd2hlbiByYW5kb20gc3RyaW5nIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIGV4cGVjdChnZXRGaWxlKCdhc2Rhc2RmYXNkZicpKS5yZWplY3RzLnRvRXF1YWwobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBpbnB1dCBmaWxlIHR5cGUnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBiYXNlNjQgbmFtZWQgZmlsZSAoZ2lmKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBnZXRGaWxlKHtcbiAgICAgICAgZmlsZTogYmFzZTY0R2lmLFxuICAgICAgICBuYW1lOiAndGVzdC5naWYnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoZmlsZS5taW1ldHlwZSkudG9FcXVhbCgnaW1hZ2UvZ2lmJyk7XG4gICAgICBleHBlY3QoZmlsZS5uYW1lKS50b0VxdWFsKCd0ZXN0LmdpZicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgRmlsZSBpbnB1dCB0eXBlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGdldEZpbGUoY3JlYXRlRmlsZSgpKTtcbiAgICAgIGV4cGVjdChmaWxlLm1pbWV0eXBlKS50b0VxdWFsKCdpbWFnZS9wbmcnKTtcbiAgICAgIGV4cGVjdChmaWxlLm5hbWUpLnRvRXF1YWwoJ3Rlc3QucG5nJyk7XG4gICAgICBleHBlY3QoZmlsZS5zaXplKS50b0VxdWFsKDQ0MzIwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIGJsb2IgaW5wdXQgdHlwZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBnZXRGaWxlKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTAwKV0sIHtcbiAgICAgICAgdHlwZTogJ2ltYWdlL2pwZycsXG4gICAgICB9KSk7XG5cbiAgICAgIGV4cGVjdChmaWxlLm1pbWV0eXBlKS50b0VxdWFsKCdpbWFnZS9qcGcnKTtcbiAgICAgIGV4cGVjdChmaWxlLm5hbWUpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChmaWxlLnNpemUpLnRvRXF1YWwoMTAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==