public void TestIfMultiplePromotionsAddedForSameItemOnlyFirstIsTaken() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount, _appleGroupDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(2, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); Assert.AreEqual(1, basket.Basket[0].Discount.ThresholdQuantity); Assert.AreEqual(.5M, basket.Basket[0].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[0].Discount.TotalDiscountAmount); }
public void TestBasketSubtractFromTotalLessThanZero() { BasketItemModel basketItemApple = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(basketItemApple); basket.AddOrUpdateBasket(basketItemApple); Assert.AreEqual(2, basket.Total); basket.SubtractFromTotal(3); Assert.AreEqual(0, basket.Total); }
public void TestAddNewItemAndUpdateBasket() { BasketItemModel basketItem = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(basketItem); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(1, basket.Total); basket.AddOrUpdateBasket(basketItem); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(2, basket.Total); }
public void TestAddThreeUniqueItemsToBasket() { BasketItemModel basketItemApple = new BasketItemModel(_apple); BasketItemModel basketItemBanana = new BasketItemModel(_banana); BasketItemModel basketItemOrange = new BasketItemModel(_orange); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(basketItemApple); basket.AddOrUpdateBasket(basketItemBanana); basket.AddOrUpdateBasket(basketItemOrange); Assert.AreEqual(3, basket.Basket.Count); Assert.AreEqual(6, basket.Total); }
public void TestBasketItemMeetsPromotionThreshold() { List <PromotionModel> promotions = new List <PromotionModel> { _orangeBuyOneGetOneHalfOff }; BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(orangeBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(3, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Orange", basket.Basket[0].ItemName); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); }
public void TestApplyingSamePromotionTwiceToBasketWithSameTwoItems() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(1, basket.Basket.Count); Assert.AreEqual(2, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual(1M, basket.Basket[0].Discount.TotalDiscountAmount); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); }
public void TestApplyingOnePromotionToBasketWithTwoDifferentItems() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount }; BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(2, basket.Basket.Count); Assert.AreEqual(3, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.IsTrue(basket.Basket[1].Discount == null); Assert.AreEqual("Orange", basket.Basket[1].ItemName); Assert.AreEqual(0.5M, basket.Basket[0].Discount.TotalDiscountAmount); }
public void TestApplyingMultiplePromotionsToMultipleBasketItems() { List <PromotionModel> promotions = new List <PromotionModel> { _appleDiscount, _orangeBuyOneGetOneHalfOff, _bananaGroupDiscountOnThree }; BasketItemModel orangeBasketItem = new BasketItemModel(_orange); BasketItemModel appleBasketItem = new BasketItemModel(_apple); BasketItemModel bananaBasketItem = new BasketItemModel(_banana); BasketModel basket = new BasketModel(); basket.AddOrUpdateBasket(appleBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(orangeBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(bananaBasketItem); basket.AddOrUpdateBasket(appleBasketItem); IPromotionService promotionService = new PromotionService(); promotionService.ApplyPromotionsToBasket(basket, promotions); Assert.AreEqual(3, basket.Basket.Count); Assert.AreEqual(7, basket.Total); Assert.IsTrue(basket.Basket[0].Discount != null); Assert.AreEqual("Apple", basket.Basket[0].ItemName); Assert.AreEqual(2, basket.Basket[0].ItemQuantity); Assert.AreEqual(1, basket.Basket[0].Discount.ThresholdQuantity); Assert.AreEqual(.5M, basket.Basket[0].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[0].Discount.TotalDiscountAmount); Assert.IsTrue(basket.Basket[1].Discount != null); Assert.AreEqual("Orange", basket.Basket[1].ItemName); Assert.AreEqual(2, basket.Basket[1].ItemQuantity); Assert.AreEqual(2, basket.Basket[1].Discount.ThresholdQuantity); Assert.AreEqual(1, basket.Basket[1].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[1].Discount.TotalDiscountAmount); Assert.IsTrue(basket.Basket[2].Discount != null); Assert.AreEqual("Banana", basket.Basket[2].ItemName); Assert.AreEqual(3, basket.Basket[2].ItemQuantity); Assert.AreEqual(3, basket.Basket[2].Discount.ThresholdQuantity); Assert.AreEqual(1, basket.Basket[2].Discount.DiscountAmount); Assert.AreEqual(1, basket.Basket[2].Discount.TotalDiscountAmount); }
/// <summary> /// Takes the user input basket and adds the item to the GroceryKiosk BasketModel. /// </summary> /// <param name="userBasket"></param> /// <param name="kioskItems"></param> /// <returns></returns> public static BasketModel GetItemAndAddOrUpdateBasket(string[] userBasket, List <ItemModel> kioskItems) { BasketModel basket = new BasketModel(); foreach (var itemName in userBasket) { ItemModel item = kioskItems.FirstOrDefault( x => string.Equals(x.ItemName, itemName, StringComparison.CurrentCultureIgnoreCase)); if (item == null) { continue; } BasketItemModel basketItem = new BasketItemModel(item); basket.AddOrUpdateBasket(basketItem); } return(basket); }