public Reservation MakeReservation(ReservationRequest request) { var train = _seat.GetTrain(request.TrainId); var selectedFreeSeat = train.SelectFreeSeat(request.SeatCount); return(Reservation.Of(request.TrainId, selectedFreeSeat.Count != 0 ? _booking.GetBookingReference() : "", selectedFreeSeat)); }
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 void Should_make_reservation_twice_even_if_coach_over_70() { string trainId = "train2"; var reservedSeatsForFirstReservation = new List <Seat>() { new Seat(new Coach("02"), 1), new Seat(new Coach("02"), 2) , new Seat(new Coach("02"), 3), new Seat(new Coach("02"), 4), new Seat(new Coach("02"), 5), new Seat(new Coach("02"), 6) }; List <Seat> reservedSeatsForSecondReservation = new List <Seat>() { new Seat(new Coach("03"), 1), new Seat(new Coach("03"), 2) , new Seat(new Coach("03"), 3), new Seat(new Coach("03"), 4) }; ISeatService seatService = new SeatService(new TrainSeatsMock()); IBookingService bookingService = new BookingService(); var firstReservationRequest = new ReservationRequest(trainId, 6); var secondReservationRequest = new ReservationRequest(trainId, 4); var makeFirstReservation = new TicketOffice(seatService, bookingService).MakeReservation(firstReservationRequest); var makeSecondReservation = new TicketOffice(seatService, bookingService).MakeReservation(secondReservationRequest); Check.That(makeFirstReservation.Seats).ContainsExactly(reservedSeatsForFirstReservation); Check.That(makeSecondReservation.Seats).ContainsExactly(reservedSeatsForSecondReservation); Check.That(10).IsEqualTo(seatService.GetAvailableSeats(trainId).Count); }
private void MakeReservations(int nbReservation) { var reservationRequest = new ReservationRequest("MyTrainId", 1); for (int i = 0; i < nbReservation; i++) { _ticketOffice.MakeReservation(reservationRequest); } }
public void reserveSeats() { TicketOffice office = new TicketOffice("http://localhost:8081", "http://localhost:8082"); ReservationRequest request = new ReservationRequest("express_2000", 4); Reservation reservation = office.MakeReservation(request); Assert.AreEqual(4, reservation.Seats.Count); Assert.AreEqual("A", reservation.Seats[0].Coach); Assert.AreEqual("75bcd15", reservation.BookingId); }
public void reserveSeats() { TicketOffice office = new TicketOffice("http://localhost:8081", "http://localhost:8082"); ReservationRequest request = new ReservationRequest("express_2000", 4); Reservation reservation = office.makeReservation(request); Assert.AreEqual(4, reservation.seats.length); Assert.AreEqual("A", reservation.seats[0].coach); Assert.AreEqual("75bcd15", reservation.booking_reference); }
public Reservation MakeReservationInCoach(ReservationRequest request) { var seatInCoach = _seat.GetCoach(request.TrainId, "A"); var selectedFreeSeat = seatInCoach.SelectFreeSeat(percentReserved => percentReserved < 70, request.SeatCount); if (HasSeatSelected(selectedFreeSeat)) { var reservation = Reservation.Of(request.TrainId, _booking.GetBookingReference(), selectedFreeSeat); var reserve = _reservationRegister.Reserve(reservation); if (reserve.IsSuccess()) { return(reservation); } } return(EmptyReservation(request.TrainId)); }
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 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(); }
public Reservation MakeReservation(ReservationRequest request) { //TODO: implement this code! throw new NotImplementedException(); }