Example #1
0
        public async Task GetCampaignsByTypeAsync_WhenBonusTypePassed_CampaignsFromThisTypeAreReturned()
        {
            _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}",
                                                  It.IsAny <CommandFlags>()))
            .ReturnsAsync(value: JsonConvert.SerializeObject(CampaignCacheServiceTestData.CampaignModel));
            _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:bonusType:{CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName}", It.IsAny <CommandFlags>()))
            .ReturnsAsync(value: JsonConvert.SerializeObject(CampaignCacheServiceTestData.BonusTypeCampaigns));

            //Act
            var result =
                await _campaignCacheService.GetCampaignsByTypeAsync(CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName);

            //Assert
            Assert.IsAssignableFrom <IReadOnlyCollection <CampaignModel> >(result);
            Assert.Single(result);
        }
        public async Task ProcessEventForCustomerAsync(
            string customerId,
            string partnerId,
            string locationId,
            IReadOnlyDictionary <string, string> data,
            string conditionType)
        {
            var operationId = Guid.NewGuid();

            if (data.ContainsKey(StakedCampaignIdKey))
            {
                var campaign = await _campaignCacheService.GetCampaignFromCacheOrServiceAsync(data[StakedCampaignIdKey]);

                if (campaign.Conditions.Any(x => x.BonusType.Type == conditionType) && campaign.Conditions.Any(y => y.HasStaking))
                {
                    await ProcessCampaignAsync(
                        customerId,
                        partnerId,
                        locationId,
                        data,
                        conditionType,
                        campaign,
                        operationId);
                }
            }

            var activeCampaigns = await _campaignCacheService.GetCampaignsByTypeAsync(conditionType);

            foreach (var campaign in activeCampaigns.Where(x => x.Conditions.Any(y => y.BonusType.Type == conditionType) && x.Conditions.All(y => !y.HasStaking)))
            {
                await ProcessCampaignAsync(
                    customerId,
                    partnerId,
                    locationId,
                    data,
                    conditionType,
                    campaign,
                    operationId);
            }
        }