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)); }
private void ApplyDiscount(CollectionBooks bookList, CollectionDiscountRules _colDiscountRules) { var numBooksDistinct = bookList.NumBooksDistinct(); var discount = _colDiscountRules.GetDiscountRuleByNumBooks(numBooksDistinct); bookList.ApplyDiscount(discount); }
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)); }
public Prize PrizeBooks(CollectionBooks bookList) { if (bookList.Any()) { return(PrizeSomeBooks(bookList)); } return(new Prize(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)); }
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)); }
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)); }
public void TestNoneBook() { var bookList = new CollectionBooks(); Assert.Equal(new Prize(0), potterService.PrizeBooks(bookList)); }