Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 10
0
        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);
        }