public async Task FindLocationAsync_ValidUKAddressWithUserLocation_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByAddressParameters();

            parameters.Address             = new GeoAddress();
            parameters.Address.AddressLine = "Kings Road";
            //parameters.UserLocation = GeoPoint.Create(51.504360719046616, -0.12600176611298197);

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.GreaterThan(0));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "addressLine"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "addressLine").Value, Is.EqualTo(parameters.Address.AddressLine));
            //Assert.That(request.Parameters.Find(x => x.Name == "userLocation"), Is.Not.Null);
            //Assert.That(request.Parameters.Find(x => x.Name == "userLocation").Value, Is.EqualTo(parameters.UserLocation.ToString()));
        }
        public async Task FindLocationAsync_ValidUKAddress2_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByAddressParameters();

            parameters.Address = new GeoAddress();
            parameters.Address.CountryRegion = "GB";
            parameters.Address.PostalCode    = "SW1A 2AA";

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.GreaterThan(0));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "countryRegion"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "countryRegion").Value, Is.EqualTo(parameters.Address.CountryRegion));
            Assert.That(request.Parameters.Find(x => x.Name == "postalCode"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "postalCode").Value, Is.EqualTo(parameters.Address.PostalCode));
        }
        public async Task FindLocationAsync_LocalityOnlyMaxResult10_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByAddressParameters();

            parameters.MaxResults       = new MaxResults(10);
            parameters.Address          = new GeoAddress();
            parameters.Address.Locality = "Greenville";

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.EqualTo(10));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "locality"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "locality").Value, Is.EqualTo(parameters.Address.Locality));
            Assert.That(request.Parameters.Find(x => x.Name == "maxRes"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "maxRes").Value, Is.EqualTo("10"));
        }
        public async Task FindLocationAsync_ValidUSAddressIncludingPostalCode_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByAddressParameters();

            parameters.Address = GeoAddress.CreateAddress(
                "1 Microsoft Way",
                "Redmond",
                "WA",
                "98052",
                "US");

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().First().Name, Is.EqualTo("1 Microsoft Way, Redmond, WA 98052"));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "adminDistrict"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "adminDistrict").Value, Is.EqualTo(parameters.Address.AdminDistrict));
            Assert.That(request.Parameters.Find(x => x.Name == "locality"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "locality").Value, Is.EqualTo(parameters.Address.Locality));
            Assert.That(request.Parameters.Find(x => x.Name == "postalCode"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "postalCode").Value, Is.EqualTo(parameters.Address.PostalCode));
            Assert.That(request.Parameters.Find(x => x.Name == "addressLine"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "addressLine").Value, Is.EqualTo(parameters.Address.AddressLine));
            Assert.That(request.Parameters.Find(x => x.Name == "countryRegion"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "countryRegion").Value, Is.EqualTo(parameters.Address.CountryRegion));
        }
        public async Task FindLocationAsync_ValidUSAddressWithNeighborhood_ValidLocation()
        {
            IRestRequest request     = null;
            var          serviceMock = new Mock <BingLocations>();

            serviceMock.Setup(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()))
            .Callback <IRestRequest>(r => request = r)
            .CallBase();
            var service    = serviceMock.Object;
            var parameters = new FindLocationByAddressParameters();

            parameters.Address               = new GeoAddress();
            parameters.IncludeNeighborhood   = IncludeNeighborhood.Include;
            parameters.Address.Locality      = "Ballard";
            parameters.Address.AdminDistrict = "WA";
            parameters.Address.CountryRegion = "US";

            var response = await service.FindLocationAsync(parameters);

            serviceMock.Verify(zc => zc.ExecuteAsync <Response>(It.IsAny <IRestRequest>()), Times.Once);
            Assert.That(response, Is.Not.Null);
            Assert.That(response.ResourceSets.Length, Is.GreaterThan(0));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(), Is.EqualTo(1));
            Assert.That(response.ResourceSets.First().Resources.OfType <Location>().Count(p => p.EntityType == "Neighborhood"), Is.EqualTo(1));
            Assert.That(request, Is.Not.Null);
            Assert.That(request.Method, Is.EqualTo(Method.GET));
            Assert.That(request.Resource, Is.EqualTo("Locations"));
            Assert.That(request.Parameters.Find(x => x.Name == "version"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "key"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "o"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "c"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "locality"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "locality").Value, Is.EqualTo(parameters.Address.Locality));
            Assert.That(request.Parameters.Find(x => x.Name == "inclnb"), Is.Not.Null);
            Assert.That(request.Parameters.Find(x => x.Name == "inclnb").Value, Is.EqualTo("1"));
        }