public void ToCookie(DashboardSettingsViewModel dashboardSettingsViewModel) { if (dashboardSettingsViewModel == null) { throw new ArgumentNullException(nameof(dashboardSettingsViewModel)); } StoreCookie(DashboardSettingsViewModel.CookieName, dashboardSettingsViewModel, viewModel => _contentHelper.ToBase64String(viewModel), (viewModel, secureHttpRequest) => { DateTime expires = DateTime.Now.AddHours(8); if (string.IsNullOrWhiteSpace(viewModel.RedditAccessToken) == false) { IRedditAccessToken redditAccessToken = RedditAccessToken.Create(viewModel.RedditAccessToken); if (redditAccessToken != null && redditAccessToken.Expires <= expires) { expires = redditAccessToken.Expires; } } return(new CookieOptions { Expires = expires, Secure = secureHttpRequest, SameSite = SameSiteMode.None }); }); }
public void ToCookie_WhenCalledWithDashboardSettingsViewModelWithRedditAccessTokenAndResponseCookiesWasReturnedButCookieValueToStoreWasReturned_AssertAppendWasCalledOnReturnedResponseCookies() { bool isHttps = _random.Next(100) > 50; HttpRequest httpRequest = BuildHttpRequest(isHttps); string cookieValueToStore = Guid.NewGuid().ToString("D"); Mock <IResponseCookies> responseCookiesMock = BuildResponseCookiesMock(); HttpResponse httpResponse = BuildHttpResponse(responseCookies: responseCookiesMock.Object); HttpContext httpContext = BuildHttpContext(httpRequest: httpRequest, httpResponse: httpResponse); ICookieHelper sut = CreateSut(cookieValueToStore: cookieValueToStore, httpContext: httpContext); int expiresIn = _random.Next(5, 60) * 60; DateTime received = DateTime.UtcNow; string redditAccessTokenAsBase64 = BuildRedditAccessTokenAsBase64(_random, expiresIn, received); DateTime expires = received.AddSeconds(expiresIn).ToLocalTime(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, redditAccessTokenAsBase64); sut.ToCookie(dashboardSettingsViewModel); responseCookiesMock.Verify(m => m.Append( It.Is <string>(value => string.CompareOrdinal(value, DashboardSettingsViewModel.CookieName) == 0), It.Is <string>(value => string.CompareOrdinal(value, BuildBase64String(cookieValueToStore)) == 0), It.Is <CookieOptions>(value => value != null && value.Expires >= expires.AddSeconds(-5) && value.Expires <= expires.AddSeconds(5) && value.Secure == isHttps && value.SameSite == SameSiteMode.None)), Times.Once); }
public void Index_WhenCookieWithDashboardSettingsWasNotFound_ReturnsViewResultWithDashboardSettingsViewModel() { OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(); IActionResult result = sut.Index(); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(ViewResult)); ViewResult viewResult = (ViewResult)result; Assert.IsNotNull(viewResult); Assert.IsNotNull(viewResult.ViewName); Assert.AreEqual("Index", viewResult.ViewName); Assert.IsNotNull(viewResult.Model); Assert.IsInstanceOfType(viewResult.Model, typeof(DashboardSettingsViewModel)); DashboardSettingsViewModel dashboardSettingsViewModel = (DashboardSettingsViewModel)viewResult.Model; Assert.IsNotNull(dashboardSettingsViewModel); Assert.AreEqual(100, dashboardSettingsViewModel.NumberOfNews); Assert.IsFalse(dashboardSettingsViewModel.UseReddit); Assert.IsFalse(dashboardSettingsViewModel.AllowNsfwContent); Assert.IsNotNull(dashboardSettingsViewModel.IncludeNsfwContent); Assert.IsFalse(dashboardSettingsViewModel.IncludeNsfwContent.Value); Assert.IsFalse(dashboardSettingsViewModel.NotNullableIncludeNsfwContent); Assert.IsNotNull(dashboardSettingsViewModel.OnlyNsfwContent); Assert.IsFalse(dashboardSettingsViewModel.OnlyNsfwContent.Value); Assert.IsFalse(dashboardSettingsViewModel.NotNullableOnlyNsfwContent); Assert.IsNull(dashboardSettingsViewModel.RedditAccessToken); Assert.IsFalse(dashboardSettingsViewModel.ExportData); }
public async Task BuildAsync_WhenCalled_ReturnsInitializedDashboardViewModel() { List <INews> newsCollection = CreateNewsCollection(_random.Next(50, 75)).ToList(); List <ISystemError> systemErrorCollection = CreateSystemErrorCollection(_random.Next(10, 15)).ToList(); IDashboardSettings dashboardSettings = CreateDashboardSettings(); IRedditAuthenticatedUser redditAuthenticatedUser = CreateRedditAuthenticatedUser(); List <IRedditSubreddit> redditSubredditCollection = CreateRedditSubredditCollection(_random.Next(10, 25)).ToList(); List <IRedditLink> redditLinkCollection = CreateRedditLinkCollection(_random.Next(50, 75)).ToList(); IDashboard dashboard = CreateDashboard(newsCollection: newsCollection, systemErrorCollection: systemErrorCollection, dashboardSettings: dashboardSettings, redditAuthenticatedUser: redditAuthenticatedUser, redditSubredditCollection: redditSubredditCollection, redditLinkCollection: redditLinkCollection); DashboardSettingsViewModel dashboardSettingsViewModel = CreateDashboardSettingsViewModel(); ObjectViewModel <IRedditAuthenticatedUser> objectViewModelForRedditAuthenticatedUser = CreateObjectViewModel <IRedditAuthenticatedUser>(redditAuthenticatedUser, DateTime.Now.AddDays(_random.Next(1, 365) * -1).AddMinutes(_random.Next(-120, 120))); IViewModelBuilder <DashboardViewModel, IDashboard> sut = CreateSut(dashboardSettingsViewModel: dashboardSettingsViewModel, objectViewModelForRedditAuthenticatedUser: objectViewModelForRedditAuthenticatedUser); DashboardViewModel result = await sut.BuildAsync(dashboard); Assert.IsNotNull(result); Assert.IsNotNull(result.Informations); Assert.AreEqual(newsCollection.Count + redditLinkCollection.Count, result.Informations.Count()); Assert.IsNotNull(result.LatestInformationsWithImage); Assert.AreEqual(Math.Min(result.Informations.Count(information => string.IsNullOrWhiteSpace(information.ImageUrl) == false), 7), result.LatestInformationsWithImage.Count()); Assert.IsNotNull(result.SystemErrors); Assert.AreEqual(systemErrorCollection.Count, result.SystemErrors.Count()); Assert.IsNotNull(result.Settings); Assert.AreEqual(dashboardSettingsViewModel, result.Settings); Assert.IsNotNull(result.RedditAuthenticatedUser); Assert.AreEqual(objectViewModelForRedditAuthenticatedUser, result.RedditAuthenticatedUser); Assert.IsNotNull(result.RedditSubreddits); Assert.AreEqual(redditSubredditCollection.Count, result.RedditSubreddits.Count()); }
public void ToDashboardSettingsViewModel_WhenHttpContextWasNotReturned_ReturnsNull() { ICookieHelper sut = CreateSut(hasHttpContext: false); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(); Assert.IsNull(result); }
public void ToDashboardSettingsViewModel_WhenBase64StringIsNotBase64String_ReturnsNull() { IContentHelper sut = CreateSut(); string base64String = Guid.NewGuid().ToString("D"); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(base64String); Assert.IsNull(result); }
public void ToDashboardSettingsViewModel_WhenHttpContextWasReturnedButHttpRequestWasNotReturned_ReturnsNull() { HttpContext httpContext = BuildHttpContext(false); ICookieHelper sut = CreateSut(httpContext: httpContext); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(); Assert.IsNull(result); }
public string ToBase64String(DashboardSettingsViewModel dashboardSettingsViewModel) { if (dashboardSettingsViewModel == null) { throw new ArgumentNullException(nameof(dashboardSettingsViewModel)); } return(Convert.ToBase64String(ToByteArray(dashboardSettingsViewModel))); }
public void ToDashboardSettingsViewModel_WhenByteArrayCannotBeDeserialized_ReturnsNull() { IContentHelper sut = CreateSut(); byte[] byteArray = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString("D")); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(byteArray); Assert.IsNull(result); }
public void ToDashboardSettingsViewModel_WhenBase64StringCannotBeDeserialized_ReturnsNull() { IContentHelper sut = CreateSut(); string base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString("D"))); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(base64String); Assert.IsNull(result); }
public void ToBase64String_WhenCalledWithDashboardSettingsViewModel_AssertCreateProtectorWasCalledOnDataProtectionProviderWithSettingsProtection() { IContentHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(); sut.ToBase64String(dashboardSettingsViewModel); _dataProtectionProviderMock.Verify(m => m.CreateProtector(It.Is <string>(value => string.CompareOrdinal(value, "SettingsProtection") == 0)), Times.Once); }
public async Task Commit_WhenDashboardSettingsViewModelIsWithUseOfRedditAndWithoutRedditAccessToken_AssertToBase64StringWasCalledOnContentHelperWithDashboardSettingsViewModel() { OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, useReddit: true, redditAccessToken: null); await sut.Commit(dashboardSettingsViewModel); _contentHelperMock.Verify(m => m.ToBase64String(It.Is <DashboardSettingsViewModel>(value => value == dashboardSettingsViewModel)), Times.Once); }
public async Task Commit_WhenDashboardSettingsViewModelIsWithoutUseOfReddit_AssertAcquireRedditAuthorizationTokenAsyncWasNotCalledOnRedditAccessTokenProviderFactory() { OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, useReddit: false); await sut.Commit(dashboardSettingsViewModel); _redditAccessTokenProviderFactoryMock.Verify(m => m.AcquireRedditAuthorizationTokenAsync(It.IsAny <string>(), It.IsAny <Uri>()), Times.Never); }
public async Task Commit_WhenDashboardSettingsViewModelIsWithoutUseOfReddit_AssertAbsoluteUrlWasNotCalledOnContentHelper() { OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, useReddit: false); await sut.Commit(dashboardSettingsViewModel); _contentHelperMock.Verify(m => m.AbsoluteUrl(It.IsAny <string>(), It.IsAny <string>()), Times.Never); }
public void ToBase64String_WhenCalledWithDashboardSettingsViewModel_AssertProtectWasCalledOnDataProtector() { IContentHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(); sut.ToBase64String(dashboardSettingsViewModel); _dataProtectorMock.Verify(m => m.Protect(It.Is <byte[]>(value => value != null && value.Length > 0)), Times.Once); }
public void ToCookie_WhenCalledWithDashboardSettingsViewModel_AssertHttpContextWasCalledOnHttpContextAccessor() { ICookieHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random); sut.ToCookie(dashboardSettingsViewModel); _httpContextAccessorMock.Verify(m => m.HttpContext, Times.Exactly(2)); }
public void ToDashboardSettingsViewModel_WhenBase64StringCanBeDeserializedAndCryptographicExceptionWasThrown_ReturnsNull() { CryptographicException exception = new CryptographicException(); IContentHelper sut = CreateSut(exception); string base64String = BuildDashboardSettingsViewModelAsBase64String(); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(base64String); Assert.IsNull(result); }
public void ToCookie_WhenCalledWithDashboardSettingsViewModelAndHttpContextWasNotReturned_AssertToBase64StringWasNotCalledOnContentHelperWithDashboardSettingsViewModel() { ICookieHelper sut = CreateSut(hasHttpContext: false); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random); sut.ToCookie(dashboardSettingsViewModel); _contentHelperMock.Verify(m => m.ToBase64String(It.IsAny <DashboardSettingsViewModel>()), Times.Never); }
public void ToCookie_WhenCalledWithDashboardSettingsViewModelAndResponseCookiesWasReturned_AssertToBase64StringWasCalledOnContentHelperWithDashboardSettingsViewModel() { ICookieHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random); sut.ToCookie(dashboardSettingsViewModel); _contentHelperMock.Verify(m => m.ToBase64String(It.Is <DashboardSettingsViewModel>(value => value == dashboardSettingsViewModel)), Times.Once); }
public void ToDashboardSettingsViewModel_WhenByteArrayCanBeDeserializedAndCryptographicExceptionWasThrown_ReturnsNull() { CryptographicException exception = new CryptographicException(); IContentHelper sut = CreateSut(exception); byte[] byteArray = BuildDashboardSettingsViewModelAsByteArray(); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(byteArray); Assert.IsNull(result); }
public IActionResult Settings() { DashboardSettingsViewModel dashboardSettingsViewModel = _cookieHelper.ToDashboardSettingsViewModel(); if (dashboardSettingsViewModel == null) { return(BadRequest()); } return(PartialView("_DashboardSettingsPartial", dashboardSettingsViewModel)); }
public byte[] ToByteArray(DashboardSettingsViewModel dashboardSettingsViewModel) { if (dashboardSettingsViewModel == null) { throw new ArgumentNullException(nameof(dashboardSettingsViewModel)); } IDataProtector dataProtector = _dataProtectionProvider.CreateProtector("SettingsProtection"); return(dataProtector.Protect(JsonSerialization.ToByteArray(dashboardSettingsViewModel))); }
public void ToByteArray_WhenCalledWithDashboardSettingsViewModel_ReturnsByteArray() { IContentHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(); byte[] result = sut.ToByteArray(dashboardSettingsViewModel); Assert.IsNotNull(result); Assert.IsTrue(result.Length > 0); }
public async Task Build_WhenDashboardSettingsCanBeConvertedToDashboardSettingsViewModel_AssertBuildAsyncWasCalledOnDashboardFactoryWithRedditAccessTokenFromDashboardSettingsViewModel() { string redditAccessToken = BuildRedditAccessToken(_random).ToBase64(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, redditAccessToken: redditAccessToken); OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(dashboardSettingsViewModel: dashboardSettingsViewModel); await sut.Build(Guid.NewGuid().ToString("D")); _dashboardFactoryMock.Verify(m => m.BuildAsync(It.Is <IDashboardSettings>(value => value != null && value.RedditAccessToken != null && string.CompareOrdinal(value.RedditAccessToken.ToBase64(), redditAccessToken) == 0)), Times.Once); }
public async Task Build_WhenDashboardSettingsCanBeConvertedToDashboardSettingsViewModel_AssertBuildAsyncWasCalledOnDashboardFactoryWithNumberOfNewsFromDashboardSettingsViewModel() { int numberOfNews = _random.Next(25, 50); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, numberOfNews); OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(dashboardSettingsViewModel: dashboardSettingsViewModel); await sut.Build(Guid.NewGuid().ToString("D")); _dashboardFactoryMock.Verify(m => m.BuildAsync(It.Is <IDashboardSettings>(value => value != null && value.NumberOfNews == numberOfNews)), Times.Once); }
public async Task Build_WhenDashboardSettingsCanBeConvertedToDashboardSettingsViewModel_AssertBuildAsyncWasCalledOnDashboardFactoryWithOnlyNsfwContentFromDashboardSettingsViewModel() { bool onlyNsfwContent = _random.Next(100) > 50; DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random, onlyNsfwContent: onlyNsfwContent); OSDevGrp.MyDashboard.Web.Controllers.HomeController sut = CreateSut(dashboardSettingsViewModel: dashboardSettingsViewModel); await sut.Build(Guid.NewGuid().ToString("D")); _dashboardFactoryMock.Verify(m => m.BuildAsync(It.Is <IDashboardSettings>(value => value != null && value.OnlyNsfwContent == onlyNsfwContent)), Times.Once); }
public void ToBase64String_WhenCalledWithDashboardSettingsViewModel_ReturnsBase64String() { IContentHelper sut = CreateSut(); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(); string result = sut.ToBase64String(dashboardSettingsViewModel); Assert.IsNotNull(result); Assert.IsTrue(result.Length > 0); Assert.IsTrue(result.Trim().Length % 4 == 0 && _base64StringRegex.IsMatch(result.Trim())); }
public void ToCookie_WhenCalledWithDashboardSettingsViewModelAndHttpContextWasReturned_AssertRequestWasCalledOnReturnedHttpContext() { Mock <HttpContext> httpContextMock = BuildHttpContextMock(); ICookieHelper sut = CreateSut(httpContext: httpContextMock.Object); DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random); sut.ToCookie(dashboardSettingsViewModel); httpContextMock.Verify(m => m.Request, Times.Once); }
public void ToDashboardSettingsViewModel_WhenCookieValueCannotBeConvertedToDashboardSettingsViewModel_ReturnsNull() { IRequestCookieCollection requestCookieCollection = BuildRequestCookieCollection(BuildBase64String()); HttpRequest httpRequest = BuildHttpRequest(requestCookieCollection: requestCookieCollection); HttpContext httpContext = BuildHttpContext(httpRequest: httpRequest); ICookieHelper sut = CreateSut(false, httpContext: httpContext); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(); Assert.IsNull(result); }
public void ToDashboardSettingsViewModel_WhenRequestCookieCollectiontWasReturnedButDoNotContainCookieNameForDashboardSettingsViewModel_ReturnsNull() { IRequestCookieCollection requestCookieCollection = BuildRequestCookieCollection(); HttpRequest httpRequest = BuildHttpRequest(requestCookieCollection: requestCookieCollection); HttpContext httpContext = BuildHttpContext(httpRequest: httpRequest); ICookieHelper sut = CreateSut(httpContext: httpContext); DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(); Assert.IsNull(result); }