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()); }
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"); } }
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(); }