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); }
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); }
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(); }