public void TestSpecialDiscountEngineStrategy_CrazySalesDayFirstTier()
        {
            _marketingCampaignMock.IsCrazySalesDay().Returns(true);
            _marketingCampaignMock.IsActive().Returns(false);

            var itemDiscountStrategy =
                _engineDiscountStrategy.GetDiscountStrategy(Arg.Any <Money>(), _marketingCampaignMock);

            Assert.True(itemDiscountStrategy.GetType().Name == typeof(FirstTierDiscountStrategy).Name);
        }
        public IItemDiscountStrategy GetDiscountStrategy(Money price, IMarketingCampaign marketingCampaign)
        {
            if (marketingCampaign.IsCrazySalesDay())
            {
                return(new FirstTierDiscountStrategy());
            }

            if (price > Money.OneThousand)
            {
                return(new SecondTierDiscountStrategy());
            }

            if (price > Money.OneHundred && marketingCampaign.IsActive())
            {
                return(new ThirdTierDiscountStrategy());
            }

            return(new NoDiscountStrategy());
        }
예제 #3
0
        public static IDiscount Create(IMarketingCampaign campaign, IMoney money)
        {
            if (campaign.IsCrazySalesDay())
            {
                return(new DiscountCrazySalesDay());
            }

            if (money.IsMoreThanOneThousand())
            {
                return(new DiscountOneThousand());
            }

            if (money.IsMoreThanOneHundred() && campaign.IsActive())
            {
                return(new DiscountOneHundred());
            }

            return(new DiscountNoDiscount());
        }