public void ShouldInitialisePrice( Price price) { PortionOfChips sut = new PortionOfChips(price); sut.Price.Should().Be(price); }
public IEnumerable <Discount> CalculateDiscounts(IEnumerable <IProduct> products) { if (products is null) { throw new ArgumentNullException(nameof(products)); } IEnumerable <Pie> pies = products.OfType <Pie>(); IEnumerable <PortionOfChips> portionsOfChips = products.OfType <PortionOfChips>(); // A discount is only applied if a pie and a portion of chips exist, so find the minimum amount of each and batch them up. int totalDiscounts = Math.Min(pies.Count(), portionsOfChips.Count()); List <Discount> discounts = new List <Discount>(); for (int i = 0; i < totalDiscounts; i++) { Pie pie = pies.ElementAt(i); PortionOfChips portionOfChips = portionsOfChips.ElementAt(i); decimal discountValue = (pie.Price + portionOfChips.Price) * (this.DiscountPercent / 100.0m); discounts.Add(new Discount(new Price(discountValue), pie, portionOfChips)); } return(discounts); }
public void NoPieShouldNotBeIncludedInDiscount( PieAndChipsMealDealDiscount sut) { PortionOfChips portionOfChips = new PortionOfChips(new PriceFaker().Generate()); IEnumerable <Discount> results = sut.CalculateDiscounts(new[] { portionOfChips }); results.Should().BeEmpty(); }
public void PieAndPortionOfChipsShouldBeDiscounted( PieAndChipsMealDealDiscount sut) { PriceFaker priceFaker = new PriceFaker(); Pie pie = new Pie(priceFaker.Generate(), LocalDate.MaxIsoValue); PortionOfChips portionOfChips = new PortionOfChips(priceFaker.Generate()); IEnumerable <Discount> results = sut.CalculateDiscounts(new IProduct[] { pie, portionOfChips }); Price expectedDicountPrice = new Price((pie.Price + portionOfChips.Price) * (sut.DiscountPercent / 100.0m)); results.Should().Contain(new Discount(expectedDicountPrice, pie, portionOfChips)); }
public void BasketShouldTotalNumberOfPortionsOfChips( int numberOfBags, decimal totalCost, [Frozen(Matching.ImplementedInterfaces)] DiscountService discountService, Basket basket) { for (int i = 0; i < numberOfBags; i++) { PortionOfChips portionOfChips = new PortionOfChips(new Price(1.80m)); basket.Add(portionOfChips); } basket.TotalCost.Should().Be(totalCost); }