public void ApplyDiscount_FourMilk_OneFree()
        {
            var pricedProducts = new[]
            {
                new PricedProduct(ProductIdentifier.Milk, 1.15m),
                new PricedProduct(ProductIdentifier.Milk, 1.15m),
                new PricedProduct(ProductIdentifier.Milk, 1.15m),
                new PricedProduct(ProductIdentifier.Milk, 1.15m)
            };

            _offer.Apply(pricedProducts);

            Assert.Equal(4, pricedProducts.Length);
            Assert.True(pricedProducts.All(p => p.Identifier == ProductIdentifier.Milk));
            Assert.Equal(1, pricedProducts.Count(p => p.DiscountedPrice == 0));
            Assert.Equal(3, pricedProducts.Count(p => p.DiscountedPrice == 1.15m));
        }
예제 #2
0
        public void ApplyDiscount_TwoButters_ApplyDiscountToOneBread()
        {
            var pricedProducts = new[]
            {
                new PricedProduct(ProductIdentifier.Butter, 0.8m),
                new PricedProduct(ProductIdentifier.Butter, 0.8m),
                new PricedProduct(ProductIdentifier.Bread, 1m),
                new PricedProduct(ProductIdentifier.Bread, 1m)
            };

            _offer.Apply(pricedProducts);

            Assert.Equal(4, pricedProducts.Length);
            Assert.True(pricedProducts.All(p => p.Identifier == ProductIdentifier.Bread || p.Identifier == ProductIdentifier.Butter));
            Assert.Equal(1, pricedProducts.Count(p => p.Identifier == ProductIdentifier.Bread && p.DiscountedPrice == 0.5m));
            Assert.Equal(1, pricedProducts.Count(p => p.Identifier == ProductIdentifier.Bread && p.DiscountedPrice == 1));
            Assert.Equal(2, pricedProducts.Count(p => p.Identifier == ProductIdentifier.Butter && p.DiscountedPrice == 0.8m));
        }