eventric-testing
Version:
Testing helpers for eventric.js
76 lines (48 loc) • 2.19 kB
text/coffeescript
aggregateFactory = require './aggregate_factory'
fakePromise = require './fake_promise'
eventualConsistencyUtilities = require './eventual_consistency_utilities'
remoteFactory = require './remote_factory'
fakeRemoteContexts = []
class EventricTesting
resolve: (args...) ->
fakePromise.resolve args...
reject: (args...) ->
fakePromise.reject args...
rejectAsync: (args...) ->
fakePromise.rejectAsync args...
createAggregate: (args...) ->
aggregateFactory.createAggregate args...
setupFakeRemoteContext: (args...) ->
fakeRemoteContext = remoteFactory.setupFakeRemoteContext args...
fakeRemoteContexts.push fakeRemoteContext
fakeRemoteContext
destroy: (eventric) ->
if not eventric
throw new Error 'eventric instance missing'
contexts = @_getRegisteredEventricContexts eventric
contexts.forEach (context) => @_makeContextInoperative eventric, context
destroyContextsPromise = Promise.all contexts.map (context) -> context.destroy()
destroyRemotesPromise = Promise.all fakeRemoteContexts.map (fakeRemoteContext) -> fakeRemoteContext.$destroy()
destroyRemotesPromise = destroyRemotesPromise.then -> fakeRemoteContexts = []
return Promise.all [
destroyContextsPromise
destroyRemotesPromise
]
waitForQueryToReturnResult: (args...) ->
eventualConsistencyUtilities.waitForQueryToReturnResult args...
waitForCommandToResolve: (args...) ->
eventualConsistencyUtilities.waitForCommandToResolve args...
waitForResult: (args...) ->
eventualConsistencyUtilities.waitForResult args...
# TODO: Consider not to use private members for getting the contexts
_getRegisteredEventricContexts: (eventric) ->
return Object.keys(eventric._contexts).map (contextName) ->
eventric._contexts[contextName]
_makeContextInoperative: (eventric, context) ->
context.command = ->
Promise.resolve eventric.generateUuid()
context.getEventBus().publishDomainEvent = -> Promise.resolve()
domainEventsStore = context.getDomainEventsStore()
if domainEventsStore
domainEventsStore.saveDomainEvent = -> Promise.resolve()
module.exports = new EventricTesting