public void CalculateFee(Basket basket) { var distinctBooks = basket.Books .GroupBy(b => b.BookId) .Select(b => b.First()) .ToList(); var distinctBooksCount = distinctBooks.Count(); distinctBooks.ForEach(b => basket.Books.Remove(basket.Books.First(x => x.BookId == b.BookId))); basket.Fee += 100 * distinctBooksCount * _DiscountTable[distinctBooksCount]; if (basket.Books.Count > 0) { CalculateFee(basket); } }
public void CalculateFeeTest_Buy_One_Book1_One_Book2_One_Book3_One_book4_One_book5_Should_Get_Fee_375() { PotterShoppingCart target = new PotterShoppingCart(); var basket = new Basket { Books = new List<Book>() { new Book() { BookId = 1 }, new Book() { BookId = 2 }, new Book() { BookId = 3 }, new Book() { BookId = 4 }, new Book() { BookId = 5 } } }; target.CalculateFee(basket); var expected = 375; Assert.AreEqual(expected, basket.Fee); }
public void CalculateFeeTest_Buy_One_Book1_Should_Get_Fee_100() { PotterShoppingCart target = new PotterShoppingCart(); var basket = new Basket { Books = new List<Book>() { new Book() { BookId = 1 } } }; target.CalculateFee(basket); var expected = 100; Assert.AreEqual(expected, basket.Fee); }