public void GetQueryStringParams_EmptyLocation_ShouldFaild()
        {
            var location = new Location();

            var locationRequestBuilder = new LocationRequestBuilder(location);

            Assert.Throws <ArgumentException>(() => locationRequestBuilder.GetQueryStringParams());
        }
        public void GetQueryStringParams_ValidLocation_ShouldWork(string zip, string street, string city, string state, string country, string expected)
        {
            var location = new Location {
                ZIP = zip, Street = street, City = city, State = state, Country = country
            };

            var locationRequestBuilder = new LocationRequestBuilder(location);

            var queryString = locationRequestBuilder.GetQueryStringParams();

            Assert.Equal(expected, queryString);
        }
        public void GetQueryStringParams_EmptyZipLocation_ShouldFaild()
        {
            var location = new Location {
                ZIP = "", Street = "312 Hurricane Lane", City = "Williston", State = "CA", Country = Constants.COUNTRY_US
            };

            var locationRequestBuilder = new LocationRequestBuilder(location);

            Action act = () => locationRequestBuilder.GetQueryStringParams();

            var exception = Assert.Throws <ArgumentException>(act);

            Assert.Equal("The Zip Code is required.", exception.Message);
        }
Esempio n. 4
0
        public async Task <RatesResponse> GetTaxRateByLocation(Location location)
        {
            if (location == null)
            {
                throw new ArgumentNullException("Location");
            }

            var queryString = new LocationRequestBuilder(location).GetQueryStringParams();

            var url = $"{GetRatesURL()}{queryString}";

            HttpClient httpClient = InitializeHttpClient();

            HttpResponseMessage streamResponse = null;

            try
            {
                streamResponse = await httpClient.GetAsync(url);

                streamResponse.EnsureSuccessStatusCode();

                string responseContent = await streamResponse.Content.ReadAsStringAsync();

                return(responseContent.DeserializeAs <RatesResponse>());
            }
            catch (Exception ex)
            {
                var message = ex.Message;

                if (streamResponse != null)
                {
                    string responseContent = await streamResponse.Content.ReadAsStringAsync();

                    var errorResponse = responseContent.DeserializeAs <TaxJarErrorResponse>();

                    message = $"Error: {errorResponse.Error}. Details: {errorResponse.Detail}.";
                }

                throw new TaxServiceCalculatorException($"Error calculating rates. {message}");
            }
        }