Пример #1
0
        public async Task RecalculateAsync_HasPromoRewards_CalculateTotalsCalled()
        {
            // Arrange
            var cartAggregate = GetValidCartAggregate();

            cartAggregate.Cart.Items = new List <LineItem> {
                _fixture.Create <LineItem>()
            };

            var context = new PromotionEvaluationContext();

            var promoResult = new PromotionResult();
            var promoReward = new StubPromotionReward
            {
                Id      = _fixture.Create <string>(),
                IsValid = true
            };

            promoResult.Rewards.Add(promoReward);

            _mapperMock.Setup(x => x.Map <PromotionEvaluationContext>(It.Is <CartAggregate>(x => x == cartAggregate)))
            .Returns(context);

            _marketingPromoEvaluatorMock
            .Setup(x => x.EvaluatePromotionAsync(It.Is <PromotionEvaluationContext>(x => x == context)))
            .ReturnsAsync(promoResult);

            // Act
            var result = await cartAggregate.RecalculateAsync();

            // Assert
            _shoppingCartTotalsCalculatorMock.Verify(x => x.CalculateTotals(It.Is <ShoppingCart>(x => x == cartAggregate.Cart)), Times.Once);
        }
Пример #2
0
        public async Task EvaluatePromotionsAsync_HasCart_PromotionEvaluated()
        {
            // Arrange
            var cartAggregate = GetValidCartAggregate();

            cartAggregate.Cart.Items = new List <LineItem> {
                _fixture.Create <LineItem>()
            };

            var context = new PromotionEvaluationContext();

            var promoResult = new PromotionResult();
            var promoReward = new StubPromotionReward
            {
                Id      = _fixture.Create <string>(),
                IsValid = true
            };

            promoResult.Rewards.Add(promoReward);

            _mapperMock.Setup(x => x.Map <PromotionEvaluationContext>(It.Is <CartAggregate>(x => x == cartAggregate)))
            .Returns(context);

            _marketingPromoEvaluatorMock
            .Setup(x => x.EvaluatePromotionAsync(It.Is <PromotionEvaluationContext>(x => x == context)))
            .ReturnsAsync(promoResult);

            // Act
            var result = await cartAggregate.EvaluatePromotionsAsync();

            // Assert
            result.Rewards.Should().ContainSingle(x => x.Id == promoReward.Id);
        }