Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
                }
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        // 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));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }