eventric
Version:
Build JavaScript applications with Behaviour-driven Domain Design. Based on DDD, BDD, CQRS and EventSourcing.
66 lines (55 loc) • 2.38 kB
JavaScript
describe('Aggregate', function() {
var Aggregate, DomainEvent;
Aggregate = require('eventric/src/context/aggregate');
DomainEvent = require('eventric/src/context/domain_event');
it('should inject the $emitDomainEvent method into the aggregate root', function() {
var exampleRoot, myAggregate;
exampleRoot = {};
myAggregate = new Aggregate({}, 'MyAggregate', sandbox.stub().returns(exampleRoot));
return expect(exampleRoot.$emitDomainEvent).to.be.ok;
});
describe('#emitDomainEvent', function() {
return it('should call a handle method on the aggregate based on the DomainEvent Name', function() {
var ExampleRoot, SomethingHappened, applyCall, exampleContext, myAggregate;
SomethingHappened = (function() {
var _class;
function SomethingHappened() {
return _class.apply(this, arguments);
}
_class = sandbox.stub();
return SomethingHappened;
})();
exampleContext = {
getDomainEvent: sandbox.stub().returns(SomethingHappened)
};
ExampleRoot = (function() {
function ExampleRoot() {}
ExampleRoot.prototype.handleSomethingHappened = sandbox.stub();
return ExampleRoot;
})();
myAggregate = new Aggregate(exampleContext, 'MyAggregate', ExampleRoot);
myAggregate.emitDomainEvent('SomethingHappened', {
some: 'properties'
});
applyCall = ExampleRoot.prototype.handleSomethingHappened.getCall(0);
expect(applyCall.args[0]).to.be.an["instanceof"](DomainEvent);
return expect(applyCall.args[0].payload).to.be.an["instanceof"](SomethingHappened);
});
});
return describe('#applyDomainEvents', function() {
return it('should call the handle function of the given DomainEvent', function() {
var ExampleRoot, domainEvent, myAggregate;
ExampleRoot = (function() {
function ExampleRoot() {}
ExampleRoot.prototype.handleSomethingHappened = sandbox.stub();
return ExampleRoot;
})();
domainEvent = new DomainEvent({
name: 'SomethingHappened'
});
myAggregate = new Aggregate({}, 'MyAggregate', ExampleRoot);
myAggregate.applyDomainEvents([domainEvent]);
return expect(ExampleRoot.prototype.handleSomethingHappened).to.have.been.calledWith(sinon.match.instanceOf(DomainEvent));
});
});
});