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); }
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)); }
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); }
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)); }
private string GetDisplayNamePrefixedForSubreddit(IRedditSubreddit subreddit) { if (subreddit == null) { return(null); } return(subreddit.DisplayNamePrefixed); }
public async Task GetLinksAsync_WhenSubredditIsNull_ThrowsArgumentNullException() { IRedditAccessToken accessToken = CreateRedditAccessToken(); const IRedditSubreddit subreddit = null; IRedditRepository sut = CreateSut(); await sut.GetLinksAsync(accessToken, subreddit); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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()); }
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); }
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); }
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); }
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); }
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()); }
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); }
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); }