public void GivenTheSelectedOrderItems(Table table)
        {
            conferenceInfo         = ScenarioContext.Current.Get <ConferenceInfo>();
            registrationController = RegistrationHelper.GetRegistrationController(conferenceInfo.Slug);

            orderViewModel = RegistrationHelper.GetModel <OrderViewModel>(registrationController.StartRegistration().Result);
            Assert.NotNull(orderViewModel);

            registration = new RegisterToConference {
                ConferenceId = conferenceInfo.Id, OrderId = orderViewModel.OrderId
            };

            foreach (var row in table.Rows)
            {
                var orderItemViewModel = orderViewModel.Items.FirstOrDefault(s => s.SeatType.Description == row["seat type"]);
                Assert.NotNull(orderItemViewModel);
                int qt;
                if (!row.ContainsKey("quantity") || !Int32.TryParse(row["quantity"], out qt))
                {
                    qt = orderItemViewModel.SeatType.Quantity;
                }
                registration.Seats.Add(new SeatQuantity(orderItemViewModel.SeatType.Id, qt));
            }

            // Store for sharing between steps implementations
            ScenarioContext.Current.Set(registration);
            ScenarioContext.Current.Set(registrationController.ConferenceAlias);
        }
        public void when_starting_registration_then_returns_view_with_registration_for_conference()
        {
            var seatTypeId = Guid.NewGuid();
            var seats      = new[] { new SeatType(seatTypeId, conferenceAlias.Id, "Test Seat", "Description", 10, 50) };

            // Arrange
            Mock.Get(conferenceDao).Setup(r => r.GetPublishedSeatTypes(conferenceAlias.Id)).Returns(seats);

            // Act
            var result = (ViewResult)sut.StartRegistration().Result;

            // Assert
            Assert.NotNull(result);
            Assert.Equal("", result.ViewName);

            var resultModel = (OrderViewModel)result.Model;

            Assert.NotNull(resultModel);
            Assert.Equal(1, resultModel.Items.Count);
            Assert.Equal("Test Seat", resultModel.Items[0].SeatType.Name);
            Assert.Equal("Description", resultModel.Items[0].SeatType.Description);
            Assert.Equal(0, resultModel.Items[0].OrderItem.RequestedSeats);
            Assert.Equal(0, resultModel.Items[0].OrderItem.ReservedSeats);
        }
        public void GivenTheRegistrantProceedToMakeTheReservation()
        {
            //Assert.True(redirect != null, "Reservation not accepted. May be waitlisted.");

            // Perform external redirection
            var timeout = DateTime.Now.Add(Constants.UI.WaitTimeout);

            while (DateTime.Now < timeout && registrationViewModel == null)
            {
                var redirect = registrationController.StartRegistration(registration, orderViewModel.OrderVersion) as RedirectToRouteResult;
                if (redirect != null)
                {
                    //ReservationUnknown
                    var result = registrationController.SpecifyRegistrantAndPaymentDetails(
                        (Guid)redirect.RouteValues["orderId"], orderViewModel.OrderVersion).Result;

                    Assert.IsNotType <RedirectToRouteResult>(result);
                    registrationViewModel = RegistrationHelper.GetModel <RegistrationViewModel>(result);
                }
            }

            Assert.False(registrationViewModel == null, "Could not make the reservation and get the RegistrationViewModel");
        }