Example #1
0
            public void ShouldInitialisePrice(
                Price price)
            {
                PortionOfChips sut = new PortionOfChips(price);

                sut.Price.Should().Be(price);
            }
Example #2
0
        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));
            }
Example #5
0
        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);
        }