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); }
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; }