コード例 #1
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceeded_AssertCreatedTimeWasCalledOnEachLinkInFilteredCollectionOfLinks()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool                willExceedRateLimit    = false;
            Mock <IRedditLink>        link1Mock              = CreateLinkMock();
            Mock <IRedditLink>        link2Mock              = CreateLinkMock();
            Mock <IRedditLink>        link3Mock              = CreateLinkMock();
            IEnumerable <IRedditLink> filteredLinkCollection = new List <IRedditLink>
            {
                link1Mock.Object,
                link2Mock.Object,
                link3Mock.Object
            };
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, filteredLinkCollection: filteredLinkCollection);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            link1Mock.Verify(m => m.CreatedTime, Times.Once);
            link2Mock.Verify(m => m.CreatedTime, Times.Once);
            link3Mock.Verify(m => m.CreatedTime, Times.Once);
        }
コード例 #2
0
        public async Task GetSubredditsForAuthenticatedUserAsync_WhenCalledAndRedditRateLimitHasNotExceeded_ReturnsFilteredCollectionOfSubreddits()
        {
            IRedditAccessToken redditAccessToken = CreateRedditAccessToken();
            bool includeNsfwContent = _random.Next(1, 100) > 50;
            bool onlyNsfwContent    = _random.Next(1, 100) > 50;

            const bool       willExceedRateLimit = false;
            IRedditSubreddit subreddit1          = CreateSubreddit();
            IRedditSubreddit subreddit2          = CreateSubreddit();
            IRedditSubreddit subreddit3          = CreateSubreddit();
            IEnumerable <IRedditSubreddit> filteredSubredditCollection = new List <IRedditSubreddit>
            {
                subreddit1,
                subreddit2,
                subreddit3
            };
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, filteredSubredditCollection: filteredSubredditCollection);

            IEnumerable <IRedditSubreddit> result = await sut.GetSubredditsForAuthenticatedUserAsync(redditAccessToken, includeNsfwContent, onlyNsfwContent);

            Assert.IsNotNull(result);
            Assert.AreEqual(filteredSubredditCollection.Count(), result.Count());
            Assert.IsTrue(result.Contains(subreddit1));
            Assert.IsTrue(result.Contains(subreddit2));
            Assert.IsTrue(result.Contains(subreddit3));
        }
コード例 #3
0
        public async Task BuildAsync_WhenCalled_ReturnsInitializedObjectViewModel()
        {
            string           identifier              = Guid.NewGuid().ToString("D");
            DateTime         createdTime             = DateTime.Now.AddDays(_random.Next(1, 365) * -1).AddMinutes(_random.Next(-120, 120));
            string           displayNamePrefixed     = Guid.NewGuid().ToString("D");
            string           publicDescriptionAsText = _random.Next(1, 100) > 50 ? Guid.NewGuid().ToString() : null;
            long             subscribers             = _random.Next(2500, 5000);
            Uri              url             = _random.Next(1, 100) > 50 ? new Uri($"http://locahost/{Guid.NewGuid().ToString("D")}") : null;
            Uri              bannerImageUrl  = _random.Next(1, 100) > 50 ? new Uri($"http://locahost/{Guid.NewGuid().ToString("D")}.png") : null;
            Uri              headerImageUrl  = _random.Next(1, 100) > 50 ? new Uri($"http://locahost/{Guid.NewGuid().ToString("D")}.png") : null;
            IRedditSubreddit redditSubreddit = CreateRedditSubreddit(identifier, createdTime, displayNamePrefixed, publicDescriptionAsText, subscribers, url, bannerImageUrl, headerImageUrl);

            IViewModelBuilder <ObjectViewModel <IRedditSubreddit>, IRedditSubreddit> sut = CreateSut();

            ObjectViewModel <IRedditSubreddit> result = await sut.BuildAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.ObjectIdentifier);
            Assert.AreEqual(identifier, result.ObjectIdentifier);
            Assert.IsNotNull(result.Object);
            Assert.AreEqual(redditSubreddit, result.Object);
            Assert.AreEqual(createdTime, result.Timestamp);
            Assert.IsNotNull(result.Html);
            Assert.AreEqual(GetExpectedHtml(displayNamePrefixed, publicDescriptionAsText, subscribers, url, bannerImageUrl ?? headerImageUrl), result.Html);
        }
コード例 #4
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceeded_ReturnsFilteredCollectionOfLinks()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool  willExceedRateLimit = false;
            IRedditLink link1 = CreateLink();
            IRedditLink link2 = CreateLink();
            IRedditLink link3 = CreateLink();
            IEnumerable <IRedditLink> filteredLinkCollection = new List <IRedditLink>
            {
                link1,
                link2,
                link3
            };
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, filteredLinkCollection: filteredLinkCollection);

            IEnumerable <IRedditLink> result = await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            Assert.IsNotNull(result);
            Assert.AreEqual(filteredLinkCollection.Count(), result.Count());
            Assert.IsTrue(result.Contains(link1));
            Assert.IsTrue(result.Contains(link2));
            Assert.IsTrue(result.Contains(link3));
        }
コード例 #5
0
 private string GetDisplayNamePrefixedForSubreddit(IRedditSubreddit subreddit)
 {
     if (subreddit == null)
     {
         return(null);
     }
     return(subreddit.DisplayNamePrefixed);
 }
コード例 #6
0
        public async Task GetLinksAsync_WhenSubredditIsNull_ThrowsArgumentNullException()
        {
            IRedditAccessToken     accessToken = CreateRedditAccessToken();
            const IRedditSubreddit subreddit   = null;

            IRedditRepository sut = CreateSut();

            await sut.GetLinksAsync(accessToken, subreddit);
        }
コード例 #7
0
        public async Task ExportAsync_WhenCalled_AssertHandleAsyncWasNotCalledOnExceptionHandler()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            IRedditSubreddit redditSubreddit = BuildRedditSubreddit();
            await sut.ExportAsync(redditSubreddit);

            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.IsAny <AggregateException>()), Times.Never);
            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.IsAny <Exception>()), Times.Never);
        }
コード例 #8
0
        public async Task ExportAsync_WhenRedditSubredditIsWithoutBannerImageUrlAndWithoutHeaderImageUrl_ReturnsDashboardItemExportModelWithoutImageUrl()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit();
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.IsNull(result.ImageUrl);
        }
コード例 #9
0
        public async Task ExportAsync_WhenCalled_ReturnsDashboardItemExportModelWithoutAuthor()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit();
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.IsNull(result.Author);
        }
コード例 #10
0
        public async Task ExportAsync_WhenRedditSubredditIsWithBannerImageUrl_ReturnsDashboardItemExportModelWithImageUrlFromRedditSubreddit()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            Uri bannerImageUrl = new Uri($"http://localhost/{Guid.NewGuid().ToString("D")}/{Guid.NewGuid().ToString("D")}");
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(bannerImageUrl: bannerImageUrl);
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(bannerImageUrl.AbsoluteUri, result.ImageUrl);
        }
コード例 #11
0
        public async Task ExportAsync_WhenRedditSubredditIsWithDescriptionAsText_ReturnsDashboardItemExportModelWithDetailsFromRedditSubreddit()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            string                   descriptionAsText = Guid.NewGuid().ToString("D");
            IRedditSubreddit         redditSubreddit   = BuildRedditSubreddit(descriptionAsText: descriptionAsText);
            DashboardItemExportModel result            = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(descriptionAsText, result.Details);
        }
コード例 #12
0
        public async Task ExportAsync_WhenCalled_ReturnsDashboardItemExportModelWithIdentifierFromRedditSubreddit()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            string                   fullName        = Guid.NewGuid().ToString("D");
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(fullName);
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(fullName, result.Identifier);
        }
コード例 #13
0
        public async Task GetLinksAsync_WhenSubredditIsNull_ThrowsArgumentNullException()
        {
            IRedditAccessToken     accessToken = CreateRedditAccessToken();
            const IRedditSubreddit subreddit   = null;
            bool includeNsfwContent            = _random.Next(100) > 50;
            bool onlyNsfwContent = _random.Next(100) > 50;

            IRedditLogic sut = CreateSut();

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);
        }
コード例 #14
0
        public async Task ExportAsync_WhenRedditSubredditIsWithoutDescriptionAsTextAndWithoutPublicDescriptionAsText_ReturnsDashboardItemExportModelWithoutDetails()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            string                   title           = Guid.NewGuid().ToString("D");
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(title: title);
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.IsNull(result.Details);
        }
コード例 #15
0
        public async Task ExportAsync_WhenCalled_ReturnsDashboardItemExportModelWithTimestampFromRedditSubreddit()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            DateTime                 createdTime     = DateTime.Now.AddSeconds(_random.Next(300, 3600) * -1);
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(createdTime: createdTime);
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(createdTime, result.Timestamp);
        }
コード例 #16
0
        public async Task ExportAsync_WhenCalled_ReturnsDashboardItemExportModelWithInformationFromRedditSubreddit()
        {
            IModelExporter <DashboardItemExportModel, IRedditSubreddit> sut = CreateSut();

            string                   title           = Guid.NewGuid().ToString("D");
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(title: title);
            DashboardItemExportModel result          = await sut.ExportAsync(redditSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(title, result.Information);
        }
コード例 #17
0
        public async Task GetSpecificSubredditAsync_WhenCalledAndRedditRateLimitHasExceeded_ReturnsNull()
        {
            IRedditAccessToken    accessToken    = CreateRedditAccessToken();
            IRedditKnownSubreddit knownSubreddit = CreateRedditKnownSubreddit();

            const bool   willExceedRateLimit = true;
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit);

            IRedditSubreddit result = await sut.GetSpecificSubredditAsync(accessToken, knownSubreddit);

            Assert.IsNull(result);
        }
コード例 #18
0
        public async Task ExportAsync_WhenRedditLinkIsWithRedditSubreddit_ReturnsDashboardItemExportModelWithProviderFromRedditLink()
        {
            IModelExporter <DashboardItemExportModel, IRedditLink> sut = CreateSut();

            string                   fullName        = Guid.NewGuid().ToString("D");
            IRedditSubreddit         redditSubreddit = BuildRedditSubreddit(fullName);
            IRedditLink              redditLink      = BuildRedditLink(redditSubreddit: redditSubreddit);
            DashboardItemExportModel result          = await sut.ExportAsync(redditLink);

            Assert.IsNotNull(result);
            Assert.AreEqual(fullName, result.Provider);
        }
コード例 #19
0
        public async Task GetSpecificSubredditAsync_WhenCalledAndRedditRateLimitHasNotExceededAndExceptionOccurs_ReturnsNull()
        {
            IRedditAccessToken    accessToken    = CreateRedditAccessToken();
            IRedditKnownSubreddit knownSubreddit = CreateRedditKnownSubreddit();

            const bool   willExceedRateLimit = false;
            Exception    exception           = new Exception();
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, exception: exception);

            IRedditSubreddit result = await sut.GetSpecificSubredditAsync(accessToken, knownSubreddit);

            Assert.IsNull(result);
        }
コード例 #20
0
        public async Task GetLinksAsync_WhenCalled_AssertWillExceedRateLimitWasCalledOnRedditRateLimitLogic()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            IRedditLogic sut = CreateSut();

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _redditRateLimitLogicMock.Verify(m => m.WillExceedRateLimit(It.Is <int>(value => value == 1)), Times.Once);
        }
コード例 #21
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceededAndOnlyNsfwContentIsFalse_AssertRemoveNoneNsfwContentAsyncWasNotCalledOnRedditFilterLogic()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool       includeNsfwContent  = _random.Next(100) > 50;
            const bool onlyNsfwContent     = false;

            const bool   willExceedRateLimit = false;
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _redditFilterLogicMock.Verify(m => m.RemoveNoneNsfwContentAsync(It.IsAny <IEnumerable <IRedditLink> >()), Times.Never);
        }
コード例 #22
0
        public async Task GetLinksAsync_WhenCalled_AssertHandleAsyncWasCalledOnExceptionHandler()
        {
            IRedditAccessToken redditAccessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit         = CreateRedditSubreddit();

            IRedditRepository sut = CreateSut();

            await sut.GetLinksAsync(redditAccessToken, subreddit);

            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.Is <Exception>(exception =>
                                                                              exception != null &&
                                                                              exception.InnerException == null &&
                                                                              exception.GetType() == typeof(UnauthorizedAccessException))),
                                         Times.Once());
        }
コード例 #23
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasExceeded_ReturnsEmptyCollection()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool   willExceedRateLimit = true;
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit);

            IEnumerable <IRedditLink> result = await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Any());
        }
コード例 #24
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceededAndExceptionOccurs_AssertHandleAsyncWasCalledOnExceptionHandler()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool   willExceedRateLimit = false;
            Exception    exception           = new Exception();
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, exception: exception);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.Is <Exception>(value => value == exception)), Times.Once);
        }
コード例 #25
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceeded_AssertHandleAsyncWasNotCalledOnExceptionHandler()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool   willExceedRateLimit = false;
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.IsAny <AggregateException>()), Times.Never);
            _exceptionHandlerMock.Verify(m => m.HandleAsync(It.IsAny <Exception>()), Times.Never);
        }
コード例 #26
0
        public async Task GetSpecificSubredditAsync_WhenCalledAndRedditRateLimitHasNotExceeded_ReturnsSubreddit()
        {
            IRedditAccessToken    accessToken    = CreateRedditAccessToken();
            IRedditKnownSubreddit knownSubreddit = CreateRedditKnownSubreddit();

            const bool       willExceedRateLimit = false;
            IRedditSubreddit subreddit           = CreateSubreddit();
            IRedditResponse <IRedditSubreddit> redditResponse = CreateRedditResponse(subreddit: subreddit);
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, redditResponse: redditResponse);

            IRedditSubreddit result = await sut.GetSpecificSubredditAsync(accessToken, knownSubreddit);

            Assert.IsNotNull(result);
            Assert.AreEqual(subreddit, result);
        }
コード例 #27
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceededAndOnlyNsfwContentIsTrue_AssertRemoveNoneNsfwContentAsyncWasCalledOnRedditFilterLogic()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool       includeNsfwContent  = _random.Next(100) > 50;
            const bool onlyNsfwContent     = true;

            const bool willExceedRateLimit = false;
            IEnumerable <IRedditLink> filteredLinkCollection = new List <IRedditLink>(0);
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, filteredLinkCollection: filteredLinkCollection);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _redditFilterLogicMock.Verify(m => m.RemoveNoneNsfwContentAsync(It.Is <IEnumerable <IRedditLink> >(value => value == filteredLinkCollection)), Times.Once);
        }
コード例 #28
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceededAndExceptionOccurs_ReturnsEmptyLinkCollection()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool   willExceedRateLimit = false;
            Exception    exception           = new Exception();
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, exception: exception);

            IEnumerable <IRedditLink> result = await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.Count());
        }
コード例 #29
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasNotExceeded_AssertRemoveUserBannedContentAsyncWasCalledOnRedditFilterLogic()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool willExceedRateLimit       = false;
            IRedditList <IRedditLink> redditList = CreateRedditList();
            IRedditResponse <IRedditList <IRedditLink> > redditResponse = CreateRedditResponse(redditList: redditList);
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit, redditResponse: redditResponse);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _redditFilterLogicMock.Verify(m => m.RemoveUserBannedContentAsync(It.Is <IEnumerable <IRedditLink> >(value => value == redditList)), Times.Once);
        }
コード例 #30
0
        public async Task GetLinksAsync_WhenCalledAndRedditRateLimitHasExceeded_AssertGetLinksAsyncWasNotCalledOnRedditRepository()
        {
            IRedditAccessToken accessToken = CreateRedditAccessToken();
            IRedditSubreddit   subreddit   = CreateSubreddit();
            bool includeNsfwContent        = _random.Next(100) > 50;
            bool onlyNsfwContent           = _random.Next(100) > 50;

            const bool   willExceedRateLimit = true;
            IRedditLogic sut = CreateSut(willExceedRateLimit: willExceedRateLimit);

            await sut.GetLinksAsync(accessToken, subreddit, includeNsfwContent, onlyNsfwContent);

            _redditRepositoryMock.Verify(m => m.GetLinksAsync(
                                             It.IsAny <IRedditAccessToken>(),
                                             It.IsAny <IRedditSubreddit>()),
                                         Times.Never);
        }