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