public void LocationZipCodeValidation_whiteSpace()
        {
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);

            validLocation.ZipCode = "   ";
            Assert.Throws <ArgumentException>(() => calculator.TaxRatesForLocation(validLocation), "The Location's zipcode is required");
        }
        public void CalculateTaxesCreatesNamedClient()
        {
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);

            calculator.CalculateTaxesForOrder(validOrder);
            clientFactory.Verify(f => f.CreateClient("TaxJar"), Times.Once);
        }
        public void CalculateTaxesReturnsNullOnExceptionThrown()
        {
            SetupNamedClientToThrow();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var taxInfo    = calculator.CalculateTaxesForOrder(validOrder);

            Assert.IsNull(taxInfo);
        }
        public void CalculateTaxesReturnsNullOnBadRequest()
        {
            SetupNamedClientWithFailingAnswer();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var taxInfo    = calculator.CalculateTaxesForOrder(validOrder);

            Assert.IsNull(taxInfo);
        }
        public void CalculateTaxesReturnsTaxesObject()
        {
            SetupNamedClientWithFakeAnswerForCalculateTaxes();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var taxInfo    = calculator.CalculateTaxesForOrder(validOrder);

            Assert.IsTrue(CompareAllProperties(fakeOrderTax.ToOrderTaxInfo(), taxInfo));
        }
        public void ReturnsNullOnExceptionThrown()
        {
            SetupNamedClientToThrow();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var rates      = calculator.TaxRatesForLocation(validLocation);

            Assert.IsNull(rates);
        }
        public void ReturnsNullOnBadRequest()
        {
            SetupNamedClientWithFailingAnswer();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var rates      = calculator.TaxRatesForLocation(validLocation);

            Assert.IsNull(rates);
        }
        public void ReturnsRatesObject()
        {
            SetupNamedClientWithFakeAnswer();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);
            var rates      = calculator.TaxRatesForLocation(validLocation);

            Assert.IsTrue(CompareAllProperties(fakeRates.ToTaxRatesInfo(), rates), "Rates are not equal");
        }
        public void CreatesNamedClient()
        {
            SetupNamedClientWithFakeAnswer();
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);

            calculator.TaxRatesForLocation(validLocation);
            clientFactory.Verify(f => f.CreateClient("TaxJar"), Times.Once);
        }
        public void CalculateTaxesChecksValidationMessages()
        {
            validOrder.To.State = null;
            clientFactory.Setup(f => f.CreateClient(It.IsAny <string>())).Returns(new HttpClient());
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);

            Assert.Throws <ArgumentException>(() => calculator.CalculateTaxesForOrder(validOrder));
            clientFactory.Verify(f => f.CreateClient(It.IsAny <string>()), Times.Never);
        }
        public void CanCreate()
        {
            var calculator = new TaxJarTaxCalculator(clientFactory.Object);

            Assert.NotNull(calculator);
        }