コード例 #1
0
        public IEnumerable<PageRequest> GetDomainRequests(IPageSelector selector)
        {
            var time = DateTime.Now.AddSeconds(_config.CoreDelay * 2);
            _activeRequests.AddOrUpdate(selector.Id, time, ( guid, date) => time );

            return Cache.Get<IEnumerable<PageRequest>>(selector.Id.ToString() + "/requests");
        }
コード例 #2
0
        public void NewPageFound_Returns_This_Page()
        {
            SitePage page = new SitePage
            {
                URL = "https://dummy/url"
            };

            //pageSelectorForNewPages в данном тесте имеет осмысленную реализацию и выдает всегда одну страницу
            var stub = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = page
            };

            IPageSelector pageSelectorForNewPages = stub;

            IFindAnimatedByPage              animatedSelectorForNewImages    = new Stubs.AnimatedSelectorStub();
            IPageSelector                    pageSelectorForAnyPages         = new Stubs.PageSelectorStub();
            IFindAnimatedByPage              findAnimatedByPage              = new Stubs.FindAnimatedByPageStub();
            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;

            //проверяем что он вернул
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Page);
            Assert.IsNull(result.Image, "Не очікувалося заповнення TwittData.Image");

            Assert.AreSame(page, result.Page);
        }
コード例 #3
0
        public void NewAnimated_Returns_PageAndImage()
        {
            var stub = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null         //в этом тесте новых страниц нет, поэтому первый селектор вернет null
            };

            IPageSelector pageSelectorForNewPages = stub;

            //а главную "роль" в тесте исполнит селектор новых аним.изображений - он должен вернуть
            AnimatedImage animatedImage = new AnimatedImage
            {
                BlobName  = "code-geass:img1.gif",
                TweetDate = null                 //гифка новая даты твита не должно быть
            };

            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = new AnimatedImage[] { animatedImage }       //стаб вернет этот результат
            };

            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            //в этом тесте ожидается работа стаба FindPageByBlobNameStub - он должен "найти" страницу по имени блоба
            SitePage page = new SitePage
            {
                URL = "https://dummy/code-geass"
            };

            var findPageByBlob = new Stubs.FindPageByBlobNameStub
            {
                DontThrowNotImpl = true,
                Result           = page
            };

            //имитируем найденную страницу...
            IFindPageByBlobName findPageByBlobName = findPageByBlob;

            IPageSelector                    pageSelectorForAnyPages         = new Stubs.PageSelectorStub();
            IFindAnimatedByPage              findAnimatedByPage              = new Stubs.FindAnimatedByPageStub();
            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;

            //проверяем что он вернул
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Page);
            Assert.IsNotNull(result.Image);

            //для поиска должны передать строго то имя блоба, что мы предусмотрели тестом
            Assert.IsTrue(findPageByBlob.UsedBlobNameForFind == animatedImage.BlobName);

            Assert.AreSame(page, result.Page);
            Assert.AreSame(animatedImage, result.Image);
        }
コード例 #4
0
 public static void Copy(IPageSelector source, IPageSelector target)
 {
     target.Id           = source.Id;
     target.Pattern      = source.Pattern;
     target.ParentId     = source.ParentId;
     target.SelectorType = source.SelectorType;
 }
コード例 #5
0
        public void NewAnimated_FindPageByBlobName_Returns_Null_Exception()
        {
            var stub = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null         //в этом тесте новых страниц нет, поэтому первый селектор вернет null
            };

            IPageSelector pageSelectorForNewPages = stub;

            //это часть урла, а блоб всегда содержит в начале такое же (до двоеточия)
            string codeGeassURLPart = "code-geass";

            //а главную "роль" в тесте исполнит селектор новых аним.изображений - он должен вернуть
            AnimatedImage animatedImage = new AnimatedImage
            {
                BlobName  = "code-geass:img1.gif",
                TweetDate = null                 //гифка новая даты твита не должно быть
            };

            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = new AnimatedImage[] { animatedImage }       //стаб вернет этот результат
            };

            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            //в этом тесте ожидается работа стаба FindPageByBlobNameStub - он должен НЕ найти страницу по имени блоба (вернуть null)
            //и это приведет в итоге к исключению
            var findPageByBlob = new Stubs.FindPageByBlobNameStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            //имитируем найденную страницу...
            IFindPageByBlobName findPageByBlobName = findPageByBlob;

            IPageSelector                    pageSelectorForAnyPages         = new Stubs.PageSelectorStub();
            IFindAnimatedByPage              findAnimatedByPage              = new Stubs.FindAnimatedByPageStub();
            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            try
            {
                TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;
            }
            catch (AggregateException aggrEx)
            {
                ApplicationException appEx = (ApplicationException)aggrEx.InnerExceptions[0];

                //это и должно было произойти. В тексте наш спец.текст
                Assert.IsTrue(appEx.Message.Contains("Find page by blob name failed for"));
                Assert.IsTrue(appEx.Message.Contains(codeGeassURLPart));
            }
        }
コード例 #6
0
        void _PageFoundBody(AnimatedImage[] resultForFindAnimated)
        {
            SitePage page = new SitePage
            {
                URL = "https://dummy/url"
            };

            //pageSelectorForNewPages в данном тесте выдает null чтобы логика прошла дальше (нет новых страниц)
            var stubNewPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            //этот стаб вернет null (нет новых аним.изображений)
            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };


            IPageSelector       pageSelectorForNewPages      = stubNewPages;
            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            IFindPageByBlobName findPageByBlobName = new Stubs.FindPageByBlobNameStub();

            var stubAnyPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = page
            };
            //Главный "герой" этого теста - должен вернуть одну страницу (ее когда-то твитили, но уже давно)
            IPageSelector pageSelectorForAnyPages = stubAnyPages;


            //в нашем тесте этот универсальный поиск выдает null (нет аним.изображений для страницы)
            var stubFindAnimated = new Stubs.FindAnimatedByPageStub
            {
                DontThrowNotImpl = true,
                Result           = resultForFindAnimated
            };

            IFindAnimatedByPage findAnimatedByPage = stubFindAnimated;

            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;

            //проверяем что он вернул
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Page);
            Assert.IsNull(result.Image, "Не очікувалося заповнення TwittData.Image");

            Assert.AreSame(page, result.Page);
        }
コード例 #7
0
        public IEnumerable <PageRequest> GetDomainRequests(IPageSelector selector)
        {
            var time = DateTime.Now.AddSeconds(_config.CoreDelay * 2);

            _activeRequests.AddOrUpdate(selector.Id, time, (guid, date) => time);

            return(Cache.Get <IEnumerable <PageRequest> >(selector.Id.ToString() + "/requests"));
        }
コード例 #8
0
 private static bool PutList(IPageSelector site, IEnumerable <PageRequest> list)
 {
     if (site == null)
     {
         return(false);
     }
     _domainStatistics.SetDomainRequests(site, list);
     return(true);
 }
コード例 #9
0
 public PageForTwittingSelector(IPageSelector pageSelectorForNewPages, IFindAnimatedByPage findNewAnimatedByPage, IPageSelector pageSelectorForAnyPages, IFindAnimatedByPage findAnimatedByPage, IPageOrExternalImageSelector pageOrExternalImageSelector, IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast, kawaii.twitter.Logs.ILogger log)
 {
     _PageSelectorForNewPages         = pageSelectorForNewPages ?? throw new ArgumentNullException(nameof(pageSelectorForNewPages));
     _FindNewAnimatedByPage           = findNewAnimatedByPage ?? throw new ArgumentNullException(nameof(findNewAnimatedByPage));
     _PageSelectorForAnyPages         = pageSelectorForAnyPages ?? throw new ArgumentNullException(nameof(pageSelectorForAnyPages));
     _FindAnimatedByPage              = findAnimatedByPage ?? throw new ArgumentNullException(nameof(findAnimatedByPage));
     _PageOrExternalImageSelector     = pageOrExternalImageSelector ?? throw new ArgumentNullException(nameof(pageOrExternalImageSelector));
     _AnimatedSelectorWithExcludeLast = animatedSelectorWithExcludeLast ?? throw new ArgumentNullException(nameof(animatedSelectorWithExcludeLast));
     _Log = log ?? throw new ArgumentNullException(nameof(log));
 }
コード例 #10
0
        public void No_Page_For_Twitting()
        {
            //этот аналог важен для покрытия кода

            var stubNewPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            //этот стаб вернет null (нет новых аним.изображений)
            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            IPageSelector       pageSelectorForNewPages      = stubNewPages;
            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            IFindPageByBlobName findPageByBlobName = new Stubs.FindPageByBlobNameStub();

            var stubAnyPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null         //Это ситуация которую моделирует тест - такое не должно быть в реальной системе (и будет выброс исключения)
            };
            IPageSelector pageSelectorForAnyPages = stubAnyPages;

            //в нашем тесте этот универсальный поиск выдает null (нет аним.изображений для страницы)
            var stubFindAnimated = new Stubs.FindAnimatedByPageStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            IFindAnimatedByPage              findAnimatedByPage              = stubFindAnimated;
            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            try
            {
                TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;
                Assert.Fail("Ожидался выброс исключения ApplicationException так как селектор pageSelectorForAnyPages вернул null (чего быть в работе не должно никогда)");
            }
            catch (System.AggregateException aggrEx)
            {
                ApplicationException appEx = (ApplicationException)aggrEx.InnerExceptions[0];

                //это и должно было произойти. В тексте наш спец.текст
                Assert.IsTrue(appEx.Message.Contains("No page found for twitting"));
            }
        }
コード例 #11
0
        private DomainStatistics GetCountOnly(IPageSelector site)
        {
            var data = new DomainStatistics(site);

            var cachedData = _domainStats.GetDomainStatistics(site);

            if (cachedData != null)
            {
                data.Count = cachedData.Count;
            }
            return(data);
        }
コード例 #12
0
        public void SetDomainStatistics(IPageSelector selector, DomainStatisticsData domainStatistics)
        {
            Cache.Put(selector.Id.ToString(), domainStatistics, DateTime.Now.AddSeconds(250));

            // hack for domain list
            var list = Cache.Get<Dictionary<Guid, IPageSelector>>("domains") ?? new Dictionary<Guid, IPageSelector>();
            if (!list.ContainsKey(selector.Id))
            {
                list.Add(selector.Id, selector);
                Cache.Put("domains", list);
            }
        }
コード例 #13
0
        public void SetDomainStatistics(IPageSelector selector, DomainStatisticsData domainStatistics)
        {
            Cache.Put(selector.Id.ToString(), domainStatistics, DateTime.Now.AddSeconds(250));

            // hack for domain list
            var list = Cache.Get <Dictionary <Guid, IPageSelector> >("domains") ?? new Dictionary <Guid, IPageSelector>();

            if (!list.ContainsKey(selector.Id))
            {
                list.Add(selector.Id, selector);
                Cache.Put("domains", list);
            }
        }
コード例 #14
0
        public void Ctor_PageSelectorForAnyPages_null_Fail()
        {
            IPageSelector                    pageSelectorForNewPages         = new Stubs.PageSelectorStub();
            IFindAnimatedByPage              animatedSelectorForNewImages    = new Stubs.AnimatedSelectorStub();
            IPageSelector                    pageSelectorForAnyPages         = null;
            IFindAnimatedByPage              findAnimatedByPage              = new Stubs.FindAnimatedByPageStub();
            IPageOrExternalImageSelector     pageOrExternalImageSelector     = new Stubs.PageOrExternalImageSelectorStub();
            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            try
            {
                var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());
                Assert.Fail(_FAIL_MESSAGE_ARGUMENTNULL_EXPECTED);
            }
            catch (ArgumentNullException ex)
            {
                Assert.IsTrue(ex.ParamName != null && ex.ParamName == "pageSelectorForAnyPages");
            }
        }
コード例 #15
0
ファイル: EventTypes.cs プロジェクト: DCT-UA/Monator
        public DomainStatistics(IPageSelector selector)
        {
            if (selector == null)
            {
                throw new NullReferenceException("Selector is null");
            }

            var site = selector as Site;

            if (site != null)
            {
                SelectorType = (int)PageSelectorType.DomainPattern;
                Domain       = site.Domain;
                SiteId       = site.Id;
                UserId       = site.UserId;
                return;
            }

            var page = selector as Page;

            if (page != null)
            {
                SelectorType = (int)PageSelectorType.PagePattern;
                Domain       = page.PagePattern;
                SiteId       = page.DomainId;
                PageId       = page.Id;
                return;
            }

            var domainSelector = selector as DomainSelector;

            if (domainSelector != null)
            {
                SelectorType = (int)PageSelectorType.DomainString;
                Domain       = domainSelector.Pattern;
                SiteId       = domainSelector.ParentId.Value;
                return;
            }

            throw new InvalidOperationException("Unsupported selector type specified " + selector.GetType().Name);
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public DomainStatisticsData GetDomainStatistics(IPageSelector selector)
 {
     return(null);
 }
コード例 #17
0
        public void PageFound_And_AnimatedFound_Random_Select_PageOnly()
        {
            //Тест-кейс: найдена не-новая страница и у нее есть внешние изображения. Рандомизированный выбор "решил" что их не нужно использовать
            SitePage page = new SitePage
            {
                URL = "https://dummy/url"
            };

            //pageSelectorForNewPages в данном тесте выдает null чтобы логика прошла дальше (нет новых страниц)
            var stubNewPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            //этот стаб вернет null (нет новых аним.изображений)
            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };


            IPageSelector       pageSelectorForNewPages      = stubNewPages;
            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            IFindPageByBlobName findPageByBlobName = new Stubs.FindPageByBlobNameStub();

            var stubAnyPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = page
            };
            //Главный "герой" этого теста - должен вернуть одну страницу (ее когда-то твитили, но уже давно)
            IPageSelector pageSelectorForAnyPages = stubAnyPages;

            //аним.изображения найдены, но их не будем использовать
            AnimatedImage[] animatedImgs = new AnimatedImage[]
            {
                //здесь нам не важно что - оно просто должно быть, тест "не выбирает" это
                new AnimatedImage()
                {
                    BlobName = "dummy", TweetDate = new DateTime(2020, 04, 26, 00, 00, 00)
                }
            };

            var stubFindAnimated = new Stubs.FindAnimatedByPageStub
            {
                DontThrowNotImpl = true,
                Result           = animatedImgs
            };

            IFindAnimatedByPage findAnimatedByPage = stubFindAnimated;

            //этот стаб имитирует "случайное решение" о том использовать ли изобр.со страницы , или внешнее анимированное.
            //В этом тесте он всегда выбирает "со страницы"
            var stubRandomPageOrImg = new Stubs.PageOrExternalImageSelectorStub();

            stubRandomPageOrImg.DontThrowNotImpl         = true;
            stubRandomPageOrImg.UseExternalAnimatedImage = false;               //именно это важно для данного теста

            IPageOrExternalImageSelector pageOrExternalImageSelector = stubRandomPageOrImg;

            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = new Stubs.AnimatedSelectorWithExcludeLastStub();

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;

            //проверяем что он вернул
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Page);
            Assert.IsNull(result.Image, "Не очікувалося заповнення TwittData.Image");

            Assert.AreSame(page, result.Page);
        }
コード例 #18
0
 public List<PageRequest> GetDomainRequests(IPageSelector selector)
 {
     _browser.Navigate(GetRequestUri(selector), false);
     return _jsonSerrializer.Deserialize<List<PageRequest>>(_browser.Html);
 }
コード例 #19
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public bool Contains(IPageSelector selector)
 {
     throw new NotImplementedException();
 }
コード例 #20
0
 public void SetDomainRequests(IPageSelector selector, IEnumerable<PageRequest> events)
 {
     Cache.Put(selector.Id.ToString() + "/requests", events.ToArray(), DateTime.Now.AddSeconds(250));
 }
コード例 #21
0
 public List <PageRequest> GetDomainRequests(IPageSelector selector)
 {
     _browser.Navigate(GetRequestUri(selector), false);
     return(_jsonSerrializer.Deserialize <List <PageRequest> >(_browser.Html));
 }
コード例 #22
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public DomainStatisticsData GetDomainStatistics(IPageSelector selector)
 {
     return null;
 }
コード例 #23
0
ファイル: ServiceProxy.cs プロジェクト: DCT-UA/Monator
 public IEnumerable <PageRequest> GetRequests(IPageSelector site)
 {
     _site = site;
     return(_domainRequestsQuery.Data);
 }
コード例 #24
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public bool Contains(IPageSelector selector)
 {
     throw new NotImplementedException();
 }
コード例 #25
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public IEnumerable<PageRequest> GetDomainRequests(IPageSelector selector)
 {
     return null;
 }
コード例 #26
0
 public IEnumerable <PageRequest> GetDomainRequests(IPageSelector selector)
 {
     return(_client.GetDomainRequests(selector));
 }
コード例 #27
0
ファイル: RawDomainStatistics.cs プロジェクト: DCT-UA/Monator
 public RawDomainStatistics(IPageSelector selector)
     : base(selector)
 {
 }
コード例 #28
0
        public bool Contains(IPageSelector selector)
        {
            DateTime time;

            return(_activeRequests.TryGetValue(selector.Id, out time) && time >= DateTime.Now);
        }
コード例 #29
0
ファイル: CacheDataSource.cs プロジェクト: DCT-UA/Monator
        private DomainStatistics GetCountOnly(IPageSelector site)
        {
            var data = new DomainStatistics(site);

            var cachedData = _domainStats.GetDomainStatistics(site);
            if(cachedData != null) data.Count = cachedData.Count;
            return data;
        }
コード例 #30
0
 public DomainStatisticsData GetDomainStatistics(IPageSelector selector)
 {
     return(Cache.Get <DomainStatisticsData>(selector.Id.ToString()));
 }
コード例 #31
0
 public bool Contains(IPageSelector selector)
 {
     DateTime time;
     return _activeRequests.TryGetValue(selector.Id, out time) && time >= DateTime.Now;
 }
コード例 #32
0
 private static bool PutList(IPageSelector site, IEnumerable<PageRequest> list)
 {
     if (site == null) return false;
     _domainStatistics.SetDomainRequests(site, list);
     return true;
 }
コード例 #33
0
 public DomainStatisticsData GetDomainStatistics(IPageSelector selector)
 {
     return Cache.Get<DomainStatisticsData>(selector.Id.ToString());
 }
コード例 #34
0
 public DomainStatistics(IPageSelector selector)
 {
     selector.CopyTo(this);
 }
コード例 #35
0
ファイル: ServiceProxy.cs プロジェクト: DCT-UA/Monator
 public IEnumerable<PageRequest> GetRequests(IPageSelector site)
 {
     _site = site;
     return _domainRequestsQuery.Data;
 }
コード例 #36
0
 public void SetDomainRequests(IPageSelector selector, IEnumerable <PageRequest> events)
 {
     Cache.Put(selector.Id.ToString() + "/requests", events.ToArray(), DateTime.Now.AddSeconds(250));
 }
コード例 #37
0
 private Uri GetRequestUri(IPageSelector selector)
 {
     return(new Uri(string.Format(RequestsPath, _endpoint, selector.Id)));
 }
コード例 #38
0
 public IEnumerable <PageRequest> GetDomainRequests(IPageSelector site)
 {
     return(_domainStats.GetDomainRequests(site));
 }
コード例 #39
0
 private Uri GetRequestUri(IPageSelector selector)
 {
     return new Uri(string.Format(RequestsPath, _endpoint, selector.Id));
 }
コード例 #40
0
 private void AddOrUpdateCounter(ConcurrentDictionary <Guid, RawDomainStatistics> dictionary, IPageSelector data, PageRequest request)
 {
     if (RawGatheringRequestModule.Contains(data))
     {
         RawDomainStatistics counter = dictionary.GetOrAdd(data.Id, new RawDomainStatistics(data));
         counter.AddItemInCounter(request);
     }
 }
コード例 #41
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public IEnumerable <PageRequest> GetDomainRequests(IPageSelector selector)
 {
     return(null);
 }
コード例 #42
0
 internal static bool Contains(IPageSelector selector)
 {
     return(_statisticsModule.Contains(selector));
 }
コード例 #43
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public void SetDomainRequests(IPageSelector selector, IEnumerable <PageRequest> requests)
 {
 }
コード例 #44
0
        public void PageFound_And_AnimatedFound_Random_Select_Animated()
        {
            //Тест-кейс: найдена не-новая страница и у нее есть внешние изображения. Рандомизированный выбор "решил" использовать одно из них
            SitePage page = new SitePage
            {
                URL = "https://kawaii-mobile.com/oregairu"
            };

            //pageSelectorForNewPages в данном тесте выдает null чтобы логика прошла дальше (нет новых страниц)
            var stubNewPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };

            //этот стаб вернет null (нет новых аним.изображений)
            var animNewStub = new Stubs.AnimatedSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = null
            };


            IPageSelector       pageSelectorForNewPages      = stubNewPages;
            IFindAnimatedByPage animatedSelectorForNewImages = animNewStub;

            IFindPageByBlobName findPageByBlobName = new Stubs.FindPageByBlobNameStub();

            var stubAnyPages = new Stubs.PageSelectorStub
            {
                DontThrowNotImpl = true,
                Result           = page
            };
            IPageSelector pageSelectorForAnyPages = stubAnyPages;

            var anim1 = new AnimatedImage
            {
                BlobName  = "oregairu:img1.gif",
                TweetDate = new DateTime(2020, 04, 26, 00, 00, 00)
            };

            var anim2 = new AnimatedImage
            {
                BlobName  = "oregairu:yukinoshita.gif",
                TweetDate = new DateTime(2020, 01, 10, 22, 10, 00)
            };

            var anim3 = new AnimatedImage
            {
                BlobName  = "oregairu:hatiman.gif",
                TweetDate = new DateTime(2020, 02, 08, 08, 00, 00)
            };

            //аним.изображения найдены, тест использует всегда одно из них (anim2)
            AnimatedImage[] animatedImgs = new AnimatedImage[] { anim1, anim2, anim3 };

            var stubFindAnimated = new Stubs.FindAnimatedByPageStub
            {
                DontThrowNotImpl = true,
                Result           = animatedImgs
            };

            IFindAnimatedByPage findAnimatedByPage = stubFindAnimated;

            //этот стаб имитирует "случайное решение" о том использовать ли изобр.со страницы , или внешнее анимированное.
            //В этом тесте он всегда выбирает "со страницы"
            var stubRandomPageOrImg = new Stubs.PageOrExternalImageSelectorStub();

            stubRandomPageOrImg.DontThrowNotImpl         = true;
            stubRandomPageOrImg.UseExternalAnimatedImage = true;               //именно это важно для данного теста

            IPageOrExternalImageSelector pageOrExternalImageSelector = stubRandomPageOrImg;

            var animSelectorStub = new Stubs.AnimatedSelectorWithExcludeLastStub
            {
                DontThrowNotImpl = true,
                Result           = anim2
            };

            IAnimatedSelectorWithExcludeLast animatedSelectorWithExcludeLast = animSelectorStub;

            var pageForTwittingSelector = new kawaii.twitter.core.SelectLogic.PageForTwittingSelector(pageSelectorForNewPages, animatedSelectorForNewImages, pageSelectorForAnyPages, findAnimatedByPage, pageOrExternalImageSelector, animatedSelectorWithExcludeLast, new TweetCreator.Stubs.Logger());

            TwittData result = pageForTwittingSelector.GetPageForTwitting().Result;

            //проверяем что он вернул
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Page);

            //в тесте ожидается что вернут и изображение что мы указали
            Assert.IsNotNull(result.Image);
            Assert.AreSame(result.Image, anim2);

            Assert.AreSame(page, result.Page);
        }
コード例 #45
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public void SetDomainRequests(IPageSelector selector, IEnumerable<PageRequest> requests)
 {
 }
コード例 #46
0
ファイル: CacheDataSource.cs プロジェクト: DCT-UA/Monator
 public IEnumerable<PageRequest> GetDomainRequests(IPageSelector site)
 {
     return _domainStats.GetDomainRequests(site);
 }
コード例 #47
0
ファイル: Program.cs プロジェクト: DCT-UA/Monator
 public void SetDomainStatistics(IPageSelector selector, DomainStatisticsData domainStatistics)
 {
     Console.Write("{0}: {1}\t", selector.Id, domainStatistics.Count);
 }
コード例 #48
0
ファイル: JsonDataSource.cs プロジェクト: DCT-UA/Monator
 public IEnumerable<PageRequest> GetDomainRequests(IPageSelector selector)
 {
     return _client.GetDomainRequests(selector);
 }