Exemplo n.º 1
0
        public PromotionCart PromotionRules_3A(List <char> products)
        {
            PromotionCart promotionCartResult = new PromotionCart();

            while (true)
            {
                if (products.Count(x => x == 'A') >= 3)
                {
                    promotionCartResult.PromotedProduct     = "3 * A";
                    promotionCartResult.PromotionCartPrice += ApplicationConstants.A_3;
                    promotionCartResult.NumberOfTimes      += 1;
                    for (int i = 0; i < 3; i++)
                    {
                        products.Remove('A');
                    }
                }
                else
                {
                    break;
                }
            }
            promotionCartResult.RemainingProducts = products;

            return(promotionCartResult);
        }
        public void ShouldAcceptIfNoValuesInCart()

        {
            var cart = new PromotionCart
            {
                Products = null
            };
            var testObj = new PromotionEngineCalculator(cart, promtionRules);
            // ACT
            PromotionCart result = testObj.Run();

            // ASSERT
            result.TotalValue.Should().Be(0M);
        }
        public void ShouldPassScenario3()

        {  // ARRANGE
            var productA = new SKUItems {
                Price = 50m, SKUId = "A"
            };
            var productB = new SKUItems {
                Price = 30m, SKUId = "B"
            };
            var productC = new SKUItems {
                Price = 20m, SKUId = "C"
            };
            var productD = new SKUItems {
                Price = 15m, SKUId = "D"
            };

            using (StreamReader r = new StreamReader(@"Settings.json"))
            {
                string data = r.ReadToEnd();
                promtionRules = JsonConvert.DeserializeObject <List <PromotionRules> >(data);
            }
            var cart = new PromotionCart
            {
                Products = new List <SKUItems> {
                    productA, productA, productA,
                    productB, productB, productB, productB, productB,
                    productC,
                    productD
                }
            };



            var testObj = new PromotionEngineCalculator(cart, promtionRules);

            // ACT
            PromotionCart result = testObj.Run();

            // ASSERT
            const decimal expectedTotal = 280m;

            result.TotalValue.Should().Be(expectedTotal);
        }
        public void ShouldPassMultipleItemsofSameProductDiscApplied()

        {  // ARRANGE
            var productA = new SKUItems {
                Price = 50m, SKUId = "A"
            };
            var productB = new SKUItems {
                Price = 30m, SKUId = "B"
            };
            var productC = new SKUItems {
                Price = 20m, SKUId = "C"
            };
            var productD = new SKUItems {
                Price = 15m, SKUId = "D"
            };

            using (StreamReader r = new StreamReader(@"Settings.json"))
            {
                string data = r.ReadToEnd();
                promtionRules = JsonConvert.DeserializeObject <List <PromotionRules> >(data);
            }
            var cart = new PromotionCart
            {
                Products = new List <SKUItems> {
                    productA, productA, productA, productA, productA, productA, productA, productA, productA, productA, productA,
                    productB, productB, productB, productB, productB,
                    productD
                }
            };

            //11 ProductsA = 550 , 5 productB = 150 , 1   productD =15
            //  - 60 For 3 set Disc applied , 2 No Discount , -30 2 sets Disc applied
            var testObj = new PromotionEngineCalculator(cart, promtionRules);

            // ACT
            PromotionCart result = testObj.Run();

            // ASSERT
            const decimal expectedTotal = 625M;

            result.TotalValue.Should().Be(expectedTotal);
        }
        public void ShouldAcceptDeafultValues()

        {  // ARRANGE
            var productA = new SKUItems {
                Price = 0m, SKUId = "A"
            };
            var productB = new SKUItems {
                Price = 0m, SKUId = "B"
            };
            var productC = new SKUItems {
                Price = 0m, SKUId = "C"
            };
            var productD = new SKUItems {
                Price = 0m, SKUId = "D"
            };


            var cart = new PromotionCart
            {
                Products = new List <SKUItems> {
                    productA, productA, productA,
                    productB, productB, productB, productB, productB,
                    productC,
                    productD
                }
            };



            var testObj = new PromotionEngineCalculator(cart, promtionRules);

            // ACT
            PromotionCart result = testObj.Run();

            // ASSERT
            const decimal expectedTotal = 0M;

            result.TotalValue.Should().Be(expectedTotal);
        }
Exemplo n.º 6
0
        public PromotionCart PromotionRules_CD(List <char> products)
        {
            PromotionCart promotionCartResult = new PromotionCart();

            while (true)
            {
                if (products.Any(x => x == 'C') && products.Any(x => x == 'D'))
                {
                    promotionCartResult.PromotedProduct     = "C & D";
                    promotionCartResult.PromotionCartPrice += ApplicationConstants.C_D;
                    promotionCartResult.NumberOfTimes      += 1;

                    products.Remove('C');
                    products.Remove('D');
                }
                else
                {
                    break;
                }
            }
            promotionCartResult.RemainingProducts = products;

            return(promotionCartResult);
        }
 public PromotionEngineCalculator(PromotionCart promoCart, List <PromotionRules> promotionRules)
 {
     _promoCart     = promoCart;
     _promtionRules = promotionRules;
 }