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)); }
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); } }