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\"]}}");
        }
Ejemplo n.º 2
0
        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));
        }