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); }
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); }