UNPKG

fine-uploader-wrappers

Version:

Fine Uploader core ES6 class wrappers that provide additional features.

335 lines (265 loc) 11.2 kB
'use strict'; var _core = require('fine-uploader/lib/core'); var _core2 = _interopRequireDefault(_core); var _traditional = require('src/traditional'); var _traditional2 = _interopRequireDefault(_traditional); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var sampleBlob = new Blob(['hi!'], { type: 'text/plain' }); var sampleBlobWrapper = { blob: sampleBlob, name: 'test' }; describe('Fine Uploader wrapper classes', function () { describe('new instance consruction', function () { it('provides access to its API', function () { var wrapper = new _traditional2.default({ options: {} }); expect(wrapper.methods).toBeTruthy(); expect(wrapper.methods.getFile).toBeTruthy(); expect(wrapper.methods.addFiles).toBeTruthy(); }); it('provides access to passed options', function () { var wrapper = new _traditional2.default({ options: { request: { endpoint: 'foo/bar' }, callbacks: {} } }); expect(wrapper.options).toBeTruthy(); expect(wrapper.options).toEqual({ request: { endpoint: 'foo/bar' } }); }); it('associates passed callbacks with underlying uploader instance', function (done) { var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit(id, name) { expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); done(); } } } }); wrapper.methods.addFiles(sampleBlobWrapper); }); }); describe('callback handling', function () { it('associates multiple registered callback handlers w/ a single FU callback option && calls them in the order they were registered', function (done) { var callbacksHit = 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit(id, name) { callbacksHit++; expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); } } } }); wrapper.on('submit', function (id, name) { var records = wrapper.methods.getUploads(); expect(records.length).toBe(1); expect(records[0].status).toBe(_core2.default.status.SUBMITTING); expect(++callbacksHit).toBe(2); expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); }); setTimeout(function () { var records = wrapper.methods.getUploads(); expect(records[0].status).toBe(_core2.default.status.SUBMITTED); done(); }, 100); wrapper.methods.addFiles(sampleBlobWrapper); }); it('does not call subsequent registered non-thenable callbacks if an earlier callback indicates failure w/ `false`', function (done) { var callbacksHit = 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmitted: function onSubmitted(id, name) { callbacksHit++; expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); return false; } } } }); // this callback should never be executed wrapper.on('submitted', function () { callbacksHit++; }); wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(callbacksHit).toBe(1); done(); }, 100); }); it('does not call subsequent registered thenable callbacks if an earlier callback indicates failure w/ a Promise', function (done) { var callbacksHit = 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit(id, name) { callbacksHit++; expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); return false; } } } }); // this callback should never be executed wrapper.on('submit', function () { callbacksHit++; }); wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { var records = wrapper.methods.getUploads(); expect(records.length).toBe(1); expect(records[0].status).toBe(_core2.default.status.REJECTED); expect(callbacksHit).toBe(1); done(); }, 100); }); it('does not call subsequent registered thenable callbacks if an earlier callback indicates failure w/ `false`', function (done) { var callbacksHit = 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit(id, name) { callbacksHit++; expect(id).toBe(0); expect(name).toBe(sampleBlobWrapper.name); return Promise.reject(); } } } }); // this callback should never be executed wrapper.on('submit', function () { callbacksHit++; }); wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { var records = wrapper.methods.getUploads(); expect(records.length).toBe(1); expect(records[0].status).toBe(_core2.default.status.REJECTED); expect(callbacksHit).toBe(1); done(); }, 100); }); it('passes aggregated resolved Promise objects from all callbacks to Fine Uploader - all callbacks return promises and objects', function (done) { var onSubmitResult = void 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit() { return Promise.resolve({ callbackOne: 'hi' }); } } } }); wrapper.on('submit', function () { return Promise.resolve({ callbackTwo: 'ho' }); }); wrapper.methods._onSubmitCallbackSuccess = function (id, name, result) { onSubmitResult = result; }; wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(onSubmitResult).toEqual({ callbackOne: 'hi', callbackTwo: 'ho' }); done(); }, 100); }); it('passes aggregated resolved Promise objects from all callbacks to Fine Uploader - all callbacks return promises, only some return objects', function (done) { var onSubmitResult = void 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit() { return Promise.resolve(); } } } }); wrapper.on('submit', function () { return Promise.resolve({ callbackTwo: 'ho' }); }); wrapper.methods._onSubmitCallbackSuccess = function (id, name, result) { onSubmitResult = result; }; wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(onSubmitResult).toEqual({ callbackTwo: 'ho' }); done(); }, 100); }); it('passes aggregated resolved Promise objects from all callbacks to Fine Uploader - only some callbacks return promises and objects', function (done) { var onSubmitResult = void 0; var wrapper = new _traditional2.default({ options: { autoUpload: false, callbacks: { onSubmit: function onSubmit() {} } } }); wrapper.on('submit', function () { return Promise.resolve({ callbackTwo: 'ho' }); }); wrapper.methods._onSubmitCallbackSuccess = function (id, name, result) { onSubmitResult = result; }; wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(onSubmitResult).toEqual({ callbackTwo: 'ho' }); done(); }, 100); }); it('allows callback handlers to be removed', function (done) { var handler = function handler() { return callbacksHit++; }; var callbacksHit = 0; var wrapper = new _traditional2.default({ options: { autoUpload: false } }); wrapper.on('submit', handler); wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(callbacksHit).toBe(1); wrapper.off('submit', handler); wrapper.methods.addFiles(sampleBlobWrapper); setTimeout(function () { expect(callbacksHit).toBe(1); done(); }, 100); }, 100); }); it('provides access to the entire qq namespace', function () { var wrapper = new _traditional2.default({ options: {} }); expect(wrapper.qq).toBeTruthy(); expect(wrapper.qq.status.QUEUED).toBe('queued'); }); }); });