fine-uploader-wrappers
Version:
Fine Uploader core ES6 class wrappers that provide additional features.
335 lines (265 loc) • 11.2 kB
JavaScript
;
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');
});
});
});