public void PRECISION_Report_Printed()
        {
            var transport      = PriceDependencies.GetExpense("Transport", new PercentageCost(0.03M));
            var currencyFormat = new NumberFormatInfo {
                CurrencySymbol = "USD", CurrencyPositivePattern = 3
            };

            priceModifiersBuilder = new ProductModifiersBuilder()
                                    .WithDiscount(universalDiscount)
                                    .WithTax(taxPercent21)
                                    .WithExpense(transport)
                                    .WithDiscount(specialDiscountSpecificForProduct)
                                    .WithMultiplicativeCalculation()
                                    .WithCurrencyFormat(currencyFormat);

            var priceResult = priceCalculator.GetPriceResultForProduct(product, priceModifiersBuilder);

            var expected = @"Cost = 20.25 USD " +
                           "Tax = 4.25 USD " +
                           "Discounts = 4.24 USD " +
                           "Transport = 0.61 USD " +
                           "TOTAL = 20.87 USD";

            var actual = priceResult.ToString().CleanseString();

            Assert.Equal(expected, actual);
        }
        public void Product_Price_With_Additive_Discount_Calculation()
        {
            priceModifiersBuilder = new ProductModifiersBuilder()
                                    .WithDiscount(universalDiscount)
                                    .WithTax(taxPercent21)
                                    .WithDiscount(specialDiscountSpecificForProduct)
                                    .WithExpense(packaging)
                                    .WithExpense(transport)
                                    .WithAdditiveCalculation();

            var priceResult = priceCalculator.GetPriceResultForProduct(product, priceModifiersBuilder);

            var expectedPrice = new Money(22.44M);
            var actual        = priceResult.Total;

            Assert.Equal(expectedPrice, actual);
        }
        public void Product_Price_With_Additional_Precision()
        {
            var transport = PriceDependencies.GetExpense("Transport", new PercentageCost(0.03M));

            priceModifiersBuilder = new ProductModifiersBuilder()
                                    .WithDiscount(universalDiscount)
                                    .WithTax(taxPercent21)
                                    .WithExpense(transport)
                                    .WithDiscount(specialDiscountSpecificForProduct)
                                    .WithMultiplicativeCalculation();

            var priceResult = priceCalculator.GetPriceResultForProduct(product, priceModifiersBuilder);

            var expectedPrice = new Money(20.87M);
            var actual        = priceResult.Total;

            Assert.Equal(expectedPrice, actual);
        }
        public void CURRENCY_Report_Printed()
        {
            var currencyFormatGbp = new NumberFormatInfo {
                CurrencySymbol = "GBP", CurrencyPositivePattern = 3
            };

            priceModifiersBuilder = new ProductModifiersBuilder()
                                    .WithTax(taxPercent20)
                                    .WithCurrencyFormat(currencyFormatGbp);

            var priceResult = priceCalculator.GetPriceResultForProduct(productGbp, priceModifiersBuilder);

            var expected = @"Cost = 17.76 GBP " +
                           "Tax = 3.55 GBP " +
                           "TOTAL = 21.31 GBP";

            var actual = priceResult.ToString().CleanseString();

            Assert.Equal(expected, actual);
        }
        public void COMBINING_Report_Printed()
        {
            priceModifiersBuilder = new ProductModifiersBuilder()
                                    .WithTax(taxPercent21)
                                    .WithDiscount(universalDiscount)
                                    .WithDiscount(specialDiscountSpecificForProduct)
                                    .WithMultiplicativeCalculation()
                                    .WithExpense(packaging, transport);

            var priceResult = priceCalculator.GetPriceResultForProduct(product, priceModifiersBuilder);

            var expected = @"Cost = $20.25 " +
                           "Tax = $4.25 " +
                           "Discounts = $4.24 " +
                           "Packaging = $0.20 " +
                           "Transport = $2.2 " +
                           "TOTAL = $22.66";

            var actual = priceResult.ToString().CleanseString();

            Assert.Equal(expected, actual);
        }