Пример #1
0
        public void LookupHitsTest()
        {
            var hitCache  = new Mock <IHitCacheImplementation>();
            var visitorId = visitorDelegate.VisitorId;

            visitorDelegate.Config.HitCacheImplementation = hitCache.Object;

            var defaultStrategy = new DefaultStrategy(visitorDelegate);

            var screenHit = new Screen(string.Concat(Enumerable.Repeat("Home", 1000000)));

            var hitData = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.SCREENVIEW,
                    Content     = screenHit,
                    Time        = DateTime.Now
                }
            };

            var pageHit = new Page(string.Concat(Enumerable.Repeat("Home", 1000000)));

            var hitData2 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.PAGEVIEW,
                    Content     = pageHit,
                    Time        = DateTime.Now
                }
            };

            var batchHit = new Batch()
            {
                Hits = new Collection <HitAbstract>()
                {
                    pageHit,
                    screenHit
                },
            };

            var hitData3 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.BATCH,
                    Content     = batchHit,
                    Time        = DateTime.Now
                }
            };

            var transactionHit = new Transaction("transactionID", "aff");

            var hitData4 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.TRANSACTION,
                    Content     = transactionHit,
                    Time        = DateTime.Now
                }
            };

            var eventHit = new Event(EventCategory.USER_ENGAGEMENT, "aff");

            var hitData5 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.EVENT,
                    Content     = eventHit,
                    Time        = DateTime.Now
                }
            };

            var itemHit = new Item("transID", "name", "code");

            var hitData6 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.ITEM,
                    Content     = itemHit,
                    Time        = DateTime.Now
                }
            };

            var flag = new FlagDTO
            {
                CampaignId       = "campaignCacheHitId",
                CampaignType     = "ab",
                IsReference      = true,
                Key              = "key",
                Value            = "value",
                VariationGroupId = "varGrID",
                VariationId      = "varID"
            };

            var hitData7 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.ACTIVATE,
                    Content     = flag,
                    Time        = DateTime.Now
                }
            };

            var array = new JArray()
            {
                JObject.FromObject(hitData),
                JObject.FromObject(hitData2),
                JObject.FromObject(hitData3),
                JObject.FromObject(hitData4),
                JObject.FromObject(hitData5),
                JObject.FromObject(hitData6),
                JObject.FromObject(hitData7),
            };

            hitCache.Setup(x => x.LookupHits(visitorId)).Returns(Task.FromResult(array));

            defaultStrategy.LookupHits();

            trackingManagerMock.Verify(x => x.SendActive(visitorDelegate, It.Is <FlagDTO>(
                                                             y => y.CampaignId == flag.CampaignId &&
                                                             y.CampaignType == flag.CampaignType &&
                                                             y.IsReference == flag.IsReference &&
                                                             y.Key == flag.Key &&
                                                             y.Value == flag.Value &&
                                                             y.VariationGroupId == flag.VariationGroupId &&
                                                             y.VariationId == flag.VariationId)), Times.Once());

            Func <HitAbstract, bool> checkHit = (HitAbstract hitAbstract) =>
            {
                switch (hitAbstract.Type)
                {
                case HitType.PAGEVIEW:
                    var page = (Page)hitAbstract;
                    return(page.DocumentLocation == pageHit.DocumentLocation);

                case HitType.SCREENVIEW:
                    var screen = (Screen)hitAbstract;
                    return(screen.DocumentLocation == screenHit.DocumentLocation);

                case HitType.TRANSACTION:
                    var transaction = (Transaction)hitAbstract;
                    return(transaction.TransactionId == transactionHit.TransactionId && transaction.Affiliation == transactionHit.Affiliation);

                case HitType.ITEM:
                    var item = (Item)hitAbstract;
                    return(item.TransactionId == itemHit.TransactionId && item.Code == itemHit.Code && item.Name == itemHit.Name);

                case HitType.EVENT:
                    var eventObject = (Event)hitAbstract;
                    return(eventObject.Category == eventHit.Category && eventObject.Action == eventHit.Action);

                case HitType.BATCH:
                    var batch = (Batch)hitAbstract;
                    return(batch.Hits.Count == 2);

                default:
                    break;
                }
                return(false);
            };

            trackingManagerMock.Verify(x => x.SendHit(It.Is <Batch>(y => y.Hits.Any(checkHit))), Times.Exactly(4));
        }