private static string BuildPostContent(TrainId trainId, string bookingRef, IEnumerable <Seat> availableSeats)
        {
            var seats     = new StringBuilder("[");
            var firstTime = true;

            foreach (var s in availableSeats)
            {
                if (!firstTime)
                {
                    seats.Append(", ");
                }
                else
                {
                    firstTime = false;
                }

                seats.Append($"\"{s.SeatNumber}{s.CoachName}\"");
            }

            seats.Append("]");

            var result =
                $"{{\r\n\t\"train_id\": \"{trainId}\",\r\n\t\"seats\": {seats},\r\n\t\"booking_reference\": \"{bookingRef}\"\r\n}}";

            return(result);
        }
        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\"]}}");
        }
示例#3
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));
        }
示例#4
0
    public static Train BuildTrainWith_1_coach_and_0_reserved_seat(string coachId)
    {
        var    trainId       = new TrainId("express_2000");
        string trainTopology = BuildTrainTopology(new CoachConfig[]
        {
            new CoachConfig(coachId, 3, 0)
        });
        var seats = TrainDataAdapter.AdaptTrainTopology(trainTopology);

        return(new Train(trainId, seats));
    }
示例#5
0
        public virtual int _GetUniqueIdentifier()
        {
            var hashCode = 399326290;

            hashCode = hashCode * -1521134295 + (Id?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (LicensePlate?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (ContainerId?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (ShipId?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (TrainId?.GetHashCode() ?? 0);
            return(hashCode);
        }
        public async Task <Train> GetTrain(TrainId trainId)
        {
            string jsonTrainTopology;

            using (var client = new HttpClient())
            {
                var value = new MediaTypeWithQualityHeaderValue("application/json");
                client.BaseAddress = new Uri(_uriTrainDataService);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(value);

                // HTTP GET
                var response = await client.GetAsync($"api/data_for_train/{trainId}");

                response.EnsureSuccessStatusCode();
                jsonTrainTopology = await response.Content.ReadAsStringAsync();
            }

            return(new Train(trainId, AdaptTrainTopology(jsonTrainTopology)));
        }
示例#7
0
 public override int GetHashCode()
 {
     return(TrainId.GetHashCode()
            + BagId.GetHashCode()
            + BucketId.GetHashCode());
 }