public async Task TryToProcessReferralStakeTokensReservedEventEvent_MissingDataInEvent_NotProcessed
            (string referralId, string customerId, string campaignId)
        {
            var campaignResponseModel = new CampaignDetailResponseModel {
                Name = "campaign"
            };

            _campaignClientMock.Setup(x => x.History.GetEarnRuleByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(campaignResponseModel);

            _referralStakesRepoMock.Setup(x => x.AddReferralStakeAsync(It.IsAny <ReferralStakeDto>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var referralStakeDto = new ReferralStakeDto
            {
                AssetSymbol = TokenSymbol,
                Amount      = 1,
                CustomerId  = customerId,
                ReferralId  = referralId,
                CampaignId  = campaignId
            };

            var operationsService = CreateSutInstance();

            await operationsService.ProcessReferralStakeTokensReservationEventAsync(referralStakeDto);

            _referralStakesRepoMock.Verify(x => x.AddReferralStakeAsync(It.IsAny <ReferralStakeDto>()), Times.Never);
        }
        public async Task TryToProcessReferralStakeTokensReservedEventEvent_InvalidBalance_SuccessfullyProcessedWithWarning(long amount)
        {
            var campaignResponseModel = new CampaignDetailResponseModel {
                Name = "campaign"
            };

            _campaignClientMock.Setup(x => x.History.GetEarnRuleByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(campaignResponseModel);

            _referralStakesRepoMock.Setup(x => x.AddReferralStakeAsync(It.IsAny <ReferralStakeDto>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var bonus = new ReferralStakeDto
            {
                AssetSymbol = TokenSymbol,
                Amount      = amount,
                CustomerId  = "customerId",
                ReferralId  = FakeReferralId,
                CampaignId  = FakeCampaignId
            };

            var operationsService = CreateSutInstance();

            await operationsService.ProcessReferralStakeTokensReservationEventAsync(bonus);

            _referralStakesRepoMock.Verify();
        }
        public async Task TryToProcessBonusEvent_MissingDataInEvent_NotProcessed
            (string transactionId, string assetSymbol, string customerId, string type, string campaignId)
        {
            var campaignResponseModel = new CampaignDetailResponseModel {
                Name = "campaign"
            };

            _campaignClientMock.Setup(x => x.History.GetEarnRuleByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(campaignResponseModel);

            _bonusRepoMock.Setup(x => x.AddAsync(It.IsAny <BonusCashInDto>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var bonus = new BonusCashInDto
            {
                AssetSymbol   = assetSymbol,
                TransactionId = transactionId,
                Amount        = 100,
                CustomerId    = customerId,
                BonusType     = type,
                CampaignId    = campaignId
            };

            var operationsService = CreateSutInstance();

            await operationsService.ProcessBonusReceivedEventAsync(bonus);

            _bonusRepoMock.Verify(x => x.AddAsync(It.IsAny <BonusCashInDto>()), Times.Never);
        }
        public async Task TryToProcessBonusEvent_InvalidBalance_SuccessfullyProcessedWithWarning(long amount)
        {
            var campaignResponseModel = new CampaignDetailResponseModel {
                Name = "campaign"
            };

            _campaignClientMock.Setup(x => x.History.GetEarnRuleByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(campaignResponseModel);

            _bonusRepoMock.Setup(x => x.AddAsync(It.IsAny <BonusCashInDto>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var bonus = new BonusCashInDto
            {
                AssetSymbol   = "asset",
                TransactionId = "transactionId",
                Amount        = amount,
                CustomerId    = "customerId",
                BonusType     = "type",
                CampaignId    = FakeCampaignId
            };

            var operationsService = CreateSutInstance();

            await operationsService.ProcessBonusReceivedEventAsync(bonus);

            _bonusRepoMock.Verify();
        }
        public async Task TryToProcessBonusEvent_HasConditionId_SuccessfullyProcessedWithConditionName()
        {
            var campaignResponseModel = new CampaignDetailResponseModel
            {
                Name       = "campaign",
                Conditions = new List <ConditionModel>
                {
                    new ConditionModel
                    {
                        Id = FakeConditionId,
                        TypeDisplayName = FakeConditionName
                    }
                }
            };

            _campaignClientMock.Setup(x => x.History.GetEarnRuleByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(campaignResponseModel);

            _bonusRepoMock.Setup(x => x.AddAsync(It.IsAny <BonusCashInDto>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var bonus = new BonusCashInDto
            {
                AssetSymbol   = "asset",
                TransactionId = "transactionId",
                Amount        = 100,
                CustomerId    = "customerId",
                BonusType     = "type",
                CampaignId    = FakeCampaignId,
                ConditionId   = FakeConditionId
            };

            var operationsService = CreateSutInstance();

            await operationsService.ProcessBonusReceivedEventAsync(bonus);

            _bonusRepoMock.Verify(x => x.AddAsync(It.Is <BonusCashInDto>(b => b.ConditionName == FakeConditionName)),
                                  Times.Once);
        }
Example #6
0
        private async Task <(decimal AmountInCurrency, Money18 AmountInTokens, ConversionSource ConversionSource)> GetEarnRuleConversionRate(CampaignDetailResponseModel earnRule)
        {
            if (earnRule.UsePartnerCurrencyRate)
            {
                var partnerIds = earnRule.Conditions
                                 .Where(c => c.PartnerIds != null)
                                 .SelectMany(c => c.PartnerIds)
                                 .Distinct()
                                 .ToList();

                return(await GetConversionRateForPartnerRules(partnerIds));
            }

            if (earnRule.RewardType == RewardType.ConversionRate && earnRule.AmountInCurrency.HasValue && earnRule.AmountInTokens.HasValue)
            {
                return(earnRule.AmountInCurrency.Value, earnRule.AmountInTokens.Value, ConversionSource.EarnRule);
            }
            else
            {
                return(await GetGlobalConversionRate());
            }
        }