public Reservation MakeReservation(ReservationRequest request)
        {
            var freeSeats = _seatService.GetAvailableSeats(request.TrainId);

            if (!CanFillTrainWith(request.SeatCount, freeSeats.Count))
            {
                return(null);
            }

            var orderedSeats  = freeSeats.OrderBy(x => x.Coach).ThenBy(x => x.SeatNumber).ToList();
            var reservedSeats = new List <Seat>();
            var coachs        = orderedSeats.GroupBy(x => x.Coach);

            foreach (var seat in coachs)
            {
                if (SeatsInCoachAreAvailable(request.SeatCount, seat.Count()))
                {
                    reservedSeats = seat.ToList().GetRange(0, request.SeatCount);
                    _seatService.ConfirmReservation(reservedSeats);
                    return(new Reservation(request.TrainId, _bookingService.GetBookingId(), reservedSeats));
                }
            }

            return(null);
        }
Example #2
0
        public ActionResult <IEnumerable <Seat> > GetAvailabelSeats([FromRoute] string showName)
        {
            if (string.IsNullOrWhiteSpace(showName))
            {
                return(BadRequest("Cinema show name is not provided"));
            }

            try
            {
                var seats = _seatService.GetAvailableSeats(showName);

                if (seats == null)
                {
                    return(NotFound("Unable to find any available seats."));
                }

                return(Ok(seats));
            }
            catch (Exception)
            {
                return(Conflict("Unable to  complete the request"));

                throw;
            }
        }
        public void Should_not_reserve_when_seat_count_of_reservation_is_greather_than_available_seats()
        {
            string       trainId     = "train1";
            ISeatService seatService = Substitute.For <ISeatService>();

            seatService.GetAvailableSeats(trainId).Returns(
                new List <Seat>()
            {
                new Seat(new Coach("01"), 1), new Seat(new Coach("01"), 2)
            });
            IBookingService bookingService = Substitute.For <IBookingService>();

            bookingService.GetBookingId().Returns("RES1");
            var reservationRequest = new ReservationRequest(trainId, 5);

            var makeReservation = new TicketOffice(seatService, bookingService).MakeReservation(reservationRequest);

            Check.That(makeReservation).IsNull();
        }
        public void Should_return_reservation_valid_when_ticket_office_make_reservation_request_for_one_seat()
        {
            string       trainId     = "train1";
            ISeatService seatService = Substitute.For <ISeatService>();

            seatService.GetAvailableSeats(trainId).Returns(new List <Seat>()
            {
                new Seat(new Coach("01"), 1), new Seat(new Coach("01"), 2)
            });
            IBookingService bookingService = Substitute.For <IBookingService>();

            bookingService.GetBookingId().Returns("RES1");
            var reservationRequest = new ReservationRequest(trainId, 1);

            var makeReservation = new TicketOffice(seatService, bookingService).MakeReservation(reservationRequest);

            Check.That(reservationRequest.TrainId).IsEqualTo(makeReservation.TrainId);
            Check.That(makeReservation.Seats.Count).IsEqualTo(reservationRequest.SeatCount);
        }
Example #5
0
        public async Task <IActionResult> GetAvailableSeats(int floorId)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                var result = await _seatService.GetAvailableSeats(floorId);

                return(StatusCode(result.StatusCode, result));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw ex;
            }
        }
        public void Should_not_return_reservation_of_train_if_seat_count_greater_than_70_percent_seat_train_count()
        {
            string       trainId     = "train1";
            ISeatService seatService = Substitute.For <ISeatService>();

            seatService.GetAvailableSeats(trainId).Returns(
                new List <Seat>()
            {
                new Seat(new Coach("01"), 1), new Seat(new Coach("01"), 2)
                , new Seat(new Coach("01"), 3), new Seat(new Coach("01"), 4), new Seat(new Coach("01"), 5), new Seat(new Coach("01"), 6)
                , new Seat(new Coach("01"), 7), new Seat(new Coach("01"), 8), new Seat(new Coach("01"), 9), new Seat(new Coach("01"), 10)
            });
            IBookingService bookingService = Substitute.For <IBookingService>();

            bookingService.GetBookingId().Returns("RES1");
            var reservationRequest = new ReservationRequest(trainId, 8);

            var makeReservation = new TicketOffice(seatService, bookingService).MakeReservation(reservationRequest);

            Check.That(makeReservation).IsNull();
        }