public void HotelListRequestWithAllInclusiveFilter()
        {
            // Arrange
            HotelListRequest hotelListRequest = new HotelListRequest();
            hotelListRequest.City = "London";
            hotelListRequest.CountryCode = "UK";
            hotelListRequest.PropertyCategories = new List<PropertyCategory>();
            hotelListRequest.PropertyCategories.Add(PropertyCategory.AllInclusive); // Return all that are Inclusive

            // Act
            HotelListResponse hotelListResponse = expediaService.GetHotelActiveList(hotelListRequest);

            // Assert
            if (hotelListResponse.HotelList != null)
            {
                if (hotelListResponse.HotelList.HotelSummary != null)
                {
                    foreach (var summary in hotelListResponse.HotelList.HotelSummary)
                    {
                        Console.WriteLine((PropertyCategory)summary.PropertyCategory);

                        Assert.That(hotelListRequest.PropertyCategories.Contains((PropertyCategory)summary.PropertyCategory));
                    }
                }
            }
        }
        public void HotelListRequestMethodOneUk()
        {
            // Arrange
            HotelListRequest hotelListRequest = new HotelListRequest();
            hotelListRequest.City = "London";
            hotelListRequest.CountryCode = "UK";

            // Act
            HotelListResponse hotelListResponse = expediaService.GetHotelActiveList(hotelListRequest);

            // Assert
            Assert.That(hotelListResponse.HotelList.HotelSummary.Any());
        }
        public void HotelListRequestMethodOneUs()
        {
            // Arrange
            HotelListRequest hotelListRequest = new HotelListRequest();
            hotelListRequest.City = "New York";
            hotelListRequest.CountryCode = "US";
            hotelListRequest.StateProvinceCode = "NY";

            // Act
            HotelListResponse hotelListResponse = expediaService.GetHotelActiveList(hotelListRequest);

            // Assert
            Assert.That(hotelListResponse.HotelList.HotelSummary.Any());
        }
        public void HotelListRequestBasicAvailability()
        {
            // Arrange
            HotelListRequest hotelListRequest = new HotelListRequest();
            hotelListRequest.City = "London";
            hotelListRequest.CountryCode = "UK";
            hotelListRequest.ArrivalDate = new DateTime(2013, 02, 07);
            hotelListRequest.DepartureDate = new DateTime(2013, 03, 07);
            hotelListRequest.RoomGroup = new List<Room>();
            hotelListRequest.RoomGroup.Add(new Room {NumberOfAdults = 1, NumberOfChildren = 0});
            hotelListRequest.RoomGroup.Add(new Room {NumberOfAdults = 2, NumberOfChildren = 2, ChildAges = new List<int> {14, 16}});

            // Act
            //HotelListResponse hotelListResponse = expediaService.GetHotelAvailabilityList(hotelListRequest);

            // Assert
            //Assert.That(hotelListResponse.HotelList.HotelSummary.Any());
        }
 public abstract HotelListResponse GetHotelAvailabilityList(HotelListRequest hotelListRequest);
 public abstract HotelListResponse GetHotelActiveList(HotelListRequest hotelListRequest);
        public ActionResult Index(SearchViewModel model)
        {
            if (model.RoomViewModels.Take(model.NumberOfBedrooms).Any(room => !room.Adults.HasValue && !room.Children.HasValue))
            {
                ModelState.AddModelError("RoomViewModels", "Adults and Children required");
            }

            if (ModelState.IsValid)
            {
                try
                {
                    // Build the request

                    HotelListRequest request = new HotelListRequest();

                    // Arriving on...
                    request.ArrivalDate = new DateTime(model.CheckinDate.Year, model.CheckinDate.Month, model.CheckinDate.Day);
                    // Departing on...
                    request.DepartureDate = new DateTime(model.CheckoutDate.Year, model.CheckoutDate.Month, model.CheckoutDate.Day);

                    // At this address
                    request.City = model.City;
                    request.StateProvinceCode = model.Province;
                    request.CountryCode = model.Country;

                    // Or this location
                    request.DestinationString = model.Destination;

                    // Or hotels around this destination
                    request.DestinationId = model.DestinationId;

                    // With ratings of the following
                    request.MaxStarRating = model.MaximumStarRating;
                    request.MinStarRating = model.MinimumStarRating;

                    // And to cater this many rooms/adults/children
                    request.NumberOfBedRooms = model.NumberOfBedrooms;
                    request.RoomGroup = model.RoomViewModels
                        .Where(room => room.Adults > 0 || room.Children > 0)
                        .Select(room => new Room()
                        {
                            NumberOfAdults = room.Adults.HasValue ? room.Adults.Value : 0,
                            NumberOfChildren = room.Children.HasValue ? room.Children.Value : 0,
                            ChildAges = room.AgeViewModels.Select(a => a.Age != null ? a.Age.Value : 0).ToList(),
                        })
                        .ToList();

                    // Sort the request by prices
                    request.Sort = "PRICE";

                    // Hotel should have these chosen amenities in the results
                    if (model.Amenities != null)
                    {
                        request.Amenities = model.Amenities.Select(a => (Amenity)Enum.Parse(typeof(Amenity), Convert.ToString(a))).ToList();
                    }

                    // Hotel should be this kind of property
                    if (model.PropertyCategories != null)
                    {
                        request.PropertyCategories = model.PropertyCategories.Select(c => (PropertyCategory)Enum.Parse(typeof(PropertyCategory), Convert.ToString(c))).ToList();
                    }

                    // Response
                    HotelListResponse response = _expediaService.GetHotelAvailabilityList(request);

                    if (response.EanWsError != null)
                    {
                        Error(response.EanWsError.PresentationMessage);
                        return View(model);
                    }

                    Session["Search"] = model;
                    Session["Response"] = response;
                    Session["DestinationId"] = model.DestinationId;
                    Session["CustomerSessionId"] = response.CustomerSessionId;
                    Session["MoreResultsAvailable"] = response.MoreResultsAvailable;
                    Session["CacheKey"] = response.CacheKey;
                    Session["CacheLocation"] = response.CacheLocation;

                    return RedirectToAction("Results", "Search");
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.Message);
                }
            }
            return View(model);
        }
        public ActionResult Results(string cacheLocation, string cacheKey, int? page, string sortOrder, string currentFilter, string searchString)
        {
            if (Session["Response"] != null)
            {
                if (Request.Url != null)
                {
                    Session["ResultUrl"] = Request.Url.PathAndQuery;
                }

                HotelListResponse hotelListResponse = Session["Response"] as HotelListResponse;

                if (hotelListResponse != null)
                {
                    // This is where we update our current list of results with more from the remote ip with the specific key
                    if (cacheKey != null && cacheLocation != null)
                    {
                        HotelListRequest request = new HotelListRequest();
                        request.CacheKey = cacheKey;
                        request.CacheLocation = cacheLocation;

                        var pagedResponseResults = _expediaService.GetHotelAvailabilityList(request);

                        Session["CustomerSessionId"] = pagedResponseResults.CustomerSessionId;
                        Session["MoreResultsAvailable"] = pagedResponseResults.MoreResultsAvailable;
                        Session["CacheKey"] = pagedResponseResults.CacheKey;
                        Session["CacheLocation"] = pagedResponseResults.CacheLocation;

                        if (pagedResponseResults.HotelList != null && pagedResponseResults.HotelList.HotelSummary != null)
                        {
                            // Append paged results
                            hotelListResponse.HotelList.HotelSummary.AddRange(pagedResponseResults.HotelList.HotelSummary);
                        }
                    }

                    IEnumerable<HotelSummary> hotelSummaries = hotelListResponse.HotelList.HotelSummary;
                    ViewBag.SortOrder = sortOrder;
                    ViewBag.CurrentFilter = searchString;

                    // Filtering
                    if (!String.IsNullOrEmpty(searchString))
                    {
                        hotelSummaries = hotelSummaries.Where(s => s.Name.ToUpper().Contains(searchString.ToUpper()));
                    }

                    // Sorting
                    switch (sortOrder)
                    {
                        case "Price desc":
                            hotelSummaries = hotelSummaries
                                .OrderByDescending(s => s.HighRate)
                                .ThenByDescending(s => s.HotelRating);

                            break;

                        case "Price asce":
                            hotelSummaries = hotelSummaries
                                .OrderBy(s => s.HighRate)
                                .ThenByDescending(s => s.HighRate);

                            break;

                        case "Rating desc":
                            hotelSummaries = hotelSummaries
                                .OrderByDescending(s => s.HotelRating)
                                .ThenByDescending(s => s.HighRate);

                            break;

                        case "Rating asce":
                            hotelSummaries = hotelSummaries
                                .OrderBy(s => s.HotelRating)
                                .ThenByDescending(s => s.HighRate);

                            break;

                        default:
                            hotelSummaries = hotelSummaries
                                .OrderBy(s => s.Name)
                                .ThenByDescending(s => s.HighRate);

                            break;
                    }

                    int pageSize = 10;
                    int pageNumber = (page ?? 1);

                    IPagedList<HotelSummary> pagedList = hotelSummaries.ToPagedList(pageNumber, pageSize);

                    if (!pagedList.HasNextPage && (bool)Session["MoreResultsAvailable"])
                    {
                        string info = "<p>Hey, we have more results for you! Would you like to see more results?</p>";
                        info += "<br/>";
                        info += "<a class='btn btn-small btn-info btn-block'";
                        info += " href='" + Url.Action("Results", new { cacheKey = Session["CacheKey"], cacheLocation = Session["CacheLocation"], page = pagedList.PageNumber + 1 }) + "'";
                        info += ">Yes, I want to see more!</a>";

                        Information(new MvcHtmlString(info));
                    }

                    return View("Results", pagedList);
                }
            }
            return RedirectToAction("Index");
        }
 /// <summary>
 /// Fiddler URL Dump
 /// 
 /// </summary>
 /// <param name="hotelListRequest"></param>
 /// <returns></returns>
 public override HotelListResponse GetHotelActiveList(HotelListRequest hotelListRequest)
 {
     string path = PathFor("HotelListResponse.json");
     string content = Regex.Replace(File.ReadAllText(path), "");
     JsonDeserializer jsonDeserializer = new JsonDeserializer() { RootElement = "HotelListResponse" };
     HotelListResponse hotelListResponse = jsonDeserializer.Deserialize<HotelListResponse>(new RestResponse() {Content = content});
     return hotelListResponse;
 }
示例#10
0
        public void HotelListRequestWithAmenitiesFilter()
        {
            // Arrange
            HotelListRequest hotelListRequest = new HotelListRequest();
            hotelListRequest.City = "New York";
            hotelListRequest.CountryCode = "US";
            hotelListRequest.StateProvinceCode = "NY";

            hotelListRequest.Amenities = new List<Amenity>(){ Amenity.SwimmingPool };

            // Act
            HotelListResponse hotelListResponse = expediaService.GetHotelActiveList(hotelListRequest);

            // Assert
            if (hotelListResponse.HotelList != null)
            {
                if (hotelListResponse.HotelList.HotelSummary != null)
                {
                    foreach (var summary in hotelListResponse.HotelList.HotelSummary)
                    {
                        Console.WriteLine("Amenity Mask: " + summary.AmenityMask);
                        Console.WriteLine("Contained amenties: ");
                    }
                }
            }
        }