UNPKG

eventric

Version:

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

42 lines (29 loc) 1.57 kB
describe 'Aggregate', -> Aggregate = require 'eventric/src/context/aggregate' DomainEvent = require 'eventric/src/context/domain_event' it 'should inject the $emitDomainEvent method into the aggregate root', -> exampleRoot = {} myAggregate = new Aggregate {}, 'MyAggregate', sandbox.stub().returns exampleRoot expect(exampleRoot.$emitDomainEvent).to.be.ok describe '#emitDomainEvent', -> it 'should call a handle method on the aggregate based on the DomainEvent Name', -> class SomethingHappened constructor: sandbox.stub() exampleContext = getDomainEvent: sandbox.stub().returns SomethingHappened class ExampleRoot handleSomethingHappened: sandbox.stub() myAggregate = new Aggregate exampleContext, 'MyAggregate', ExampleRoot myAggregate.emitDomainEvent 'SomethingHappened', some: 'properties' applyCall = ExampleRoot::handleSomethingHappened.getCall 0 expect(applyCall.args[0]).to.be.an.instanceof DomainEvent expect(applyCall.args[0].payload).to.be.an.instanceof SomethingHappened describe '#applyDomainEvents', -> it 'should call the handle function of the given DomainEvent', -> class ExampleRoot handleSomethingHappened: sandbox.stub() domainEvent = new DomainEvent name: 'SomethingHappened' myAggregate = new Aggregate {}, 'MyAggregate', ExampleRoot myAggregate.applyDomainEvents [domainEvent] expect(ExampleRoot::handleSomethingHappened).to.have.been.calledWith sinon.match.instanceOf DomainEvent