UNPKG

eventric

Version:

Build JavaScript applications with Behaviour-driven Domain Design. Based on DDD, BDD, CQRS and EventSourcing.

66 lines (55 loc) 2.38 kB
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)); }); }); });