public void BookPlaceAsyncWithValidParametersExpectPlaceBooked() { UzContext context = _uzClient.GetUZContextAsync().Result; TrainsResponse trainsResponse = GetTrains(context, KievStationId, LvovStatinId, DateTime.Today.AddDays(DaysOffset)); TrainsResponse.Train train = trainsResponse.Trains.First(); WagonsResponse wagonsResponse = _uzClient.GetWagonsAsync(context, KievStationId, LvovStatinId, train.StationFrom.DateTime, train.TrainNumber, train.TrainType, train.Wagons.First().TypeCode).Result; WagonsResponse.Wagon wagon = wagonsResponse.Wagons.First(); PlacesResponse placesResponse = GetPlaces(context, KievStationId, LvovStatinId, train.StationFrom.DateTime, train.TrainNumber, wagon.Number, wagon.CoachClass, wagon.CoachType); BookPlacesResponse bookPlaceResult = BookPlace(context, KievStationId, LvovStatinId, DateTime.Today.AddDays(DaysOffset), train.TrainNumber, wagon.Number, wagon.CoachClass, wagon.TypeCode, placesResponse.Places.First(), placesResponse.PlaceType, "Валера", "Топор"); Assert.IsFalse(bookPlaceResult.IsError); }
public async void Check() { UzContext uzContext = await _uzClient.GetUZContextAsync(); Request[] requests = GetRequests(); Console.WriteLine($"Checking requests: {requests.Length}"); foreach (Request request in requests) { TicketCheckResult checkResult = await CheckTicket(uzContext, request); switch (checkResult.RequestState) { case RequestState.Expired: { NotifyExpired(request); break; } case RequestState.Found: { BookPlacesResponse bookingResult = await _ticketBooker.BookPlacesAsync(uzContext, checkResult, request); if (!bookingResult.IsError) { NotifyFoundAsync(bookingResult, request); } Console.WriteLine(checkResult); break; } } } }
public async Task <BookPlacesResponse> BookPlaceAsync(UzContext context, int stationFromId, int stationToId, DateTime date, string trainNumber, int wagonNumber, string coachClass, string wagonTypeCode, int place, string placeType, string firstName, string lastName) { var content = new FormUrlEncodedContent( new Dictionary <string, string> { { "from", stationFromId.ToString() }, { "to", stationToId.ToString() }, { "date", date.ToString("yyyy-MM-dd") }, { "round_trip", "0" }, { "train", trainNumber.ToString() }, { "places[0][bedding]", "1" }, { "places[0][charline]", placeType }, { "places[0][child]", "" }, { "places[0][firstname]", firstName }, { "places[0][lastname]", lastName }, { "places[0][ord]", "0" }, { "places[0][place_num]", place.ToString() }, { "places[0][reserve]", "0" }, { "places[0][stud]", "" }, { "places[0][transportation]", "0" }, { "places[0][wagon_class]", coachClass }, { "places[0][wagon_num]", wagonNumber.ToString() }, { "places[0][wagon_type]", wagonTypeCode } }); BookPlacesResponse bookPlacesResponse = await ExecutePostRequestAsync(context, UrlBook, content, ResponseFormatter.FormatBookPlaces); bookPlacesResponse.Cookies = context.Cookie.OfType <Cookie>(). Where(cookie => cookie.Name.StartsWith(UzCookiePrefix)). ToDictionary(cookie => cookie.Name, cookie => cookie.Value); return(bookPlacesResponse); }
// POST api/wagons public async Task <IHttpActionResult> Post([FromBody] BookPlacesDto bookPlacesDto) { UzContext context = await UZ.GetUZContextAsync(); BookPlacesResponse places = await UZ.BookPlaceAsync(context, bookPlacesDto.StationFromId, bookPlacesDto.StationToId, bookPlacesDto.DateTime, bookPlacesDto.TrainNumber, bookPlacesDto.WagonNumber, bookPlacesDto.CoachClass, bookPlacesDto.WagonTypeCode, bookPlacesDto.Places[0], bookPlacesDto.PlaceType, "Serhii", "Kharchenko"); return(Json(places)); }
public async Task <BookPlacesResponse> BookPlacesAsync(UzContext uzContext, TicketCheckResult checkResult, Request request) { var uzClient = new UzClient(); Tuple <Train, Wagon> cheapestTrainAndWagon = GetCheapestTrainAndWagon(checkResult); Train train = cheapestTrainAndWagon.Item1; Wagon wagon = cheapestTrainAndWagon.Item2; BookPlacesResponse bookingResult = await uzClient.BookPlaceAsync(uzContext, train.StationFrom.Id, train.StationTo.Id, train.StationFrom.DateTime, train.TrainNumber, wagon.Number, wagon.CoachClass, wagon.TypeCode, wagon.Places.First(), wagon.PlaceType, request.PassangerName, request.PassangerSurname); return(bookingResult); }
private async void NotifyFoundAsync(BookPlacesResponse bookingResult, Request request) { var reservation = new Reservation { Token = Guid.NewGuid().ToString(), RequestId = request.Id, BookingTimestamp = DateTime.Now.Ticks, SessionId = bookingResult.Cookies["_gv_sessid"] }; request.State = RequestState.Found; using (var uzDbContext = new UzDbContext()) { uzDbContext.Reservations.Add(reservation); uzDbContext.Entry(request).State = EntityState.Modified; uzDbContext.SaveChanges(); } Response mailSendingResponse = await MailSender.Send(request, reservation.Token, reservation.SessionId); }