public Reservation MakeReservation(ReservationRequest request) { var train = _trainProvider.GetTrain(request.TrainId); if (OverCapcity(request, train)) return Reservation.Empty; if (!train.Coaches.Any(c => c.Available >= request.SeatCount)) return Reservation.Empty; return new Reservation(request.TrainId, Guid.NewGuid().ToString(), new List<Seat>() { new Seat(null, 0) }); }
public void Test_MakeReservation_Returns_Valid_Reservation_When_Train_Has_Capacity() { var trainProvider = new TrainProviderBuilder() .WithCoach(new CoachBuilder().WithCapacity(100).WithBooked(50).Build()).Build(); var ticketOffice = new TicketOffice(trainProvider); var request = new ReservationRequest("express_2000", 1); var result = ticketOffice.MakeReservation(request); result.BookingId.Should().NotBeNullOrEmpty(); result.TrainId.Should().Be("express_2000"); result.Seats.Should().HaveCount(1); }
private static bool OverCapcity(ReservationRequest request, Train train) { return (double) (train.Booked + request.SeatCount)/train.TotalSeats >= 0.7d; }