public static IDictionary <Type, object> GetDefaultServices() { var services = new Dictionary <Type, object>(); var commandBus = new MemoryCommandBus(); var eventBus = new MemoryEventBus(); Func <IRepository> ormFactory = () => new OrmRepository(eventBus); Func <ISagaRepository> sagaOrmFactory = () => new OrmSagaRepository(commandBus); Func <IViewRepository> viewOrmFactory = () => new OrmViewRepository(); // Handlers var registrationSaga = new RegistrationProcessSagaRouter(sagaOrmFactory); commandBus.Register(registrationSaga); eventBus.Register(registrationSaga); commandBus.Register(new OrderCommandHandler(ormFactory)); commandBus.Register(new SeatsAvailabilityHandler(ormFactory)); services[typeof(ICommandBus)] = commandBus; services[typeof(IEventBus)] = eventBus; services[typeof(Func <IRepository>)] = ormFactory; services[typeof(Func <ISagaRepository>)] = sagaOrmFactory; services[typeof(Func <IViewRepository>)] = viewOrmFactory; return(services); }
public void when_order_placed_then_routes_and_saves() { var repo = new Mock <ISagaRepository>(); var disposable = repo.As <IDisposable>(); var router = new RegistrationProcessSagaRouter(() => repo.Object); router.Handle(new Events.OrderPlaced()); repo.Verify(x => x.Save(It.IsAny <RegistrationProcessSaga>())); disposable.Verify(x => x.Dispose()); }
public void when_reservation_rejected_then_routes_and_saves() { var saga = new RegistrationProcessSaga { State = RegistrationProcessSaga.SagaState.AwaitingReservationConfirmation, ReservationId = Guid.NewGuid(), }; var repo = new Mock <ISagaRepository>(); repo.Setup(x => x.Query <RegistrationProcessSaga>()).Returns(new[] { saga }.AsQueryable()); var disposable = repo.As <IDisposable>(); var router = new RegistrationProcessSagaRouter(() => repo.Object); router.Handle(new Events.ReservationRejected { ReservationId = saga.ReservationId }); repo.Verify(x => x.Save(It.IsAny <RegistrationProcessSaga>())); disposable.Verify(x => x.Dispose()); }