dm
Version:
Dependency Injection Manager
92 lines (71 loc) • 2.82 kB
JavaScript
var DefaultParameterProvider = require("../../../../lib/provider/parameter/default"),
DM = require("../../../../lib/dm"),
Async = require("../../../../lib/async"),
Chance = require("chance"),
chai = require("chai"),
sinon = require("sinon"),
RSVP = require("rsvp"),
chance;
expect = chai.expect;
chance = new Chance;
describe("DefaultParameterProvider", function() {
var provider, dm, async;
beforeEach(function() {
dm = Object.create(DM.prototype);
async = Object.create(Async.prototype);
sinon.stub(async, "promise", function(cb) {
return new RSVP.Promise(cb);
});
provider = new DefaultParameterProvider(dm, async);
});
describe("#get", function() {
it("should throw error when definition is not given", function() {
expect(provider.get.bind(provider)).to.throw(TypeError, "Object is expected");
});
it("should throw error when definition.name is not a string", function() {
expect(provider.get.bind(provider, {})).to.throw(TypeError, "Definition.name is expected to be a string");
});
it("should return promise", function() {
sinon.stub(dm, "parse", function(str) {
return RSVP.Promise.resolve(str);
});
expect(provider.get({ name: chance.word() })).to.be.instanceOf(RSVP.Promise);
});
it("should parse name", function(done) {
var name;
name = chance.word();
sinon.stub(dm, "parse", function(str) {
return RSVP.Promise.resolve(str);
});
sinon.stub(dm, "getParameter");
provider
.get({name: name})
.then(function() {
var call;
expect(call = dm.parse.getCall(0)).to.exist();
expect(call.calledWithExactly(name)).to.be.true();
})
.then(done, done);
});
it("should call #getParameter of dm", function(done) {
var name, param;
name = chance.word();
param = chance.word();
sinon.stub(dm, "parse", function(str) {
return RSVP.Promise.resolve(str);
});
sinon.stub(dm, "getParameter", function() {
return param;
});
provider
.get({name: name})
.then(function(response) {
var call;
expect(call = dm.getParameter.getCall(0)).to.exist();
expect(call.calledWithExactly(name)).to.be.true();
expect(response).equal(param);
})
.then(done, done);
});
});
});