public void TestConditionalDiscoun_NoDiscount()
        {
            cart.AddProduct(store, 1, 2, false);
            cart.AddProduct(store, 2, 2, false);
            PurchaseBasket basket      = cart.GetBasket(store);
            DiscountPolicy discountplc = new ConditionalBasketDiscount(preCondition: preConditionsDict[CommonStr.DiscountPreConditions.NoDiscount], discount: 0);
            double         discount    = discountplc.CalcDiscount(basket);
            double         expected    = 0;

            Assert.AreEqual(expected, discount);
        }
        public void TestConditionalDiscount_MinItemsAtBasket()
        {
            cart.AddProduct(store, 1, 1, false);
            cart.AddProduct(store, 2, 2, false);
            PurchaseBasket basket      = cart.GetBasket(store);
            DiscountPolicy discountplc = new ConditionalBasketDiscount(preCondition: preConditionsDict[CommonStr.DiscountPreConditions.NumUnitsInBasketAboveEqX], discount: 20, minUnitsAtBasket: 2);
            double         discount    = discountplc.CalcDiscount(basket);
            double         expected    = 1090 * 2;

            Assert.AreEqual(expected, discount);
        }
        public void TestConditionalDiscount_BasketPrdouctPriceAboveX()
        {
            cart.AddProduct(store, 1, 2, false);
            cart.AddProduct(store, 2, 2, false);
            PurchaseBasket basket      = cart.GetBasket(store);
            DiscountPolicy discountplc = new ConditionalBasketDiscount(preCondition: preConditionsDict[CommonStr.DiscountPreConditions.BasketProductPriceAboveEqX], discount: 10, minProductPrice: 10000);
            double         discount    = discountplc.CalcDiscount(basket);
            double         expected    = 2000;

            Assert.AreEqual(expected, discount);
        }
        public void TestCompundDiscountPolicy_XOR()
        {
            cart.AddProduct(store, 1, 1, false);
            cart.AddProduct(store, 2, 7, false);
            PurchaseBasket basket = cart.GetBasket(store);

            DiscountPolicy minItemsBasketPolicy  = new ConditionalBasketDiscount(preCondition: preConditionsDict[CommonStr.DiscountPreConditions.NumUnitsInBasketAboveEqX], discount: 20, minUnitsAtBasket: 7);
            DiscountPolicy MinUnitsProductPolicy = new ConditionalProductDiscount(preCondition: preConditionsDict[CommonStr.DiscountPreConditions.NumUnitsOfProductAboveEqX], discount: 30, minUnits: 1, productId: 1);

            List <DiscountPolicy> policies_lst = new List <DiscountPolicy>();

            policies_lst.Add(minItemsBasketPolicy);
            policies_lst.Add(MinUnitsProductPolicy);
            DiscountPolicy compundDiscount = new CompundDiscount(CommonStr.DiscountMergeTypes.XOR, policies_lst);
            double         discount        = compundDiscount.CalcDiscount(basket);
            double         expected        = 3000;

            Assert.AreEqual(expected, discount);
        }