UNPKG

eventric

Version:

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

123 lines (94 loc) 3.99 kB
describe 'Context', -> Context = null class RepositoryMock eventBusStub = null beforeEach -> eventBusStub = subscribeToDomainEvent: sandbox.stub() subscribeToDomainEventWithAggregateId: sandbox.stub() publishDomainEvent: sandbox.stub() mockery.registerMock 'eventric/src/event_bus', sandbox.stub().returns eventBusStub mockery.registerMock 'eventric/src/context/repository', RepositoryMock Context = require 'eventric/src/context' describe '#initialize', -> it 'should instantiate all registered projections', -> context = new Context 'exampleContext' class ProjectionStub stores: ['inmemory'] context.addProjection 'SomeProjection', ProjectionStub context.initialize() .then -> context.getProjectionStore 'inmemory', 'SomeProjection', (err, projectionStore) -> expect(projectionStore).to.deep.equal {} it 'should instantiate and initialize all registered adapters', (done) -> context = new Context 'exampleContext' AdapterFactory = sandbox.stub() context.addAdapter 'Adapter', AdapterFactory context.initialize => expect(AdapterFactory).to.have.been.calledWithNew done() describe '#command', -> describe 'given the context was not initialized yet', -> it 'should callback with an error', (done) -> someContext = new Context 'exampleContext' someContext.command 'getSomething' .catch (error) -> expect(error).to.be.an.instanceOf Error done() describe 'given the command has no registered handler', -> it 'should call the callback with a command not found error', (done) -> someContext = new Context 'exampleContext' someContext.initialize => callback = sinon.spy() someContext.command 'doSomething', id: 42 foo: 'bar' .catch (error) -> expect(error).to.be.an.instanceof Error done() describe 'has a registered handler', -> it 'should execute the command handler', (done) -> commandStub = sandbox.stub() someContext = new Context 'exampleContext' someContext.initialize => someContext.addCommandHandler 'doSomething', commandStub params = foo: 'bar' someContext.command 'doSomething', params expect(commandStub.calledWith params, sinon.match.func).to.be.true done() describe '#query', -> someContext = null beforeEach -> someContext = new Context 'exampleContext' describe 'given the context was not initialized yet', -> it 'should callback with an error', (done) -> someContext.query 'getSomething' .catch (error) -> expect(error).to.be.an.instanceOf Error done() describe 'given the query has no matching queryhandler', -> it 'should callback with an error', (done) -> someContext.initialize => someContext.query 'getSomething' .catch (error) -> expect(error).to.be.an.instanceOf Error done() describe 'given the query has a matching queryhandler', -> it 'should call the queryhandler function', (done) -> queryStub = sandbox.stub().yields null, 'result' someContext.addQueryHandler 'getSomething', queryStub someContext.initialize => someContext.query 'getSomething' .then (result) -> expect(result).to.equal 'result' expect(queryStub).to.have.been.calledWith done() describe '#emitDomainEvent', -> beforeEach (done) -> someContext = new Context 'ExampleContext' someContext.defineDomainEvent 'WhatSoEver', -> someContext.initialize => someContext.emitDomainEvent 'WhatSoEver' done() it 'should publish the DomainEvent on the EventBus', -> expect(eventBusStub.publishDomainEvent).to.have.been.called