Example #1
0
        public void VisitorCacheTest()
        {
            ICollection <Campaign> campaigns = new Collection <Campaign>()
            {
                new Campaign()
                {
                    Id        = "id",
                    Variation = new Variation
                    {
                        Id            = "varID",
                        Modifications = new Modifications
                        {
                            Type  = ModificationType.FLAG,
                            Value = new Dictionary <string, object>
                            {
                                ["key"] = "value"
                            }
                        },
                        Reference = false
                    },
                    Type             = "ab",
                    VariationGroupId = "varGroupId"
                }
            };

            var VisitorCacheCampaigns = new Collection <VisitorCacheCampaign>();

            var variationHistory = new Dictionary <string, string>
            {
                ["varGrID"] = "varID"
            };

            foreach (var item in campaigns)
            {
                variationHistory[item.VariationGroupId] = item.Variation.Id;

                VisitorCacheCampaigns.Add(new VisitorCacheCampaign
                {
                    CampaignId       = item.Id,
                    VariationGroupId = item.VariationGroupId,
                    VariationId      = item.Variation.Id,
                    IsReference      = item.Variation.Reference,
                    Type             = item.Variation.Modifications.Type,
                    Activated        = false,
                    Flags            = item.Variation.Modifications.Value
                });
            }



            var data = new VisitorCacheDTOV1
            {
                Version = 1,
                Data    = new VisitorCacheData
                {
                    VisitorId          = visitorDelegate.VisitorId,
                    AnonymousId        = visitorDelegate.AnonymousId,
                    Consent            = visitorDelegate.HasConsented,
                    Context            = visitorDelegate.Context,
                    Campaigns          = VisitorCacheCampaigns,
                    AssignmentsHistory = variationHistory
                }
            };



            visitorDelegate.VisitorCache = new VisitorCache
            {
                Version = 1,
                Data    = new VisitorCacheDTOV1
                {
                    Version = 1,
                    Data    = new VisitorCacheData
                    {
                        VisitorId          = visitorDelegate.VisitorId,
                        AnonymousId        = visitorDelegate.AnonymousId,
                        Consent            = visitorDelegate.HasConsented,
                        Context            = visitorDelegate.Context,
                        AssignmentsHistory = new Dictionary <string, string>
                        {
                            ["varGrID"] = "varID"
                        }
                    }
                }
            };

            var dataJson = JObject.FromObject(data);

            var visitorCache = new Mock <IVisitorCacheImplementation>();
            var visitorId    = visitorDelegate.VisitorId;

            visitorDelegate.Config.VisitorCacheImplementation = visitorCache.Object;

            visitorDelegate.Campaigns = campaigns;

            var defaultStrategy = new DefaultStrategy(visitorDelegate);

            defaultStrategy.CacheVisitorAsync();

            visitorCache.Verify(x => x.CacheVisitor(visitorId, It.Is <JObject>(y => y.ToString() == dataJson.ToString())), Times.Once);

            var error = new Exception("visitorCache error");

            visitorCache.Setup(x => x.CacheVisitor(It.IsAny <string>(), It.IsAny <JObject>())).Throws(error);

            defaultStrategy.CacheVisitorAsync();

            fsLogManagerMock.Verify(x => x.Error(error.Message, "CacheVisitor"), Times.Once());
        }
Example #2
0
        public virtual async void CacheVisitorAsync()
        {
            try
            {
                var visitorCacheInstance = Config?.VisitorCacheImplementation;
                if (visitorCacheInstance == null || Config.DisableCache)
                {
                    return;
                }

                var Campaigns          = new Collection <VisitorCacheCampaign>();
                var assignmentsHistory = new Dictionary <string, string>();

                var visitorCacheData = (VisitorCacheDTOV1)Visitor.VisitorCache?.Data;
                if (visitorCacheData != null)
                {
                    foreach (var item in visitorCacheData.Data.AssignmentsHistory)
                    {
                        assignmentsHistory[item.Key] = item.Value;
                    }
                }

                foreach (var item in Visitor.Campaigns)
                {
                    assignmentsHistory[item.VariationGroupId] = item.Variation.Id;

                    Campaigns.Add(new VisitorCacheCampaign
                    {
                        CampaignId       = item.Id,
                        VariationGroupId = item.VariationGroupId,
                        VariationId      = item.Variation.Id,
                        IsReference      = item.Variation.Reference,
                        Type             = item.Variation.Modifications.Type,
                        Activated        = false,
                        Flags            = item.Variation.Modifications.Value
                    });
                }

                var data = new VisitorCacheDTOV1
                {
                    Version = 1,
                    Data    = new VisitorCacheData
                    {
                        VisitorId          = Visitor.VisitorId,
                        AnonymousId        = Visitor.AnonymousId,
                        Consent            = Visitor.HasConsented,
                        Context            = Visitor.Context,
                        Campaigns          = Campaigns,
                        AssignmentsHistory = assignmentsHistory,
                    }
                };

                var dataJson = JObject.FromObject(data);

                await visitorCacheInstance.CacheVisitor(Visitor.VisitorId, dataJson);

                Visitor.VisitorCache = new VisitorCache
                {
                    Version = 1,
                    Data    = data
                };
            }
            catch (Exception ex)
            {
                Logger.Log.LogError(Config, ex.Message, "CacheVisitor");
            }
        }
Example #3
0
        public void LookupVisitorTest()
        {
            var visitorCache = new Mock <IVisitorCacheImplementation>();
            var visitorId    = visitorDelegate.VisitorId;

            visitorDelegate.VisitorCache = null;
            visitorDelegate.Config.VisitorCacheImplementation = visitorCache.Object;

            var defaultStrategy = new DefaultStrategy(visitorDelegate);

            ICollection <Campaign> campaigns = new Collection <Campaign>()
            {
                new Campaign()
                {
                    Id        = "id",
                    Variation = new Variation
                    {
                        Id            = "varID",
                        Modifications = new Modifications
                        {
                            Type  = ModificationType.FLAG,
                            Value = new Dictionary <string, object>
                            {
                                ["key"] = "value"
                            }
                        },
                        Reference = false
                    },
                    Type             = "ab",
                    VariationGroupId = "varGroupId"
                }
            };

            var VisitorCacheCampaigns = new Collection <VisitorCacheCampaign>();

            foreach (var item in campaigns)
            {
                VisitorCacheCampaigns.Add(new VisitorCacheCampaign
                {
                    CampaignId       = item.Id,
                    VariationGroupId = item.VariationGroupId,
                    VariationId      = item.Variation.Id,
                    IsReference      = item.Variation.Reference,
                    Type             = item.Variation.Modifications.Type,
                    Activated        = false,
                    Flags            = item.Variation.Modifications.Value
                });
            }


            var failedData = new VisitorCacheDTOV1
            {
                Version = 1,
                Data    = new VisitorCacheData
                {
                    VisitorId   = "any",
                    AnonymousId = visitorDelegate.AnonymousId,
                    Consent     = visitorDelegate.HasConsented,
                    Context     = visitorDelegate.Context,
                    Campaigns   = VisitorCacheCampaigns
                }
            };

            visitorCache.Setup(x => x.LookupVisitor(visitorId)).Returns(Task.FromResult(JObject.FromObject(failedData)));

            defaultStrategy.LookupVisitor();

            fsLogManagerMock.Verify(x => x.Info(string.Format(VisitorStrategyAbstract.VISITOR_ID_MISMATCH_ERROR, "any", visitorId), "LookupVisitor"), Times.Once());

            Assert.IsNull(visitorDelegate.VisitorCache);

            var data = new VisitorCacheDTOV1
            {
                Version = 1,
                Data    = new VisitorCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Consent     = visitorDelegate.HasConsented,
                    Context     = visitorDelegate.Context,
                    Campaigns   = VisitorCacheCampaigns
                }
            };

            var dataJson = JObject.FromObject(data);

            visitorCache.Setup(x => x.LookupVisitor(visitorId)).Returns(Task.FromResult(dataJson));

            defaultStrategy.LookupVisitor();

            Assert.IsNotNull(visitorDelegate.VisitorCache);

            Assert.AreEqual(JsonConvert.SerializeObject(visitorDelegate.VisitorCache.Data), JsonConvert.SerializeObject(data));

            var error = new Exception("LookupVisitor error");

            visitorCache.Setup(x => x.LookupVisitor(visitorId)).Throws(error);

            defaultStrategy.LookupVisitor();

            fsLogManagerMock.Verify(x => x.Error(error.Message, "LookupVisitor"), Times.Once());

            visitorCache.Setup(x => x.LookupVisitor(visitorId)).Returns(Task.FromResult(new JObject()));

            defaultStrategy.LookupVisitor();

            fsLogManagerMock.Verify(x => x.Error(VisitorStrategyAbstract.LOOKUP_VISITOR_JSON_OBJECT_ERROR, "LookupVisitor"), Times.Once());

            visitorCache.Setup(x => x.LookupVisitor(visitorId)).Returns(Task.FromResult <JObject>(null));

            defaultStrategy.LookupVisitor();
        }