public void ApplyingTaxThatValueEqualsZeroShouldResultInFinalPriceThatIsEqualToPreferredPriceOfProductAfterThatCalculateFinalPriceIsCalled()
        {
            var productWithPreferredPrice = Product()
                                            .WithCategoryId((int)ProductCategoryEnum.Clothing).WithPreferredPrice(PreferredPrice)
                                            .Build();

            void StandardCalculateFinalPriceCall() => Algorithm.CalculateFinalPrice(productWithPreferredPrice, _state, 1);

            Assert.That(StandardCalculateFinalPriceCall, DoesNotThrow.An <ArgumentOutOfRangeException>());
            var finalPrice = productWithPreferredPrice.FinalPrice;

            Assert.That(finalPrice, Is.EqualTo(PreferredPrice));
        }
        public void CalculateFinalPriceShouldUpdateProperlyFinalPriceOfProduct()
        {
            var state   = State().AddTax().OfCategoryId((int)ProductCategoryEnum.Clothing).OfTaxRate(10).ConfirmTax().Build();
            var product = Product().WithCategoryId((int)ProductCategoryEnum.Clothing).WithPurchasePrice(20)
                          .WithPreferredPrice(PreferredPriceOf40).Build();

            void StandardCalculateFinalPriceCall() => Algorithm.CalculateFinalPrice(product, state, 1);

            Assert.That(StandardCalculateFinalPriceCall, DoesNotThrow.An <ArgumentOutOfRangeException>());

            var finalPrice = product.FinalPrice;

            Assert.That(finalPrice, Is.EqualTo(FinalPriceOf36));
        }