public given_saga_awaiting_payment() { this.sut = new RegistrationProcessSaga(); this.orderId = Guid.NewGuid(); this.conferenceId = Guid.NewGuid(); this.sut.Handle(new OrderPlaced { OrderId = this.orderId, ConferenceId = this.conferenceId, Items = new[] { new OrderPlaced.OrderItem { SeatTypeId = Guid.NewGuid(), Quantity = 2 } } }); var makeReservationCommand = sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); this.reservationId = makeReservationCommand.ReservationId; this.sut.Handle(new ReservationAccepted { ReservationId = makeReservationCommand.ReservationId, ConferenceId = makeReservationCommand.ConferenceId, }); }
public given_saga_awaiting_for_reservation_confirmation() { this.sut = new RegistrationProcessSaga(); this.orderId = Guid.NewGuid(); this.conferenceId = Guid.NewGuid(); this.sut.Handle(new OrderPlaced { OrderId = this.orderId, ConferenceId = this.conferenceId, Items = new[] { new OrderPlaced.OrderItem { SeatTypeId = Guid.NewGuid(), Quantity = 2 } } }); }
public void Handle(OrderPlaced @event) { var saga = new RegistrationProcessSaga(); saga.Handle(@event); var repo = this.repositoryFactory.Invoke(); using (repo as IDisposable) { lock (lockObject) { repo.Save(saga); } } }
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()); }
public given_uninitialized_saga() { this.sut = new RegistrationProcessSaga(); }