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();
                }
            }
        }
示例#2
0
        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()
            });
        }
示例#3
0
        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_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 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);
        }
示例#6
0
        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);
        }
示例#7
0
        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))
            });
        }
示例#8
0
        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,
                });
        }
示例#17
0
 public Context()
 {
     this.sut = new RegistrationProcessManager();
 }