public float Parse(List <SKUItems> listSKU)
        {
            float    totalCost      = 0;
            SKUItems eligibleItems1 = listSKU.Where(t => t.sKU.GetType() == offerSKU1.GetType()).FirstOrDefault();
            SKUItems eligibleItems2 = listSKU.Where(t => t.sKU.GetType() == offerSKU2.GetType()).FirstOrDefault();

            int maxEqual = 0;

            if (eligibleItems1 != null && eligibleItems2 != null)
            {
                if (eligibleItems1.count < eligibleItems2.count)
                {
                    maxEqual = eligibleItems1.count;
                    listSKU.Remove(eligibleItems1);
                    listSKU.Where(t => t == eligibleItems2).FirstOrDefault().count -= maxEqual;
                }
                else if (eligibleItems2.count < eligibleItems1.count)
                {
                    maxEqual = eligibleItems2.count;
                    listSKU.Remove(eligibleItems2);
                    listSKU.Where(t => t == eligibleItems1).FirstOrDefault().count -= maxEqual;
                }
                else
                {
                    maxEqual = eligibleItems2.count;
                    listSKU.Remove(eligibleItems1);
                    listSKU.Remove(eligibleItems2);
                }
            }
            totalCost = maxEqual * cost;
            return(totalCost);
        }
        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);
        }
 //Add or Update SKUItem
 public void AddOrUpdateSKUItem(SKUItem sKUItem)
 {
     if (SKUItems == null)
     {
         SKUItems = new List <SKUItem>();
     }
     else if (SKUItems.Exists(obj => obj.SKUId == sKUItem.SKUId))
     {
         SKUItems.ForEach(obj =>
         {
             if (obj.SKUId == sKUItem.SKUId)
             {
                 obj.UnitPrice = sKUItem.UnitPrice;
             }
         });
     }
     else
     {
         SKUItems.Add(sKUItem);
     }
 }
        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);
        }
 //Get a SKU by SKUId
 public SKUItem GetSKUItem(string SKUId) => SKUItems.FirstOrDefault(obj => obj.SKUId.ToLower() == SKUId.ToLower());
Beispiel #7
0
 public OrderHelper(SKUItems skuItem, int quantity)
 {
     _skuItem  = skuItem;
     _quantity = quantity;
 }