Beispiel #1
0
        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
                });
            });
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
        public void ToDashboardSettingsViewModel_WhenHttpContextWasNotReturned_ReturnsNull()
        {
            ICookieHelper sut = CreateSut(hasHttpContext: false);

            DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel();

            Assert.IsNull(result);
        }
Beispiel #6
0
        public void ToDashboardSettingsViewModel_WhenBase64StringIsNotBase64String_ReturnsNull()
        {
            IContentHelper sut = CreateSut();

            string base64String = Guid.NewGuid().ToString("D");
            DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(base64String);

            Assert.IsNull(result);
        }
Beispiel #7
0
        public void ToDashboardSettingsViewModel_WhenHttpContextWasReturnedButHttpRequestWasNotReturned_ReturnsNull()
        {
            HttpContext   httpContext = BuildHttpContext(false);
            ICookieHelper sut         = CreateSut(httpContext: httpContext);

            DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel();

            Assert.IsNull(result);
        }
Beispiel #8
0
        public string ToBase64String(DashboardSettingsViewModel dashboardSettingsViewModel)
        {
            if (dashboardSettingsViewModel == null)
            {
                throw new ArgumentNullException(nameof(dashboardSettingsViewModel));
            }

            return(Convert.ToBase64String(ToByteArray(dashboardSettingsViewModel)));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        public void ToCookie_WhenCalledWithDashboardSettingsViewModel_AssertHttpContextWasCalledOnHttpContextAccessor()
        {
            ICookieHelper sut = CreateSut();

            DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel(_random);

            sut.ToCookie(dashboardSettingsViewModel);

            _httpContextAccessorMock.Verify(m => m.HttpContext, Times.Exactly(2));
        }
Beispiel #17
0
        public void ToDashboardSettingsViewModel_WhenBase64StringCanBeDeserializedAndCryptographicExceptionWasThrown_ReturnsNull()
        {
            CryptographicException exception = new CryptographicException();
            IContentHelper         sut       = CreateSut(exception);

            string base64String = BuildDashboardSettingsViewModelAsBase64String();
            DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(base64String);

            Assert.IsNull(result);
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        public void ToDashboardSettingsViewModel_WhenByteArrayCanBeDeserializedAndCryptographicExceptionWasThrown_ReturnsNull()
        {
            CryptographicException exception = new CryptographicException();
            IContentHelper         sut       = CreateSut(exception);

            byte[] byteArray = BuildDashboardSettingsViewModelAsByteArray();
            DashboardSettingsViewModel result = sut.ToDashboardSettingsViewModel(byteArray);

            Assert.IsNull(result);
        }
Beispiel #21
0
        public IActionResult Settings()
        {
            DashboardSettingsViewModel dashboardSettingsViewModel = _cookieHelper.ToDashboardSettingsViewModel();

            if (dashboardSettingsViewModel == null)
            {
                return(BadRequest());
            }

            return(PartialView("_DashboardSettingsPartial", dashboardSettingsViewModel));
        }
Beispiel #22
0
        public byte[] ToByteArray(DashboardSettingsViewModel dashboardSettingsViewModel)
        {
            if (dashboardSettingsViewModel == null)
            {
                throw new ArgumentNullException(nameof(dashboardSettingsViewModel));
            }

            IDataProtector dataProtector = _dataProtectionProvider.CreateProtector("SettingsProtection");

            return(dataProtector.Protect(JsonSerialization.ToByteArray(dashboardSettingsViewModel)));
        }
Beispiel #23
0
        public void ToByteArray_WhenCalledWithDashboardSettingsViewModel_ReturnsByteArray()
        {
            IContentHelper sut = CreateSut();

            DashboardSettingsViewModel dashboardSettingsViewModel = BuildDashboardSettingsViewModel();

            byte[] result = sut.ToByteArray(dashboardSettingsViewModel);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Length > 0);
        }
Beispiel #24
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);
        }
Beispiel #25
0
        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);
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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()));
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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);
        }