Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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]);
        }