Ejemplo n.º 1
0
        public void Verify_PricingRule_DiscountOfYPriceForXItems()
        {
            var adFactory = new AdFactory();

            var pricingRule1 = new DiscountOfYForXItems(typeof(PremiumAd), 15m, 4);

            var pricingRules = new List <IPricingRule>();

            pricingRules.Add(pricingRule1);

            var checkout = new Domain.Checkout(pricingRules);

            var item1 = adFactory.CreateAd(typeof(PremiumAd));

            var item2 = adFactory.CreateAd(typeof(PremiumAd));

            var item3 = adFactory.CreateAd(typeof(PremiumAd));

            var item4 = adFactory.CreateAd(typeof(PremiumAd));

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);
            checkout.Add(item4);

            var total = checkout.Total();

            Assert.Equal(1519.96m, total);
        }
Ejemplo n.º 2
0
        public void Verify_DoublePricingRule_Discount()
        {
            var adFactory = new AdFactory();

            var pricingRule1 = new DiscountPricingRule(typeof(StandoutAd), 22.99m);
            var pricingRule2 = new DiscountPricingRule(typeof(ClassicAd), 69.99m);

            var pricingRules = new List <IPricingRule>();

            pricingRules.Add(pricingRule1);
            pricingRules.Add(pricingRule2);

            var checkout = new Domain.Checkout(pricingRules);

            var item1 = adFactory.CreateAd(typeof(StandoutAd));

            var item2 = adFactory.CreateAd(typeof(ClassicAd));

            checkout.Add(item1);
            checkout.Add(item2);

            var total = checkout.Total();

            Assert.Equal(500, total);
        }
Ejemplo n.º 3
0
        public void Verify_MixedPricingRules_Deal_and_Discount()
        {
            var adFactory = new AdFactory();

            var pricingRule1 = new DiscountPricingRule(typeof(StandoutAd), 22.99m);
            var pricingRule2 = new GetXForYPricingRule(3, 2, typeof(ClassicAd));

            var pricingRules = new List <IPricingRule>();

            pricingRules.Add(pricingRule1);
            pricingRules.Add(pricingRule2);

            var checkout = new Domain.Checkout(pricingRules);

            var item1 = adFactory.CreateAd(typeof(StandoutAd));

            var item2 = adFactory.CreateAd(typeof(ClassicAd));

            var item3 = adFactory.CreateAd(typeof(ClassicAd));

            var item4 = adFactory.CreateAd(typeof(ClassicAd));

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);
            checkout.Add(item4);

            var total = checkout.Total();

            Assert.Equal(839.98m, total);
        }
Ejemplo n.º 4
0
        public void Verify_SinglePricingRule_DealPricing_DoubleDeals(int getAmount, int forAmount, Type adType, decimal expected)
        {
            var pricingRule = new GetXForYPricingRule(getAmount, forAmount, adType);

            var adFactory = new AdFactory();

            var checkout = new Domain.Checkout(new List <IPricingRule> {
                pricingRule
            });

            var item1 = adFactory.CreateAd(adType);

            var item2 = adFactory.CreateAd(adType);

            var item3 = adFactory.CreateAd(adType);

            var item4 = adFactory.CreateAd(adType);

            var item5 = adFactory.CreateAd(adType);

            var item6 = adFactory.CreateAd(adType);

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);
            checkout.Add(item4);
            checkout.Add(item5);
            checkout.Add(item6);

            var total = checkout.Total();

            Assert.Equal(expected, total);
        }
Ejemplo n.º 5
0
        public void Verify_AxilCustomer_Total(string name, decimal expected)
        {
            var adFactory = new AdFactory();

            var discountStrategyFactory = new DiscountStrategyFactory();

            var item1 = adFactory.CreateAd(typeof(StandoutAd));

            var item2 = adFactory.CreateAd(typeof(StandoutAd));

            var item3 = adFactory.CreateAd(typeof(StandoutAd));

            var item4 = adFactory.CreateAd(typeof(PremiumAd));

            var customer = new Customer(name);

            var discountStrategy = discountStrategyFactory.GetDiscountStrategy(customer);

            var pricingRules = discountStrategy.GetPricingRules();

            var checkout = new Domain.Checkout(pricingRules);

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);
            checkout.Add(item4);

            Assert.Equal(expected, checkout.Total());
        }
Ejemplo n.º 6
0
        public void Verify_NoPricingRules_OneTypeAds_TotalPrice()
        {
            var adFactory = new AdFactory();
            var checkout  = new Domain.Checkout();

            var item1 = adFactory.CreateAd(typeof(ClassicAd));
            var item2 = adFactory.CreateAd(typeof(ClassicAd));

            checkout.Add(item1);
            checkout.Add(item2);

            var total = checkout.Total();

            Assert.Equal(539.98m, total);
        }
Ejemplo n.º 7
0
        public void Verify_Ads_Count()
        {
            var adFactory = new AdFactory();
            var checkout  = new Domain.Checkout();

            var item1 = adFactory.CreateAd(typeof(ClassicAd));
            var item2 = adFactory.CreateAd(typeof(ClassicAd));

            checkout.Add(item1);
            checkout.Add(item2);

            var count = checkout.Items.Count;

            Assert.Equal(2, count);
        }
Ejemplo n.º 8
0
        public void Verify_NoPricingRules_MultipleTypeAds_TotalPrice()
        {
            var adFactory = new AdFactory();
            var checkout  = new Domain.Checkout();

            var item1 = adFactory.CreateAd(typeof(ClassicAd));
            var item2 = adFactory.CreateAd(typeof(StandoutAd));
            var item3 = adFactory.CreateAd(typeof(PremiumAd));

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);

            var total = checkout.Total();

            Assert.Equal(987.97m, total);
        }
Ejemplo n.º 9
0
        public void Verify_Ads_Description()
        {
            var adFactory = new AdFactory();
            var checkout  = new Domain.Checkout();

            var item1 = adFactory.CreateAd(typeof(ClassicAd));
            var item2 = adFactory.CreateAd(typeof(StandoutAd));
            var item3 = adFactory.CreateAd(typeof(PremiumAd));

            checkout.Add(item1);
            checkout.Add(item2);
            checkout.Add(item3);

            Assert.Equal("Offers the most basic level of advertisement", checkout.Items[0].Description);
            Assert.Equal("Allows advertisers to use a company logo and use a longer presentation text", checkout.Items[1].Description);
            Assert.Equal("Same benefits as Standout Ad, but also puts the advertisement at the top of the results, allowing higher visibility", checkout.Items[2].Description);
        }
Ejemplo n.º 10
0
        public void should_apply_bulk_buy_discount_when_percentage_and_multi_buy_can_be_applied_to_product()
        {
            var productsToReturn = new Dictionary <char, Product>
            {
                {
                    'A', new Product('A', 50m, new List <IOffer>
                    {
                        new BulkBuyOffer(3, 130),
                        new PercentageOffer(50m, 0.8m)
                    })
                }
            };
            decimal totalPrice = new Domain.Checkout(
                new FakeRepository(productsToReturn)).CalculatePriceFor("AAA");

            Assert.That(totalPrice, Is.EqualTo(130m));
        }
Ejemplo n.º 11
0
        public void should_apply_percentage_discount_to_unit_price(
            string shoppingBasketContents, decimal expectedPrice)
        {
            var productA = new Product('A', 50m, new List <IOffer>
            {
                new PercentageOffer(50m, 0.9m),
            });
            var products = new Dictionary <char, Product>
            {
                {
                    productA.Sku, productA
                }
            };

            decimal totalPrice = new Domain.Checkout(
                new FakeRepository(products)).CalculatePriceFor(shoppingBasketContents);

            Assert.That(totalPrice, Is.EqualTo(expectedPrice));
        }
Ejemplo n.º 12
0
        public void Verify_SinglePricingRule_Discount(Type type, decimal discount, decimal expected)
        {
            var adFactory = new AdFactory();

            var pricingRule = new DiscountPricingRule(type, discount);

            var checkout = new Domain.Checkout(new List <IPricingRule> {
                pricingRule
            });

            var item1 = adFactory.CreateAd(type);

            var item2 = adFactory.CreateAd(type);

            checkout.Add(item1);
            checkout.Add(item2);

            var total = checkout.Total();

            Assert.Equal(expected, total);
        }
Ejemplo n.º 13
0
        public void should_calculate_price_for_different_products_when_the_basket_contains_different_items()
        {
            var productsToReturn = new Dictionary <char, Product>
            {
                {
                    'A', new Product('A', 50m,
                                     new List <IOffer> {
                        new BulkBuyOffer(3, 130),
                    })
                },
                {
                    'B', new Product('B', 40m,
                                     new List <IOffer> {
                        new BulkBuyOffer(2, 80),
                    })
                }
            };
            decimal totalPrice = new Domain.Checkout(
                new FakeRepository(productsToReturn)).CalculatePriceFor("AB");

            Assert.That(totalPrice, Is.EqualTo(90m));
        }