コード例 #1
0
        private Prize PrizeSomeBooks(CollectionBooks bookList, Prize price = null)
        {
            if (price == null)
            {
                price = new Prize(0);
            }

            if (bookList == null || !bookList.Any())
            {
                return(price);
            }

            //separamos los libros en lista de libros distintos
            var newBookCol = new CollectionBooks();

            foreach (var book in bookList.GetCollectionBooks())
            {
                if (!newBookCol.HasBook(book))
                {
                    newBookCol.AddBook(book.Clone());
                }
            }

            //aplicamos el descuento a un grupo de libros distintos
            ApplyDiscount(newBookCol, _colDiscountRules);

            //sumamos los precios de los libros con los descuentos
            price = price.AddPriceBook(newBookCol.SumPrize());

            //eliminamos los libros que ya hemos procesado
            var colRemovedProcesed = bookList.RemoveCollection(newBookCol);

            //recursividad con libros que faltan por procesar y el precio acumulado
            return(PrizeSomeBooks(colRemovedProcesed, price));
        }
コード例 #2
0
        private void ApplyDiscount(CollectionBooks bookList, CollectionDiscountRules _colDiscountRules)
        {
            var numBooksDistinct = bookList.NumBooksDistinct();

            var discount = _colDiscountRules.GetDiscountRuleByNumBooks(numBooksDistinct);

            bookList.ApplyDiscount(discount);
        }
コード例 #3
0
ファイル: TestBasics.cs プロジェクト: dielop101/KataPotterZgz
        public void TestBookByType(int idBook)
        {
            var bookList = new CollectionBooks();
            var book     = new Book(idBook, prizeConstant);

            bookList.AddBook(book);

            Assert.Equal(new Prize(8), potterService.PrizeBooks(bookList));
        }
コード例 #4
0
        public Prize PrizeBooks(CollectionBooks bookList)
        {
            if (bookList.Any())
            {
                return(PrizeSomeBooks(bookList));
            }

            return(new Prize(0));
        }
コード例 #5
0
        public void TestZeroZeroOne()
        {
            var bookList = new CollectionBooks();
            var bookZero = new Book(0, prizeConstant);

            bookList.AddBook(bookZero);
            bookList.AddBook(bookZero);
            var bookOne = new Book(1, prizeConstant);

            bookList.AddBook(bookOne);

            Assert.Equal(new Prize(8 + (8 * 2 * 0.95)), potterService.PrizeBooks(bookList));
        }
コード例 #6
0
ファイル: TestBasics.cs プロジェクト: dielop101/KataPotterZgz
        public void TestBookCollection(int idBook, int numTimes)
        {
            var bookList = new CollectionBooks();
            var bookType = new Book(idBook, prizeConstant);

            for (var i = 0; i < numTimes; i++)
            {
                bookList.AddBook(bookType);
            }

            var prize = new Prize(8 * numTimes);

            Assert.Equal(prize, potterService.PrizeBooks(bookList));
        }
コード例 #7
0
        public void TestDiscountTreeDistinctBooks()
        {
            var bookList = new CollectionBooks();
            var book1    = new Book(0, prizeConstant);

            bookList.AddBook(book1);
            var book2 = new Book(2, prizeConstant);

            bookList.AddBook(book2);
            var book4 = new Book(4, prizeConstant);

            bookList.AddBook(book4);


            Assert.Equal(new Prize(8 * 3 * 0.9), potterService.PrizeBooks(bookList));
        }
コード例 #8
0
ファイル: TestBasics.cs プロジェクト: dielop101/KataPotterZgz
        public void TestNoneBook()
        {
            var bookList = new CollectionBooks();

            Assert.Equal(new Prize(0), potterService.PrizeBooks(bookList));
        }