Esempio n. 1
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);
        }
Esempio n. 2
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));
            }
        }