public void Voucher_with_category__basket_value_sufficient__category_total_less_than_voucher() { var product1 = new Product { Id = 1, Name = "Jumper", Price = 55.00M, Category = ProductCategory.Clothing }; var product2 = new Product { Id = 2, Name = "Head Light", Price = 3.50M, Category = ProductCategory.HeadGear }; var offerVoucher = new OfferVoucher { Name = "YYY-YYY", Discount = 5M, Threshold = 50, Category = ProductCategory.HeadGear }; var mock = new Mock <IProductService>(); mock.Setup(s => s.Get(1)).Returns(product1); mock.Setup(s => s.Get(2)).Returns(product2); var basket = new Basket(new GiftVoucherService(), mock.Object); basket.AddProduct(1); basket.AddProduct(2); basket.Voucher = offerVoucher; Assert.AreEqual(55M, basket.Total); Assert.IsNull(basket.Message); }
public void Multiple_Gift_vouchers_can_be_redeemed() { var product1 = new Product { Id = 1, Name = "Jumper", Price = 30M, Category = ProductCategory.Clothing }; var product2 = new Product { Id = 2, Name = "Suit", Price = 250M, Category = ProductCategory.Clothing }; var voucher1 = new GiftVoucher { Name = "XXX-XXX", Value = 50M }; var voucher2 = new GiftVoucher { Name = "ggg-ggg", Value = 25M }; var mock = new Mock <IProductService>(); mock.Setup(s => s.Get(1)).Returns(product1); mock.Setup(s => s.Get(2)).Returns(product2); var basket = new Basket(new GiftVoucherService(), mock.Object); basket.AddProduct(1); basket.AddProduct(2); basket.AddGiftVoucher(voucher1); basket.AddGiftVoucher(voucher2); Assert.AreEqual(205M, basket.Total); Assert.IsNull(basket.Message); }
public void Voucher_no_category__basket_value_insufficient_because_of_gift_voucher() { var product1 = new Product { Id = 1, Name = "Hat", Price = 25.00M, Category = ProductCategory.Clothing }; var product2 = new Product { Id = 2, Name = "aaa-aaa", Price = 50.00M, Category = ProductCategory.GiftVoucher }; var offerVoucher = new OfferVoucher { Name = "YYY-YYY", Discount = 5M, Threshold = 50 }; var mock = new Mock <IProductService>(); mock.Setup(s => s.Get(1)).Returns(product1); mock.Setup(s => s.Get(2)).Returns(product2); var basket = new Basket(new GiftVoucherService(), mock.Object); basket.AddProduct(1); basket.AddProduct(2); basket.Voucher = offerVoucher; Assert.AreEqual(75M, basket.Total); Assert.AreEqual("You have not reached the spend threshold for voucher YYY-YYY. Spend another �.01 to receive �00 discount from your basket total.", basket.Message); }
public void Basket4() { var product1 = new Product { Name = "Hat", Price = 25.00M, Category = ProductCategory.Clothing }; var product2 = new Product { Name = "Jumper", Price = 26M, Category = ProductCategory.Clothing }; var offerVoucher = new OfferVoucher { Name = "YYY-YYY", Discount = 5M, Threshold = 50 }; var giftVoucher = new GiftVoucher { Name = "XXX-XXX", Value = 5M }; var basket = new Basket(new GiftVoucherService(), new ProductService(new Data.ProductRepository())); basket.AddProduct(1); basket.AddProduct(4); basket.Voucher = offerVoucher; basket.AddGiftVoucher(giftVoucher); Assert.AreEqual(41M, basket.Total); Assert.IsNull(basket.Message); }
public void Basket3() { var product1 = new Product { Name = "Hat", Price = 25.00M, Category = ProductCategory.Clothing }; var product2 = new Product { Name = "Jumper", Price = 26M, Category = ProductCategory.Clothing }; var product3 = new Product { Name = "Head Light", Price = 3.5M, Category = ProductCategory.HeadGear }; var voucher = new OfferVoucher { Name = "YYY-YYY", Discount = 5M, Category = ProductCategory.HeadGear, Threshold = 50 }; var basket = new Basket(new GiftVoucherService(), new ProductService(new Data.ProductRepository())); basket.AddProduct(1); basket.AddProduct(4); basket.AddProduct(9); basket.Voucher = voucher; Assert.AreEqual(51M, basket.Total); Assert.IsNull(basket.Message); }
public void Gift_vouchers_can_only_be_redeemed_against_non_gift_voucher_products() { var product1 = new Product { Id = 1, Name = "Jumper", Price = 30M, Category = ProductCategory.Clothing }; var product2 = new Product { Id = 2, Name = "ggg-ggg", Price = 20M, Category = ProductCategory.GiftVoucher }; var voucher = new GiftVoucher { Name = "XXX-XXX", Value = 50M }; var mock = new Mock <IProductService>(); mock.Setup(s => s.Get(1)).Returns(product1); mock.Setup(s => s.Get(2)).Returns(product2); var basket = new Basket(new GiftVoucherService(), mock.Object); basket.AddProduct(1); basket.AddProduct(2); basket.AddGiftVoucher(voucher); Assert.AreEqual(50.00M, basket.Total); Assert.AreEqual("Gift vouchers can only be redeemed against non gift voucher products.", basket.Message); }
public void Voucher_with_category__basket_value_equals_threshold() { var product1 = new Product { Id = 1, Name = "Shirt", Price = 20.00M, Category = ProductCategory.Clothing }; var product2 = new Product { Id = 2, Name = "Shirt", Price = 30.00M, Category = ProductCategory.Clothing }; var offerVoucher = new OfferVoucher { Name = "YYY-YYY", Discount = 5M, Threshold = 50, Category = ProductCategory.Clothing }; var mock = new Mock <IProductService>(); mock.Setup(s => s.Get(1)).Returns(product1); mock.Setup(s => s.Get(2)).Returns(product2); var basket = new Basket(new GiftVoucherService(), mock.Object); basket.AddProduct(1); basket.AddProduct(2); basket.Voucher = offerVoucher; Assert.AreEqual(50M, basket.Total); Assert.AreEqual("You have not reached the spend threshold for voucher YYY-YYY. Spend another �01 to receive �00 discount from your basket total.", basket.Message); }
public void WhenItemsAddedBasketTotalPriceIsItemsPrice() { var basket = new Basket(); basket.AddProduct("hat1050", 1); basket.AddProduct("jumper2600", 1); Assert.Equal(36.50m, basket.TotalPrice); }
public void Basket1() { var basket = new Basket(); basket.AddProduct("hat1050", 1); basket.AddProduct("jumper5465", 1); basket.AddGiftVoucher("XXX-XXX", 1); Assert.Equal(60.15m, basket.TotalPrice); }
public void WhenTotalPriceOfferVoucherAddedBasketTotalPriceIsReduced() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("jumper2600", 1); basket.AddOfferVoucher("YYY-YYY"); Assert.Equal(46m, basket.TotalPrice); }
public void WhenNewItemAddedBasketContainsOldAndNewItem() { var basket = new Basket(); basket.AddProduct("hat1050", 1); basket.AddProduct("jumper2600", 1); Assert.Equal(1, basket.Items["hat1050"].Quantity); Assert.Equal(1, basket.Items["jumper2600"].Quantity); }
public void CalculateDiscount_TestAll() { //Arrange var basket = new Basket(); basket.AddProduct(TestData.ProductTwo); basket.AddProduct(TestData.ProductTwo); basket.AddProduct(TestData.ProductThree); basket.AddProduct(TestData.ProductFour); basket.AddProduct(TestData.ProductOne); basket.AddProduct(TestData.ProductOne); basket.AddProduct(TestData.ProductOne); basket.AddProduct(TestData.ProductOne); basket.AddProduct(TestData.ProductOne); var expectedResult = 20.481m; var basketDiscountManager = new BasketDiscountManager(TestData.AvailableDiscountRules, basket); //Action var result = basketDiscountManager.CalculateDiscount(); //Assert Assert.AreEqual(expectedResult, result); }
public void Basket2() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("jumper2600", 1); basket.AddGiftVoucher("YYY-YYY", 1); Assert.Equal(51.00m, basket.TotalPrice); Assert.Equal("There are no products in your basket applicable to voucher Voucher YYY-YYY .", basket.Message); }
public void WhenOfferVoucherAddedOnlyOneAdded() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("jumper2600", 2); basket.AddOfferVoucher("YYY-YYY"); basket.AddOfferVoucher("YYY-YYY"); Assert.Equal(72m, basket.TotalPrice); }
public void Basket5() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("gift3000", 1); basket.AddOfferVoucher("YYY-YYY"); Assert.Equal(55m, basket.TotalPrice); Assert.Equal("You have not reached the spend threshold for voucher YYY-YYY. Spend another £25.01 to receive £5.00 discount from your basket total.", basket.Message); }
public void Basket4() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("jumper2600", 1); basket.AddGiftVoucher("XXX-XXX", 1); basket.AddOfferVoucher("YYY-YYY"); Assert.Equal(41m, basket.TotalPrice); }
public void Basket3() { var basket = new Basket(); basket.AddProduct("hat2500", 1); basket.AddProduct("jumper2600", 1); basket.AddProduct("headlight350", 1); basket.AddGiftVoucher("YYY-YYY", 1); Assert.Equal(51.00m, basket.TotalPrice); }
public void GivenABasketWith2Bread2Butter_WhenTheTotalIsCalculated_ThenTheCorrectTotalIsReturned() { var basket = new Basket(); basket.AddProduct(ProductNames.BREAD, 2); basket.AddProduct(ProductNames.BUTTER, 2); var discounts = _discountService.GetDiscounts(basket.Items); var total = _basketService.Total(basket.Items, discounts); total.ShouldBe(3.1M); }
public void WhenProductsAreAdded_BasketShouldCalculateCorrectPrice() { var sut = new Basket(); //Given the basket has 1 bread, 1 butter and 1 milk sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Bread, 1); sut.AddProduct(ProductRepositoryMock.Butter, 1); //The total should be 2.95 Assert.Equal(2.95m, sut.Total); }
public void WhenMultipelApply_BasketShouldApplyMultipleDiscounts() { var sut = new Basket(new List <Offer> { OfferRepositoryMock.ButterOffer, OfferRepositoryMock.MilkOffer }); //Given the basket has 2 butter, 1 bread and 8 milk sut.AddProduct(ProductRepositoryMock.Butter, 2); sut.AddProduct(ProductRepositoryMock.Bread, 1); sut.AddProduct(ProductRepositoryMock.Milk, 8); //the total should be £9.00 Assert.Equal(9m, sut.Total); }
public void WhenSameProductIsAddedMultipeTimes_BasketShouldCalculateCorrectPrice() { var sut = new Basket(); //Given the basket has 1 bread, 1 butter, 1 milk and 1 milk sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Bread, 1); sut.AddProduct(ProductRepositoryMock.Butter, 1); //The total should be 4.10 Assert.Equal(4.10m, sut.Total); }
public void When2ButterAnd2BreadAreInTheBasket_BasketShouldReturnCorrectPrice() { var sut = new Basket(new List <Offer> { OfferRepositoryMock.ButterOffer }); //Given the basket has 2 butter and 2 bread sut.AddProduct(ProductRepositoryMock.Butter, 2); sut.AddProduct(ProductRepositoryMock.Bread, 2); //The total should be 3.10 Assert.Equal(3.10m, sut.Total); }
public void WhenProductsAddedMultipleTimes_DiscountIsCalculatedCorrectly() { var sut = new Basket(new List <Offer> { OfferRepositoryMock.ButterOffer, OfferRepositoryMock.MilkOffer }); //Given the basket contains 4 milk sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Milk, 1); sut.AddProduct(ProductRepositoryMock.Milk, 1); //The total should be 3.45 Assert.Equal(3.45m, sut.Total); }
public void Basket6() { ICategory headGearCategory = new Category("headgear"); IProduct jumper = new Product("jumper", new decimal(54.65)); IProduct headLight = new Product(headGearCategory, "head light", new decimal(3.50)); IBasket basket = new Basket(); basket.AddProduct(jumper, 1); basket.AddProduct(headLight, 1); Assert.AreEqual(58.15, basket.Total); }
public void GivenBreadProduct_WhenAddedTwiceToBasket_ThenBasketShoudHaveTwoBreads() { //Arrange var basket = new Basket(null); var bread = StaticProductCatalog.Bread; //Act basket.AddProduct(bread); basket.AddProduct(bread); //Assert Assert.AreEqual(2, basket.Items.Count); Assert.IsTrue(basket.Items.All(t => t == bread)); }
public void Basket1() { IProduct hat = new Product("hat", new decimal(10.50)); IProduct jumper = new Product("jumper", new decimal(54.65)); IDiscount giftCard = new GiftVoucher("XXX-XXX", new decimal(5.00)); IBasket basket = new Basket(); basket.AddProduct(hat, 1); basket.AddProduct(jumper, 1); basket.AddDiscount(giftCard); Assert.AreEqual(60.15, basket.Total); }
public void AddProductTest_AddTwo() { //Arrange var basket = new Basket(); //Action basket.AddProduct(TestData.ProductOne); basket.AddProduct(TestData.ProductTwo); var resultItem = basket.LineItems.FirstOrDefault(l => l.ProductId == TestData.ProductTwo.Id); //Asset Assert.AreEqual(basket.LineItems.Count, 2); Assert.IsNotNull(resultItem); Assert.AreEqual(resultItem.Count, 1); }
public void GivenTwoProducts_WhenAddedToBasket_ThenBasketContainsThem() { //Arrange var basket = new Basket(null); var butter = StaticProductCatalog.Butter; var milk = StaticProductCatalog.Milk; //Act basket.AddProduct(butter); basket.AddProduct(milk); //Assert Assert.AreEqual(2, basket.Items.Count); Assert.IsTrue(basket.Items.Contains(butter)); Assert.IsTrue(basket.Items.Contains(milk)); }
public void CalculateDiscount_Test2() { //Arrange var basket = new Basket(); basket.AddProduct(TestData.ProductTwo); basket.AddProduct(TestData.ProductTwo); var discountRule = new BuyXDiscount(TestData.ProductTwo, 1, 50); var expectedResult = 2.655m; //Action var result = discountRule.CalculateDiscount(basket); //Asset Assert.AreEqual(expectedResult, result); }
public void GivenBasketWithBreadAndButter_WhenTotalCalculated_ThenTotalShouldBeSumOfProductPrices() { //Arrange var basket = new Basket(new List <IOffer>()); var bread = StaticProductCatalog.Bread; var butter = StaticProductCatalog.Butter; basket.AddProduct(bread); basket.AddProduct(butter); //Act var total = basket.GetTotal(); //Assert Assert.AreEqual(bread.Price + butter.Price, total); }