Пример #1
0
        public async Task <bool> TryProcess(Input data)
        {
            var sender = new Profile(data.UserName, data.UserImageUrl);

            Profile item      = new Profile(State.Name, State.ImageUrl);
            var     twittData = new TwittData(item, sender);

            switch (State.Type)
            {
            case ImdbType.Movie:
                await _hub.SendMovieAsync(twittData);

                break;

            case ImdbType.Star:
                await _hub.SendStarAsync(twittData);

                break;
            }

            var counterId    = new ActorId(State.Name);
            var counterProxy = ActorProxy.Create <IImdbCounter>(counterId);
            await counterProxy.IncrementAsync(State.Type, item);

            #region Log

            var logId    = Constants.Singleton;
            var logProxy = ActorProxy.Create <IImdbFaults>(logId);
            await logProxy.Report($"Process: {State.Name}");

            #endregion // Log

            return(true);
        }
Пример #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 LikeMovie(TwittData movie)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         Events.Insert(0, movie);
     });
 }
Пример #4
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);
        }
Пример #5
0
 public void LikeStar(TwittData star)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         Events.Insert(0, star);
     });
 }
Пример #6
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));
            }
        }
Пример #7
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);
        }
Пример #8
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"));
            }
        }
Пример #9
0
        public async Task <TwittData> GetPageForTwitting()
        {
            TwittData twittData = new TwittData
            {
                Page = ResultPage
            };

            Task <TwittData> task = new Task <TwittData>(() =>
            {
                return(twittData);
            });

            task.Start();
            return(await task);
        }
Пример #10
0
        public void LikeMovie(TwittData  movie)
        {
            try
            {
                Clients.All.BroadcastLikeMovie(movie);
            }
            #region Exception Handling

            catch (Exception ex)
            {
                ServiceEventSource.Current.ErrorMessage(ex);
            }

            #endregion // Exception Handling
        }
Пример #11
0
        public void LikeStar(TwittData star)
        {
            try
            {
                Clients.All.BroadcastLikeStar(star);
            }
            #region Exception Handling

            catch (Exception ex)
            {
                ServiceEventSource.Current.ErrorMessage(ex);
            }

            #endregion // Exception Handling
        }
Пример #12
0
        public void LastTweetUpdater_ForPage_And_Animated_Test()
        {
            //тест дата твита
            var dtNow1 = new DateTime(2020, 10, 14, 0, 0, 0);

            var nowDate = new SelectLogic.Stubs.DateSupplyStub
            {
                Now = dtNow1
            };

            var animatedTweetDateUpdaterStub = new Stubs.AnimatedTweetDateUpdaterStub
            {
                DontThrowNotImpl = true
            };


            var pageUpdStub = new Stubs.SitePageTweetDateUpdaterStub
            {
                DontThrowNotImpl = true                 //режим работы правильный
            };

            var upd = new LastTweetUpdater(nowDate, animatedTweetDateUpdaterStub, pageUpdStub);

            var page = new db.SitePage
            {
                Title = "https://kawaii-mobile.com/2020/10/uchuu-no-stellvia/",
                URL   = "Uchuu no Stellvia"
            };

            var img = new db.AnimatedImage
            {
                BlobName = "uchuu-no-stellvia",
            };

            TwittData data = new TwittData
            {
                Image = img,
                Page  = page
            };

            upd.UpdateLastTweetDate(data);

            Assert.IsTrue(pageUpdStub.CalledDate == dtNow1);
            Assert.AreSame(pageUpdStub.CalledPage, page);

            Assert.IsTrue(animatedTweetDateUpdaterStub.CalledDate == dtNow1);
            Assert.AreSame(animatedTweetDateUpdaterStub.CalledImage, img);
        }
Пример #13
0
        public async Task SendMovieAsync(TwittData data)
        {
            IImdbEvents e = GetEvent <IImdbEvents>();

            // Clients can listen for the event
            // (events shouldn't be used for Actor's internal communication)
            // when ready Rx 3 will be the publication mechanism
            e.LikeMovie(data);

            #region Log

            var logId    = Constants.Singleton;
            var logProxy = ActorProxy.Create <IImdbFaults>(logId);
            await logProxy.Report($"Raise Movie Event: {data.Name}");

            #endregion // Log
        }
Пример #14
0
        public async Task SendStarAsync(TwittData data)
        {
            ActorEventSource.Current.ActorMessage(this, data.Name);

            // Clients can listen for the event
            // (events shouldn't be used for Actor's internal communication)
            // when ready Rx 3 will be the publication mechanism
            IImdbEvents e = GetEvent <IImdbEvents>();

            e.LikeStar(data);

            #region Log

            var logId    = Constants.Singleton;
            var logProxy = ActorProxy.Create <IImdbFaults>(logId);
            await logProxy.Report($"Raise Star Event: {data.Name}");

            #endregion // Log
        }
Пример #15
0
        public void LastTweetUpdater_UpdateLastTweetDate_PageNull_Test()
        {
            var nowDate = new SelectLogic.Stubs.DateSupplyStub();
            var animatedTweetDateUpdaterStub = new Stubs.AnimatedTweetDateUpdaterStub();
            var pageUpdStub = new Stubs.SitePageTweetDateUpdaterStub();

            var upd = new LastTweetUpdater(nowDate, animatedTweetDateUpdaterStub, pageUpdStub);

            try
            {
                TwittData data = new TwittData();

                upd.UpdateLastTweetDate(data);

                Assert.Fail("Очікувалося виключення ArgumentNullException");
            }
            catch (ArgumentNullException ex)
            {
                Assert.IsTrue(ex.ParamName == "data");
                Assert.IsTrue(ex.Message.Contains("data.Page"));
            }
        }
Пример #16
0
        public void LastTweetUpdater_ForPage_Only_Test()
        {
            //тест дата твита
            var dtNow1 = new DateTime(2020, 10, 14, 0, 0, 0);

            var nowDate = new SelectLogic.Stubs.DateSupplyStub
            {
                Now = dtNow1
            };

            //это в данном тесте не применяется (и выбросит исключение если туда пройдет)
            var animatedTweetDateUpdaterStub = new Stubs.AnimatedTweetDateUpdaterStub();

            var pageUpdStub = new Stubs.SitePageTweetDateUpdaterStub
            {
                DontThrowNotImpl = true                 //режим работы правильный
            };

            var upd = new LastTweetUpdater(nowDate, animatedTweetDateUpdaterStub, pageUpdStub);

            var page = new db.SitePage
            {
                Title = "https://kawaii-mobile.com/2020/10/uchuu-no-stellvia/",
                URL   = "Uchuu no Stellvia"
            };

            TwittData data = new TwittData
            {
                Image = null,
                Page  = page
            };

            upd.UpdateLastTweetDate(data);

            Assert.IsTrue(pageUpdStub.CalledDate == dtNow1);
            Assert.AreSame(pageUpdStub.CalledPage, page);
        }
Пример #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 async void LikeMovie(TwittData movie)
 {
     await NotifyAsync(nameof(ImdbHub.LikeMovie), movie);
 }
Пример #19
0
 public async void LikeStar(TwittData star)
 {
     await NotifyAsync(nameof(ImdbHub.LikeStar), star);
 }
Пример #20
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);
        }
Пример #21
0
        public async Task Execute()
        {
            //получаем вариант твита из селектора...
            TwittData data = await _Selector.GetPageForTwitting();

            _Log.Log("_Selector.GetPageForTwitting done: {0}", DateTime.Now);

            string imageFileName;

            byte[] imageBody;

            string url = data.Page.URL;

            if (data.Image != null)
            {
                _Log.Log("External gif image will be used: {0}", DateTime.Now);

                //нужно сделать твит но изображение берем из указанного,тело файла - его надо получить из блоб-сервиса
                imageFileName = data.Image.GetFileName();
                imageBody     = await _BlobDownload.GetBlobBody(data.Image.BlobName);

                _Log.Log("External gif image downloaded: {0}", DateTime.Now);
            }
            else
            {
                _Log.Log("Post image will be used: {0}", DateTime.Now);

                //изображение твита будем брать случайное прямо из поста
                string imgURL = await _TwitterImageURL.GetTwitterImageFileURL(url);

                if (string.IsNullOrEmpty(imgURL))
                {
                    throw new ApplicationException("Can't found image url for post:" + url);
                }

                _Log.Log("Post image - _ImageOnWeb.Download start: {0}", DateTime.Now);

                //скачать из инета изображение.. нужно его имя файла и тело
                ImageInfo imgInfo = await _ImageOnWeb.Download(imgURL);

                imageFileName = imgInfo.FileName;
                imageBody     = imgInfo.Body;

                _Log.Log("Post image downloaded: {0}", DateTime.Now);
            }

            string postTitle = data.Page.Title;

            //тайтл берем из базы, но изначально он был взят из html-тела, убираем спец.коды html
            string postTitleDecoded = WebUtility.HtmlDecode(postTitle);

            string tweetText = _TwitterTextCreator.CreateTwitterText(url, postTitleDecoded);

            await _TwitterService.TweetWithMedia(tweetText, imageFileName, imageBody);

            _Log.Log("TweetWithMedia done: {0}", DateTime.Now);

            //после успешного твита обновить в базе даты
            _LastTweetUpdater.UpdateLastTweetDate(data);

            _Log.Log("UpdateLastTweetDate done: {0}", DateTime.Now);
        }