public void when_saving_process_then_can_retrieve_it() { var dbName = this.GetType().Name + "-" + Guid.NewGuid(); using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Create(); } try { Guid id = Guid.Empty; using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = new RegistrationProcessManager(); context.RegistrationProcesses.Add(pm); context.SaveChanges(); id = pm.Id; } using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = context.RegistrationProcesses.Find(id); Assert.NotNull(pm); } } finally { using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Delete(); } } }
public Context() { this.sut = new RegistrationProcessManager(); this.orderId = Guid.NewGuid(); this.conferenceId = Guid.NewGuid(); var seatType = Guid.NewGuid(); this.sut.Handle( new OrderPlaced { SourceId = this.orderId, ConferenceId = this.conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); var makeReservationCommand = sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); this.reservationId = makeReservationCommand.ReservationId; this.sut.Handle( new Envelope <SeatsReserved>( new SeatsReserved { SourceId = this.conferenceId, ReservationId = makeReservationCommand.ReservationId, ReservationDetails = new[] { new SeatQuantity(seatType, 2) } }) { CorrelationId = makeReservationCommand.Id.ToString() }); }
public void Setup() { this._sut = new RegistrationProcessManager(); this._orderId = Guid.NewGuid(); this._conferenceId = Guid.NewGuid(); this._sut.Handle(new OrderPlaced() { SourceId = this._orderId, ConferenceId = this._conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); var makeReservationCommand = this._sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); var seatsReserved = new SeatsReserved() { SourceId = this._conferenceId, ReservationId = makeReservationCommand.ReservationId, ReservationDetails = new SeatQuantity[0] }; this._initialCommandCount = this._sut.Commands.Count(); this._sut.Handle(new Envelope <SeatsReserved>(seatsReserved) { CorrelationId = Guid.NewGuid().ToString() }); }
public void when_reservation_accepted_then_routes_and_saves() { var pm = new RegistrationProcessManager { State = RegistrationProcessManager.ProcessState.AwaitingReservationConfirmation, ReservationId = Guid.NewGuid(), ConferenceId = Guid.NewGuid(), SeatReservationCommandId = Guid.NewGuid(), ReservationAutoExpiration = DateTime.UtcNow.AddMinutes(10) }; var context = new StubProcessManagerDataContext <RegistrationProcessManager> { Store = { pm } }; var router = new RegistrationProcessManagerRouter(() => context); router.Handle( new Envelope <SeatsReserved>( new SeatsReserved { SourceId = pm.ConferenceId, ReservationId = pm.ReservationId, ReservationDetails = new SeatQuantity[0] }) { CorrelationId = pm.SeatReservationCommandId.ToString() }); Assert.Equal(1, context.SavedProcesses.Count); Assert.True(context.DisposeCalled); }
public void Setup() { this._sut = new RegistrationProcessManager(); this._orderPlaced = new OrderPlaced() { SourceId = Guid.NewGuid(), ConferenceId = Guid.NewGuid(), Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }; this._sut.Handle(_orderPlaced); }
public Context() { sut = new RegistrationProcessManager(); orderId = Guid.NewGuid(); conferenceId = Guid.NewGuid(); sut.Handle( new OrderPlaced { SourceId = orderId, ConferenceId = conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); }
public void Setup() { this._sut = new RegistrationProcessManager(); this._orderId = Guid.NewGuid(); this._conferenceId = Guid.NewGuid(); var seatType = Guid.NewGuid(); this._sut.Handle( new OrderPlaced { SourceId = this._orderId, ConferenceId = this._conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); var makeReservationCommand = this._sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); this._reservationId = makeReservationCommand.ReservationId; this._sut.Handle( new Envelope <SeatsReserved>( new SeatsReserved { SourceId = this._conferenceId, ReservationId = makeReservationCommand.ReservationId, ReservationDetails = new[] { new SeatQuantity(seatType, 2) } }) { CorrelationId = makeReservationCommand.Id.ToString() }); var makeReservationCommand1 = _sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); var seatsReserved = new SeatsReserved { SourceId = this._conferenceId, ReservationId = makeReservationCommand.ReservationId, ReservationDetails = new SeatQuantity[0] }; try { _sut.Handle(new Envelope <SeatsReserved>(seatsReserved) { CorrelationId = Guid.NewGuid().ToString() }); } catch (InvalidOperationException e) { this._exception = e; } }
public void when_saving_process_performs_optimistic_locking() { var dbName = this.GetType().Name + "-" + Guid.NewGuid(); using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Create(); } try { Guid id = Guid.Empty; using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = new RegistrationProcessManager(); context.RegistrationProcesses.Add(pm); context.SaveChanges(); id = pm.Id; } using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = context.RegistrationProcesses.Find(id); pm.State = RegistrationProcessManager.ProcessState.PaymentConfirmationReceived; using (var innerContext = new RegistrationProcessManagerDbContext(dbName)) { var innerProcess = innerContext.RegistrationProcesses.Find(id); innerProcess.State = RegistrationProcessManager.ProcessState.ReservationConfirmationReceived; innerContext.SaveChanges(); } Assert.Throws <DbUpdateConcurrencyException>(() => context.SaveChanges()); } } finally { using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Delete(); } } }
public void when_saving_process_performs_optimistic_locking() { var dbName = this.GetType().Name + "-" + Guid.NewGuid(); using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Create(); } try { Guid id = Guid.Empty; using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = new RegistrationProcessManager(); context.RegistrationProcesses.Add(pm); context.SaveChanges(); id = pm.Id; } using (var context = new RegistrationProcessManagerDbContext(dbName)) { var pm = context.RegistrationProcesses.Find(id); pm.State = RegistrationProcessManager.ProcessState.PaymentConfirmationReceived; using (var innerContext = new RegistrationProcessManagerDbContext(dbName)) { var innerProcess = innerContext.RegistrationProcesses.Find(id); innerProcess.State = RegistrationProcessManager.ProcessState.ReservationConfirmationReceived; innerContext.SaveChanges(); } Assert.Throws<DbUpdateConcurrencyException>(() => context.SaveChanges()); } } finally { using (var context = new RegistrationProcessManagerDbContext(dbName)) { context.Database.Delete(); } } }
public void when_order_confirmed_received_then_routes_and_saves() { var pm = new RegistrationProcessManager { State = RegistrationProcessManager.ProcessState.PaymentConfirmationReceived, OrderId = Guid.NewGuid(), ReservationAutoExpiration = DateTime.UtcNow.AddMinutes(10) }; var context = new StubProcessManagerDataContext <RegistrationProcessManager> { Store = { pm } }; var router = new RegistrationProcessManagerRouter(() => context); router.Handle(new OrderConfirmed { SourceId = pm.OrderId }); Assert.Equal(1, context.SavedProcesses.Count); Assert.True(context.DisposeCalled); }
public void when_order_updated_then_routes_and_saves() { var pm = new RegistrationProcessManager { State = RegistrationProcessManager.ProcessState.AwaitingReservationConfirmation, ReservationId = Guid.NewGuid(), ConferenceId = Guid.NewGuid(), ReservationAutoExpiration = DateTime.UtcNow.AddMinutes(10) }; var context = new StubProcessManagerDataContext <RegistrationProcessManager> { Store = { pm } }; var router = new RegistrationProcessManagerRouter(() => context); router.Handle(new OrderUpdated { SourceId = pm.OrderId, Seats = new SeatQuantity[0] }); Assert.Equal(1, context.SavedProcesses.Count); Assert.True(context.DisposeCalled); }
public void When_order_expired_then_routes_and_saves() { var pm = new RegistrationProcessManager { State = RegistrationProcessManager.ProcessState.AwaitingReservationConfirmation, ReservationId = Guid.NewGuid(), OrderId = Guid.NewGuid(), ReservationAutoExpiration = DateTime.UtcNow.AddMinutes(10) }; var context = new StubProcessManagerDataContext <RegistrationProcessManager> { Store = { pm } }; var router = new RegistrationProcessManagerRouter(() => context); router.Handle(new Commands.ExpireRegistrationProcess { ProcessId = pm.Id }); Assert.AreEqual(1, context.SavedProcesses.Count); Assert.IsTrue(context.DisposeCalled); }
public Context() { this.sut = new RegistrationProcessManager(); this.orderId = Guid.NewGuid(); this.conferenceId = Guid.NewGuid(); this.sut.Handle( new OrderPlaced { SourceId = this.orderId, ConferenceId = this.conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); }
public Context() { this.sut = new RegistrationProcessManager(); }
public Context() { this.sut = new RegistrationProcessManager(); this.orderId = Guid.NewGuid(); this.conferenceId = Guid.NewGuid(); var seatType = Guid.NewGuid(); this.sut.Handle( new OrderPlaced { SourceId = this.orderId, ConferenceId = this.conferenceId, Seats = new[] { new SeatQuantity(Guid.NewGuid(), 2) }, ReservationAutoExpiration = DateTime.UtcNow.Add(TimeSpan.FromMinutes(22)) }); var makeReservationCommand = sut.Commands.Select(e => e.Body).OfType<MakeSeatReservation>().Single(); this.reservationId = makeReservationCommand.ReservationId; this.sut.Handle( new Envelope<SeatsReserved>( new SeatsReserved { SourceId = this.conferenceId, ReservationId = makeReservationCommand.ReservationId, ReservationDetails = new[] { new SeatQuantity(seatType, 2) } }) { CorrelationId = makeReservationCommand.Id.ToString() }); this.sut.Handle( new PaymentCompleted { PaymentSourceId = this.orderId, }); }