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\"]}}"); }
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)); }
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)); }
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))); }
public override int GetHashCode() { return(TrainId.GetHashCode() + BagId.GetHashCode() + BucketId.GetHashCode()); }