Exemple #1
0
        public void LoginAsGuestUserCommandTest()
        {
            User user = new User()
            {
                Email = "*****@*****.**", Password = "******"
            };
            ApiConnectorMock mock = new ApiConnectorMock();

            mock.Replies.Push(new ApiReply <User>()
            {
                WasSuccessful = true,
                Result        = User.GuestUser,
            });
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            LoginViewModel viewModel = new LoginViewModel(navigationManagerMock, authenticationStateProvider, mock, new EntityChangeValidator <User>())
            {
                User = user
            };

            viewModel.LoginAsGuestUserCommand.ExecuteCommand();

            Assert.AreSame(User.GuestUser, mock.Parameters.Pop());
            Assert.AreEqual("Users/Login", mock.Routes.Pop());
            Assert.AreEqual(HttpMethod.Post, mock.Methods.Pop());
        }
        public async Task ValidatesConfirmPasswordTest()
        {
            User user = new User()
            {
                Email = "*****@*****.**", Password = "******"
            };
            ApiConnectorMock                  mock = new ApiConnectorMock();
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            SignupViewModel viewModel = new SignupViewModel(navigationManagerMock, authenticationStateProvider, mock, new EntityChangeValidator <User>())
            {
                User            = user,
                ConfirmPassword = "******"
            };

            await viewModel.SubmitAsync();

            Assert.IsTrue(viewModel.HasConfirmPasswordError);
            Assert.IsFalse(string.IsNullOrEmpty(viewModel.ErrorMessage));

            viewModel.ConfirmPassword = "******";
            mock.Replies.Push(new ApiReply <User>()
            {
                WasSuccessful = true,
                Result        = user
            });
            await viewModel.SubmitAsync();

            Assert.IsFalse(viewModel.HasConfirmPasswordError);
            Assert.IsTrue(string.IsNullOrEmpty(viewModel.ErrorMessage));
        }
Exemple #3
0
        public async Task InitializeAsyncTest()
        {
            ApiConnectorMock                  mock = new ApiConnectorMock();
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);

            //Not Authenticated
            LoginViewModel viewModel = new LoginViewModel(navigationManagerMock, authenticationStateProvider, mock, new EntityChangeValidator <User>())
            {
                AuthenticationStateTask = Task.FromResult(new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())))
            };
            bool result = await viewModel.InitializeAsync();

            Assert.IsTrue(result);
            Assert.IsNotNull(viewModel.User);

            //Authenticated
            ClaimsIdentity identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, "test") }, "apiauth_type");

            viewModel.AuthenticationStateTask = Task.FromResult(new AuthenticationState(new ClaimsPrincipal(identity)));
            result = await viewModel.InitializeAsync();

            Assert.IsFalse(result);
        }
        public async Task SubmitAsyncTest()
        {
            ApiConnectorMock                  mock = new ApiConnectorMock();
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            TestViewModel viewModel = new TestViewModel(navigationManagerMock, authenticationStateProvider, mock, new EntityChangeValidator <User>());
            await viewModel.SubmitAsync();

            Assert.IsTrue(viewModel.WasSubmitted);
            Assert.IsFalse(viewModel.IsBusy);
        }
        public async Task DoesNotSubmitIfValidationReturnsErrorTest()
        {
            User                         user      = new User();
            ApiConnectorMock             mock      = new ApiConnectorMock();
            EntityChangeValidator <User> validator = new EntityChangeValidator <User>();

            validator.Register(nameof(User.Email), new UserEmailValidator());
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            TestViewModel viewModel = new TestViewModel(navigationManagerMock, authenticationStateProvider, mock, validator)
            {
                User = user
            };
            await viewModel.SubmitAsync();

            Assert.IsFalse(viewModel.WasSubmitted);
            Assert.IsFalse(viewModel.IsBusy);
        }
        private async Task SignupTestCore(bool successful)
        {
            User user = new User()
            {
                Email = "*****@*****.**", Password = "******"
            };
            ApiConnectorMock mock = new ApiConnectorMock();

            mock.Replies.Push(new ApiReply <User>()
            {
                WasSuccessful = successful,
                Result        = successful ? user : null,
                ResultMessage = successful ? null : "test-error"
            });
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            SignupViewModel viewModel = new SignupViewModel(navigationManagerMock, authenticationStateProvider, mock, new EntityChangeValidator <User>())
            {
                User = user
            };

            viewModel.ConfirmPassword = "******";
            await viewModel.SubmitAsync();

            Assert.AreSame(user, mock.Parameters.Pop());
            Assert.AreEqual("Users/Signup", mock.Routes.Pop());
            Assert.AreEqual(HttpMethod.Post, mock.Methods.Pop());

            if (successful)
            {
                Assert.AreSame(user, mock.CurrentUser);
                Assert.AreSame("/", navigationManagerMock.NavigatedUri);
            }
            else
            {
                Assert.AreEqual("test-error", viewModel.ErrorMessage);
            }
        }
        public async Task MarkUserAsAuthenticatedTest()
        {
            LocalStorageServiceMock           localStorageService = new LocalStorageServiceMock();
            ApiConnectorMock                  mock = new ApiConnectorMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageService, mock, navigationManagerMock);
            bool wasStateChanged = false;

            authenticationStateProvider.AuthenticationStateChanged += async(result) =>
            {
                wasStateChanged = true;
                AuthenticationState state = await result;
                Assert.IsNotNull(state.User);
                Assert.AreEqual(user.UserId.ToString(), state.User.Identity.Name);
            };
            await authenticationStateProvider.MarkUserAsAuthenticated(user);

            Assert.IsTrue(wasStateChanged);
            Assert.AreSame(user, mock.CurrentUser);
            Assert.AreEqual(user.AccessToken, localStorageService.SetItems["accessToken"]);
            Assert.AreEqual(user.RefreshToken, localStorageService.SetItems["refreshToken"]);
        }
        public void ValidateUserTest()
        {
            User                              user = new User();
            ApiConnectorMock                  mock = new ApiConnectorMock();
            LocalStorageServiceMock           localStorageServiceMock = new LocalStorageServiceMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageServiceMock, mock, navigationManagerMock);
            EntityChangeValidator <User> validator = new EntityChangeValidator <User>();

            validator.Register(nameof(user.Email), new UserEmailValidator());
            validator.Register(nameof(user.Password), new UserPasswordValidator());
            TestViewModel viewModel = new TestViewModel(navigationManagerMock, authenticationStateProvider, mock, validator)
            {
                User = user
            };

            //Validates empty email
            user.Password = "******";
            viewModel.ExecuteValidateUser();
            Assert.IsTrue(viewModel.HasEmailError);
            Assert.IsFalse(viewModel.HasPasswordError);
            Assert.IsFalse(string.IsNullOrEmpty(viewModel.ErrorMessage));

            //Validates empty password
            user.Email    = "test";
            user.Password = null;
            viewModel.ExecuteValidateUser();
            Assert.IsFalse(viewModel.HasEmailError);
            Assert.IsTrue(viewModel.HasPasswordError);
            Assert.IsFalse(string.IsNullOrEmpty(viewModel.ErrorMessage));

            //No error
            user.Email    = "test";
            user.Password = "******";
            viewModel.ExecuteValidateUser();
            Assert.IsFalse(viewModel.HasEmailError);
            Assert.IsFalse(viewModel.HasPasswordError);
            Assert.IsTrue(string.IsNullOrEmpty(viewModel.ErrorMessage));
        }
        public async Task MarkUserAsLoggedOutTest()
        {
            LocalStorageServiceMock           localStorageService = new LocalStorageServiceMock();
            ApiConnectorMock                  mock = new ApiConnectorMock();
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageService, mock, navigationManagerMock);
            bool wasStateChanged = false;

            authenticationStateProvider.AuthenticationStateChanged += async(result) =>
            {
                wasStateChanged = true;
                AuthenticationState state = await result;
                Assert.IsNull(state.User.Identity.Name);
            };
            await authenticationStateProvider.MarkUserAsAuthenticated(user);

            await authenticationStateProvider.MarkUserAsLoggedOut();

            Assert.IsTrue(wasStateChanged);
            Assert.IsNull(mock.CurrentUser);
            Assert.IsFalse(localStorageService.SetItems.ContainsKey("accessToken"));
            Assert.IsFalse(localStorageService.SetItems.ContainsKey("refreshToken"));
        }
        private async Task GetAuthenticationStateTestCore(bool replySuccessful, bool hasTokensInStorage)
        {
            LocalStorageServiceMock localStorageService = new LocalStorageServiceMock();

            if (hasTokensInStorage)
            {
                localStorageService.GetItemResults.Add("accessToken", user.AccessToken);
                localStorageService.GetItemResults.Add("refreshToken", user.RefreshToken);
            }
            ApiConnectorMock mock = new ApiConnectorMock();

            mock.Replies.Push(new ApiReply <User>()
            {
                WasSuccessful = replySuccessful,
                Result        = replySuccessful ? user : null
            });
            CustomAuthenticationStateProvider authenticationStateProvider
                = new CustomAuthenticationStateProvider(localStorageService, mock, navigationManagerMock);
            bool wasStateChanged = false;

            authenticationStateProvider.AuthenticationStateChanged += async(result) =>
            {
                wasStateChanged = true;
                AuthenticationState state = await result;
                if (replySuccessful && hasTokensInStorage)
                {
                    Assert.IsNotNull(state.User);
                    Assert.AreEqual(user.UserId.ToString(), state.User.Identity.Name);
                }
                else
                {
                    Assert.IsNull(state.User.Identity.Name);
                }
            };
            AuthenticationState state = await authenticationStateProvider.GetAuthenticationStateAsync();

            Assert.IsTrue(wasStateChanged);
            if (replySuccessful && hasTokensInStorage)
            {
                Assert.AreSame(user, mock.CurrentUser);
                Assert.IsNotNull(state.User);
                Assert.AreEqual(user.UserId.ToString(), state.User.Identity.Name);
            }
            else
            {
                Assert.IsNull(state.User.Identity.Name);
                Assert.IsNull(mock.CurrentUser);
            }

            if (hasTokensInStorage)
            {
                Assert.AreEqual(user.AccessToken, mock.Parameters.Pop());
                Assert.AreEqual("Users/GetUserByAccessToken", mock.Routes.Pop());
                Assert.AreEqual(HttpMethod.Post, mock.Methods.Pop());
            }

            if (!hasTokensInStorage || !replySuccessful)
            {
                Assert.AreEqual("/Login", navigationManagerMock.NavigatedUri);
            }
        }