UNPKG

dm

Version:

Dependency Injection Manager

175 lines (124 loc) 4.66 kB
var _ = require('lodash'), chance = require('chance'), sinon = require('sinon'), chai = require('chai'), assert; chance = new chance; assert = chai.assert; module.exports = function(Adaptee, AdapteePromise, ConcreteAdapter, options) { describe(options.title, function() { describe("#promise", function() { var adapter; beforeEach(function() { adapter = new ConcreteAdapter(Adaptee); }); it("Should return promise", function() { var promise; promise = adapter.promise(_.noop); assert.instanceOf(promise, AdapteePromise); }); it("Should throw an error when resolver is not passed", function() { var error; try { adapter.promise(); } catch (err) { error = err; } assert.instanceOf(error, Error); }); }); describe("#all", function() { var adapter; beforeEach(function() { adapter = new ConcreteAdapter(Adaptee); }); it("Should return promise", function() { var promise; promise = adapter.all([]); assert.instanceOf(promise, AdapteePromise); }); it("Should return parsed values", function(done) { var promise, valueA, valueB; valueA = chance.word(); valueB = chance.word(); promise = adapter.all([valueA, valueB]); promise.then(function(values) { var error; try { assert.isArray(values); assert.strictEqual(values[0], valueA); assert.strictEqual(values[1], valueB); } catch (err) { error = err; } done(error); }); }); }); describe("#resolve", function() { var adapter; beforeEach(function() { adapter = new ConcreteAdapter(Adaptee); }); it("Should return promise", function() { var promise; promise = adapter.resolve(); assert.instanceOf(promise, AdapteePromise); }); it("Should return fullfilled promise", function(done) { var errorSpy, successSpy, promise, test, value; value = chance.word(); promise = adapter.resolve(value); errorSpy = sinon.spy(); successSpy = sinon.spy(); test = function() { var error; try { assert.isTrue(successSpy.calledWithExactly(value)); assert.strictEqual(errorSpy.callCount, 0); } catch (err) { error = err; } done(error); }; promise .then(successSpy, errorSpy) .then(test, test); }); //it.skip("Should wrap given promise", function(done) { // todo //}); }); describe("#reject", function() { var adapter; beforeEach(function() { adapter = new ConcreteAdapter(Adaptee); }); it("Should return promise", function() { var promise; promise = adapter.reject(); assert.instanceOf(promise, AdapteePromise); }); it("Should return rejected promise", function(done) { var err, errorSpy, promise, successSpy, test; err = chance.word(); promise = adapter.reject(err); errorSpy = sinon.spy(); successSpy = sinon.spy(); test = function() { var error; try { assert.isTrue(errorSpy.calledWithExactly(err)); assert.strictEqual(successSpy.callCount, 0); } catch (err_) { error = err_; } done(error); }; promise .then(successSpy, errorSpy) .then(test, test); }); }); }); };