public async Task Reserve_seats_on_2_coaches_When_resereved_seats_exeed_coach_capacity() { var seatRequested = new SeatsRequested(2); var trainId = new TrainId("express_2000"); var bookingReferenceNumber = "10"; var bookingReferenceAdapter = Substitute.For <IBookingReference>(); bookingReferenceAdapter.GetBookingReference().Returns(Task.FromResult(bookingReferenceNumber)); var trainDataServiceAdapter = Substitute.For <ITrainDataService>(); trainDataServiceAdapter.GetTrain(trainId).Returns(Task.FromResult(new Train(trainId, TrainDataAdapter.AdaptTrainTopology("{\"seats\": {" + TrainHelper.BuildCoachJson("A", 10, numberOfReservedSeat: 6) + "," + TrainHelper.BuildCoachJson("B", 10, numberOfReservedSeat: 6) + "}}")))); var manager = new TicketOfficeService(trainDataServiceAdapter, bookingReferenceAdapter); IProvideReservation hexagon = new TicketOfficeService(trainDataServiceAdapter, bookingReferenceAdapter); var seatReservationAdapter = new SeatReservationAdapter(hexagon); var reservationRequestDto = new ReservationRequestDto { train_id = trainId.ToString(), number_of_seats = seatRequested.Value }; var jsonResult = await seatReservationAdapter.PostSeatsRequest(reservationRequestDto); Check.That(jsonResult).IsEqualTo($"{{\"train_id\": \"{trainId}\", \"booking_reference\": \"10\", \"seats\": [\"7A\", \"7B\"]}}"); }
public async Task <string> PostSeatsRequest(ReservationRequestDto reservationRequestDto) { // Infra => Domain var trainId = new TrainId(reservationRequestDto.train_id); var seatsRequested = new SeatsRequested(reservationRequestDto.number_of_seats); var reservation = await _hexagon.ReserveAsync(trainId, seatsRequested); // Domain => Infra return(AdaptReservation(reservation)); }