Beispiel #1
0
        public void MultipleProducts_Mocks()
        {
            // Arrange
            var cart = A.Fake <ICart>();

            A.CallTo(() => cart.Products).Returns(new [] {
                new ProductToPurchase {
                    ProductId = 1, Quantity = 1
                },
                new ProductToPurchase {
                    ProductId = 42, Quantity = 7
                },
            });

            IProductCatalog mockProductCatalog = A.Fake <IProductCatalog>();

            A.CallTo(() => mockProductCatalog.LookupPrice(1)).Returns(1m);
            A.CallTo(() => mockProductCatalog.LookupPrice(42)).Returns(1.5m);

            ITaxCalculator mockTaxCalculator = A.Fake <ITaxCalculator>();

            A.CallTo(() => mockTaxCalculator.CalculateTaxes(11.5m)).Returns(1.15m);

            // Act
            var            calculator = new PricingCalculator(mockProductCatalog, mockTaxCalculator);
            PricingSummary price      = calculator.PriceCart(cart);

            // Assert
            Assert.That(price.ProductPrices.Count, Is.EqualTo(2));
            Assert.That(price.SubTotal, Is.EqualTo(11.5m));
            Assert.That(price.Taxes, Is.EqualTo(1.15m));
            Assert.That(price.Total, Is.EqualTo(12.65m));
        }
Beispiel #2
0
        public void Setup()
        {
            var pricingRules = new List <IPriceRule>
            {
                new EachPriceRule(),
                new WeightPriceRule()
            };

            var pricingCalculator = new PricingCalculator(pricingRules);

            _cart = new CartService(pricingCalculator);
        }
Beispiel #3
0
        public void PricingCalculator_Calculate_Args_Null_Items()
        {
            // ARRANGE
            var calculator = new PricingCalculator();

            // ACT
            Exception ex = Assert.Throws <ArgumentNullException>(
                () => calculator.Calculate(null));

            // ASSERT
            Assert.Equal("Value cannot be null. (Parameter 'items')", ex.Message);
        }
Beispiel #4
0
        public void CalculatePricing_When_No_Promotions()
        {
            // ARRANGE
            var cart       = TestData.Cart1;
            var calculator = new PricingCalculator();

            // ACT
            var result = calculator.Calculate(cart);

            // ASSERT
            Assert.Equal(24.77M, result.TotalPrice);
            Assert.Equal(0M, result.TotalDiscount);
            Assert.Equal(result.TotalPrice, result.TotalPriceToPay);
        }
Beispiel #5
0
        public void CalculatePricing_With_BuyALotGetADiscount_Promotion()
        {
            // ARRANGE
            var cart = TestData.Cart1;

            var calculator = new PricingCalculator();

            // ACT
            var result = calculator.Calculate(
                cart,
                new BuyALotGetADiscountPromotion(3, 2) // buy at least 3 items and get 2% of discount
                );

            // ASSERT
            Assert.Equal(24.77M, result.TotalPrice);
            Assert.Equal(0.4954M, result.TotalDiscount);
            Assert.Equal(result.TotalPriceToPay, result.TotalPrice - result.TotalDiscount);
        }
Beispiel #6
0
        public void CalculatePricing_With_Buy3GetOneFree_Promotion()
        {
            // ARRANGE
            var cart = TestData.Cart1;

            var calculator = new PricingCalculator();

            // ACT
            var result = calculator.Calculate(
                cart,
                new BuyManyGetSomeFreePromotion(3, 1, "kg", new Guid(TestData.ApplesSku)) // get 1kg of apples free for each 3kg (buy 3 get 1 free)
                );

            // ASSERT
            Assert.Equal(24.77M, result.TotalPrice);
            Assert.Equal(1.55M, result.TotalDiscount);
            Assert.Equal(result.TotalPriceToPay, result.TotalPrice - result.TotalDiscount);
        }
Beispiel #7
0
        public void CalculatePricing_With_Two_Promotions()
        {
            // ARRANGE
            var cart = TestData.Cart1;

            var calculator = new PricingCalculator();

            // ACT
            var result = calculator.Calculate(
                cart,
                new BuyManyGetSomeFreePromotion(3, 1, "kg", new Guid(TestData.ApplesSku)), // get 1kg of apples free for each 3kg (buy 3 get 1 free)
                new BuyALotGetADiscountPromotion(3, 2)                                     // buy at least 3 items and get 2% of discount
                );

            // ASSERT
            Assert.Equal(24.77M, result.TotalPrice);
            Assert.Equal(2.0454M, result.TotalDiscount);
            Assert.Equal(result.TotalPriceToPay, result.TotalPrice - result.TotalDiscount);
        }
Beispiel #8
0
        public void MissingPrice2()
        {
            var cart = new Cart();

            cart.IncludeProduct(1, 1);
            cart.IncludeProduct(42, 7);

            var catalog = new ProductCatalog();

            catalog.SetPrice(1, 1m);

            var taxCalculator = new PercentageTaxCalculatorStub(0.1m);

            var            calculator = new PricingCalculator(catalog, taxCalculator);
            PricingSummary price      = calculator.PriceCart2(cart);

            Assert.That(price.ProductPrices.Count, Is.EqualTo(1));
            Assert.That(price.SubTotal, Is.EqualTo(1m));
            Assert.That(price.Taxes, Is.EqualTo(0.1m));
            Assert.That(price.Total, Is.EqualTo(1.1m));
        }
 public void Setup()
 {
     pricingCalculator = new PricingCalculator();
 }