Initial commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
const batchProcessItems = require('dashboard/helpers/batch-process-items');
|
||||
const _ = require('underscore');
|
||||
|
||||
describe('dashboard/helpers/batch-process-items', function () {
|
||||
beforeEach(function () {
|
||||
this.items = _.range(42);
|
||||
this.processItemFn = jasmine.createSpy();
|
||||
this.howManyInParallel = 4;
|
||||
|
||||
var self = this;
|
||||
batchProcessItems({
|
||||
howManyInParallel: this.howManyInParallel,
|
||||
items: this.items,
|
||||
processItem: this.processItemFn,
|
||||
done: function () {
|
||||
self.finishedAllSuccessfully = true;
|
||||
},
|
||||
fail: function (err) {
|
||||
self.somethingFailed = err;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should have started processing that many items', function () {
|
||||
expect(this.processItemFn.calls.count()).toEqual(this.howManyInParallel);
|
||||
});
|
||||
|
||||
it('should not have called any callback until processing finished', function () {
|
||||
expect(this.finishedAllSuccessfully).toBeUndefined();
|
||||
expect(this.somethingFailed).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should have called the process fn with two arguments', function () {
|
||||
expect(this.processItemFn.calls.argsFor(0).length).toEqual(2);
|
||||
});
|
||||
|
||||
it('should have called the process fn with the item as 1st arg', function () {
|
||||
var i = 3;
|
||||
var firstArg = this.processItemFn.calls.argsFor(i)[0];
|
||||
expect(firstArg).toEqual(this.items[i]);
|
||||
});
|
||||
|
||||
it('should have called the process fn with item result callback fn as 2nd arg', function () {
|
||||
var i = 3;
|
||||
var secArg = this.processItemFn.calls.argsFor(i)[1];
|
||||
expect(secArg).toEqual(jasmine.any(Function));
|
||||
});
|
||||
|
||||
describe('given all items finished successfully', function () {
|
||||
it('should wait until all items are processed before calling the done callback', function () {
|
||||
expect(this.finishedAllSuccessfully).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should have called the done callback after all finished', function () {
|
||||
_.each(this.items, function (item, i) {
|
||||
this.processItemFn.calls.argsFor(i)[1]();
|
||||
}, this);
|
||||
|
||||
expect(this.finishedAllSuccessfully).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('given at least one item fail', function () {
|
||||
beforeEach(function () {
|
||||
this.failIndex = 3;
|
||||
this.errorMsg = 'something fail for processing item ' + (this.failIndex + 1);
|
||||
this.processItemFn.calls.argsFor(this.failIndex)[1](this.errorMsg);
|
||||
});
|
||||
|
||||
it('should have called the fail callback after all finished', function () {
|
||||
expect(this.somethingFailed).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should pass error arg to the fail callback', function () {
|
||||
expect(this.somethingFailed).toEqual(this.errorMsg);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user