UNPKG

eventric

Version:

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

62 lines (51 loc) 2.33 kB
describe 'Subscribe to event with aggregate id Feature', -> describe 'given we created and initialized some example context including an aggregate', -> exampleContext = null beforeEach (done) -> exampleContext = eventric.context 'exampleContext' exampleContext.addAggregate 'Example', class Example exampleContext.defineDomainEvent 'ExampleCreated', -> exampleContext.defineDomainEvent 'SomethingHappened', -> class Example create: (callback) -> @$emitDomainEvent 'ExampleCreated' callback() doSomething: -> @$emitDomainEvent 'SomethingHappened' exampleContext.addAggregate 'Example', Example exampleContext.addCommandHandlers CreateExample: (params, callback) -> exampleId = null @$repository('Example').create() .then (exampleId) => @$repository('Example').save exampleId .then (exampleId) -> callback null, exampleId DoSomething: (params, callback) -> @$repository('Example').findById params.id .then (example) => example.doSomething() @$repository('Example').save params.id .then -> callback() exampleContext.initialize -> exampleContext.enableWaitingMode() done() describe 'when we subscribe to an event with a specific aggregate id', -> it 'should notify the domain event subscriber if the aggregate id matches', -> handlerFn = sandbox.spy() exampleContext.command 'CreateExample' .then (exampleId) -> exampleContext.subscribeToDomainEventWithAggregateId 'SomethingHappened', exampleId, handlerFn exampleContext.command 'DoSomething', id: exampleId .then -> expect(handlerFn).to.have.been.called it 'should not notify the domain event subscriber if the aggregate does not match', -> handlerFn = sandbox.spy() exampleContext.command 'CreateExample' .then (exampleId) -> anotherId = exampleId + '12345' exampleContext.subscribeToDomainEventWithAggregateId 'SomethingHappened', anotherId, handlerFn exampleContext.command 'DoSomething', id: exampleId .then -> expect(handlerFn).not.to.have.been.called