public async Task MergeExistingUserWithGoogle() { var repository = Fixture.GetService <IUsersRepository>(); var passwordHandler = Fixture.GetService <ICreateUserHandler>(); var googleHandler = Fixture.GetService <IAuthenticateGoogleUserHandler>(); var newResult = passwordHandler.Handle(new CreateUser { DisplayName = "Test1", Email = "*****@*****.**", Password = "******" }, new System.Threading.CancellationToken()); var request = new AuthenticateGoogleUser { GoogleId = Guid.NewGuid().ToString(), DisplayName = "Test", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?random" }; var result = await googleHandler.Handle(request, new System.Threading.CancellationToken()); var googleUserExists = await repository.GoogleUserExists("*****@*****.**", request.GoogleId); Assert.NotNull(result); Assert.True(result.IsSuccessful); Assert.NotNull(result.User); Assert.True(googleUserExists); }
public async Task <CreateUserResult> Handle(AuthenticateGoogleUser request, CancellationToken cancellationToken) { var validationResult = await requestValidator.Validate(request); if (!validationResult.IsSuccessful) { return(new CreateUserResult(validationResult.Error)); } if (await usersRepository.GoogleUserExists(request.Email, request.GoogleId)) { return(await UpdateExistingGoogleUser(request)); } else { if (await usersRepository.UserEmailExists(request.Email)) { return(await AddGoogleLoginToExistingUser(request)); } else { return(await CreateNewGoogleUser(request)); } } }
private async Task <CreateUserResult> UpdateExistingGoogleUser(AuthenticateGoogleUser request) { var result = await usersRepository.UpdateGoogleUser(new UpdateGoogleUserModel { Email = request.Email, ImageUrl = request.ImageUrl }); if (!result.IsSuccessful) { return(new CreateUserResult(result.Error)); } return(CreateResult(result.Model)); }
private async Task <CreateUserResult> AddGoogleLoginToExistingUser(AuthenticateGoogleUser request) { var result = await usersRepository.MergeUserWithGoogle(new MergeUserWithGoogleModel { Email = request.Email, GoogleId = request.GoogleId }); if (!result.IsSuccessful) { return(new CreateUserResult(result.Error)); } return(CreateResult(result.Model)); }
public async Task ReturnFailedResultForMissingName() { var validator = new AuthenticateGoogleUserValidator(); var request = new AuthenticateGoogleUser { GoogleId = "123456", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?image=33", }; var result = await validator.Validate(request); Assert.NotNull(result); Assert.False(result.IsSuccessful); Assert.Equal(ValidatorErrors.Users.UserNameRequired, result.Error); }
public async Task ReturnSuccessfulValidationResultForValidRequest() { var validator = new AuthenticateGoogleUserValidator(); var request = new AuthenticateGoogleUser { GoogleId = "123456", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?image=33", DisplayName = "Test" }; var result = await validator.Validate(request); Assert.NotNull(result); Assert.True(result.IsSuccessful); Assert.Null(result.Error); }
public async Task FailForMissingName() { var handler = Fixture.GetService <IAuthenticateGoogleUserHandler>(); var request = new AuthenticateGoogleUser { GoogleId = Guid.NewGuid().ToString(), Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?random" }; var result = await handler.Handle(request, new System.Threading.CancellationToken()); Assert.NotNull(result); Assert.False(result.IsSuccessful); Assert.NotEmpty(result.Error); Assert.Null(result.User); }
public async Task CreateUserForNewEmail() { var handler = Fixture.GetService <IAuthenticateGoogleUserHandler>(); var request = new AuthenticateGoogleUser { GoogleId = Guid.NewGuid().ToString(), DisplayName = "Test", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?random" }; var result = await handler.Handle(request, new System.Threading.CancellationToken()); Assert.NotNull(result); Assert.True(result.IsSuccessful); Assert.NotNull(result.User); }
private async Task <CreateUserResult> CreateNewGoogleUser(AuthenticateGoogleUser request) { var userCode = codeGenerator.Generate(); var result = await usersRepository.CreateGoogleUser(new CreateGoogleUserModel { Code = userCode, Email = request.Email, DisplayName = request.DisplayName, GoogleId = request.GoogleId, ImageUrl = request.ImageUrl }); if (!result.IsSuccessful) { return(new CreateUserResult(result.Error)); } return(CreateResult(result.Model)); }
public async Task CreateUpdateExistingGoogleUser() { var handler = Fixture.GetService <IAuthenticateGoogleUserHandler>(); var googleId = Guid.NewGuid().ToString(); var firstRequest = new AuthenticateGoogleUser { GoogleId = googleId, DisplayName = "Test", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?image=22" }; var newResult = await handler.Handle(firstRequest, new System.Threading.CancellationToken()); var secondRequest = new AuthenticateGoogleUser { GoogleId = googleId, DisplayName = "Test", Email = "*****@*****.**", ImageUrl = "https://picsum.photos/96/96/?image=111" }; var existingResult = await handler.Handle(secondRequest, new System.Threading.CancellationToken()); Assert.NotNull(existingResult); Assert.True(existingResult.IsSuccessful); Assert.NotNull(existingResult.User); Assert.Equal(newResult.User.UserId, existingResult.User.UserId); Assert.Equal(newResult.User.Code, existingResult.User.Code); Assert.Equal("Test", existingResult.User.DisplayName); Assert.Equal("*****@*****.**", existingResult.User.UserName); Assert.Equal("*****@*****.**", existingResult.User.Email); Assert.Equal("https://picsum.photos/96/96/?image=111", existingResult.User.ImageUrl); }