public async Task ShouldInsertConditionCompletion_WhenPassedConditionCompletionIsNull() { // Arrange var customerId = Guid.NewGuid().ToString("D"); var campaignId = Guid.NewGuid().ToString("D"); var conditionId = Guid.NewGuid().ToString("D"); var data = new Dictionary <string, string> { { "key", "value" } }; var conditionCompletionRepositoryMock = new Mock <IConditionCompletionRepository>(MockBehavior.Strict); conditionCompletionRepositoryMock .Setup(c => c.InsertAsync(It.IsAny <ConditionCompletion>())) .ReturnsAsync(Guid.NewGuid()); var service = new ConditionCompletionService(conditionCompletionRepositoryMock.Object); // Act await service.IncreaseOrCreateAsync( customerId, null, data, new Condition { CampaignId = campaignId, Id = conditionId.ToString() }); // Assert conditionCompletionRepositoryMock.Verify(c => c.InsertAsync(It.Is <ConditionCompletion>(x => x.IsCompleted == false && x.CampaignId == campaignId && x.CurrentCount == 1 && x.ConditionId == conditionId)), Times.Once); }
public async Task ShouldIncreaseCompletionCount_WhenPassedConditionCompletionIsNotCompletedYet() { // Arrange var customerId = Guid.NewGuid().ToString("D"); var campaignId = Guid.NewGuid().ToString("D"); var conditionId = Guid.NewGuid().ToString("D"); var data = new Dictionary <string, string> { { "key", "value" } }; var conditionCompletion = new ConditionCompletion { Id = Guid.NewGuid().ToString(), CurrentCount = 1 }; var conditionCompletionRepositoryMock = new Mock <IConditionCompletionRepository>(MockBehavior.Strict); conditionCompletionRepositoryMock .Setup(c => c.IncreaseCompletionCountAsync(It.IsAny <Guid>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <int>())) .Returns(Task.CompletedTask); conditionCompletionRepositoryMock .Setup(c => c.GetConditionCompletion(It.IsAny <Guid>())) .ReturnsAsync(conditionCompletion); var service = new ConditionCompletionService(conditionCompletionRepositoryMock.Object); // Act await service.IncreaseOrCreateAsync( customerId, conditionCompletion, data, new Condition { CampaignId = campaignId, Id = conditionId.ToString(), CompletionCount = 2 }); // Assert conditionCompletionRepositoryMock.Verify(c => c.IncreaseCompletionCountAsync(It.IsAny <Guid>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <int>()), Times.Once); conditionCompletionRepositoryMock.Verify(c => c.GetConditionCompletion(It.IsAny <Guid>()), Times.Once); conditionCompletionRepositoryMock.Verify(c => c.InsertAsync(It.IsAny <ConditionCompletion>()), Times.Never); conditionCompletionRepositoryMock.Verify(c => c.SetConditionCompletedAsync(It.IsAny <Guid>()), Times.Never); }
public async Task ShouldNotCompleteConditionCompletion_WhenConditionCompletionNullRewardRatioIsPassed() { // Arrange var customerId = Guid.NewGuid().ToString("D"); var campaignId = Guid.NewGuid().ToString("D"); var conditionId = Guid.NewGuid().ToString("D"); var paymentId = Guid.NewGuid().ToString(); var newData = new Dictionary <string, string> { { PurchaseCompletionPercentage, "40" }, { "PaymentId", paymentId } }; var condition = new Condition { CampaignId = campaignId, Id = conditionId, CompletionCount = 1, RewardHasRatio = true, RewardRatio = new RewardRatioAttribute() { Ratios = new List <RatioAttribute>() { new RatioAttribute() { Order = 1, RewardRatio = 20m, PaymentRatio = 10m, Threshold = 10m }, new RatioAttribute() { Order = 2, PaymentRatio = 10m, RewardRatio = 20m, Threshold = 20m }, new RatioAttribute() { Order = 3, PaymentRatio = 70m, RewardRatio = 70m, Threshold = 100m }, } } }; var conditionCompletionRepositoryMock = new Mock <IConditionCompletionRepository>(MockBehavior.Strict); conditionCompletionRepositoryMock .Setup(c => c.InsertAsync(It.IsAny <ConditionCompletion>())) .ReturnsAsync(Guid.NewGuid()); var service = new ConditionCompletionService(conditionCompletionRepositoryMock.Object); // Act var conditionUpdated = await service.IncreaseOrCreateAsync( customerId, null, newData, condition); var updatedData = conditionUpdated.Data.FirstOrDefault(); var result = JsonConvert.DeserializeObject <Dictionary <string, string> >(updatedData.Values.FirstOrDefault()); // Assert conditionCompletionRepositoryMock.Verify(c => c.IncreaseCompletionCountAsync(It.IsAny <Guid>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <int>()), Times.Never); conditionCompletionRepositoryMock.Verify(c => c.GetConditionCompletion(It.IsAny <Guid>()), Times.Never); conditionCompletionRepositoryMock.Verify(c => c.SetConditionCompletedAsync(It.IsAny <Guid>()), Times.Never); conditionCompletionRepositoryMock.Verify(c => c.UpdateAsync(It.IsAny <ConditionCompletion>()), Times.Never); conditionCompletionRepositoryMock.Verify(c => c.InsertAsync(It.IsAny <ConditionCompletion>()), Times.Once); Assert.NotNull(updatedData); Assert.Equal("40", result[PurchaseCompletionPercentage]); Assert.Equal("0", result[GivenRatioBonusPercent]); }