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