예제 #1
0
        public ActionResult BookSeat(string flightNumber)
        {
            // TODO Setup some sort of DI and inject this, to remove EF reference and east testing
            MonarchContext context = new MonarchContext();
            BookingService service = new BookingService(context);

            var    vm     = new SeatBookedViewModel();
            Flight flight = service.GetFlight(flightNumber);

            // Display error if the flight Can#t be found
            if (flight == null)
            {
                vm.Message = "Flight not found";
            }
            else if (flight.SeatsBooked >= flight.SeatsOnFlight)
            {
                vm.Message = string.Format("Flight {0} is already at capacity", flight.FlightNumber);
            }
            else
            {
                var booked = service.BookSeat(flightNumber);
                if (booked)
                {
                    vm.Message = string.Format("A seat on Flight Number {0} has been booked successfully", flight.FlightNumber);
                    vm.Success = true;
                }
                else
                {
                    //TODO Add Logger and log exception
                    vm.Message = string.Format("Error booking a seat on Flight Number {0}", flight.FlightNumber);
                }
            }

            return(View(vm));
        }
        public void GivenShowIsNotAvailable_WhenBookSeat_ShouldReturnFalse()
        {
            // ARRANGE
            var cinemaShow = _fixture.Build <CinemaShowDTO>().
                             With(cs => cs.IsAvailable, false).
                             Create();

            _cinemaShowRepositoryMock.Setup(c => c.GetCinemaShow(It.IsAny <string>())).Returns(cinemaShow);
            var bookingService = new BookingService(_cinemaShowRepositoryMock.Object, _seatRepositoryMock.Object, _bookingRepositoryMock.Object);

            // ACT
            var result = bookingService.BookSeat(cinemaShow.Name, It.IsAny <string>());

            // ASSERT
            result.Should().BeFalse();
        }
        public void GivenShowHasSeats_WhenBookSeat_ShouldReturnTrue()
        {
            // ARRANGE
            var cinemaShow = _fixture.Build <CinemaShowDTO>().
                             With(cs => cs.IsAvailable, true).
                             Create();
            var seats = _fixture.Create <IEnumerable <SeatDTO> >();

            _cinemaShowRepositoryMock.Setup(c => c.GetCinemaShow(It.IsAny <string>())).Returns(cinemaShow);
            _seatRepositoryMock.Setup(c => c.GetAvailableSeats(cinemaShow.Id)).Returns(seats);
            var bookingService = new BookingService(_cinemaShowRepositoryMock.Object, _seatRepositoryMock.Object, _bookingRepositoryMock.Object);

            // ACT
            var result = bookingService.BookSeat(cinemaShow.Name, It.IsAny <string>());

            // ASSERT
            result.Should().BeTrue();
        }