示例#1
0
        public async Task Should_Create_User()
        {
            var loggedUser = await TestData.LogUserIn(Client);

            Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loggedUser.Token);

            var builder = new UriBuilder(TestData.BaseUrl + "/api/user");

            NewUserBody body = new NewUserBody()
            {
                UserName    = "******",
                Email       = "*****@*****.**",
                Avatar      = {},
                Password    = "******",
                FirstName   = "Test",
                LastName    = "User",
                PhoneNumber = "+4407852276048",
                DateOfBirth = DateTime.Today.AddYears(-18)
            };

            var response = await Client.PostAsJsonAsync(builder.Uri, body);

            // response.StatusCode.Should().Be(200);
            response.Should().NotBeNull();
        }
示例#2
0
        public async Task <ActionResult> Create([FromBody] NewUserBody newUserBody)
        {
            try
            {
                Logger.LogInformation("Creating {Email}", newUserBody.Email);
                await UserService.Create(newUserBody);

                return(Ok());
            }
            catch (Exception e)
            {
                Logger.LogError(e.ToString());
                return(BadRequest(e));
            }
        }
示例#3
0
        public async Task ShouldFailNonUniqueUser()
        {
            await using (var context = new DbContextFactory().CreateContext())
            {
                var service = new UserServiceFactory().Create(context);

                NewUserBody user = new NewUserBody()
                {
                    Email    = "*****@*****.**",
                    Password = "******",
                    UserName = "******"
                };

                FluentActions.Invoking(async() => await service.Create(user))
                .Should().Throw <UserAlreadyExistsException>();
            }
        }
示例#4
0
        public async Task ShouldCreateNewUser()
        {
            await using (var context = new DbContextFactory().CreateContext())
            {
                var service = new UserServiceFactory().Create(context);

                NewUserBody user = new NewUserBody()
                {
                    Email       = "*****@*****.**",
                    Password    = "******",
                    FirstName   = "Joe",
                    LastName    = "Blogs",
                    UserName    = "******",
                    PhoneNumber = "1111111111",
                    Avatar      = new byte[100],
                    DateOfBirth = DateTime.Now.AddYears(-18)
                };

                await service.Create(user);
            }
        }
示例#5
0
        /// <inheritdoc />
        /// <exception cref="UserAlreadyExistsException">Thrown when there is already a user with the same email, phone number or username.</exception>
        public async Task Create(NewUserBody userBody)
        {
            var user = await ApplicationContext.Users.FirstOrDefaultAsync(x =>
                                                                          x.Email == userBody.Email || x.UserName == userBody.UserName ||
                                                                          x.PhoneNumber == userBody.PhoneNumber);

            if (user != null)
            {
                Logger.LogInformation("User already exists");
                throw new UserAlreadyExistsException();
            }

            // New password hasher.
            PasswordHasher <User> hasher = new PasswordHasher <User>(
                new OptionsWrapper <PasswordHasherOptions>(
                    new PasswordHasherOptions()
            {
                CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2
            })
                );

            // Creating user object from params.
            User newUser = new User
            {
                Email       = userBody.Email,
                Avatar      = userBody.Avatar,
                FirstName   = userBody.FirstName,
                LastName    = userBody.LastName,
                PhoneNumber = userBody.PhoneNumber,
                UserName    = userBody.UserName,
                DateOfBirth = userBody.DateOfBirth,
                Confirmed   = false
            };

            // Hash user's password.
            newUser.Password = hasher.HashPassword(newUser, userBody.Password);

            // Generates a new recommendation score for each category with weight 0
            var categories = await ApplicationContext.Categories.ToListAsync();

            newUser.RecommendationScores =
                categories.Select(x => new RecommendationScore {
                Category = x, Weight = 0
            }).ToList();

            try
            {
                // Saving user to Db.
                await ApplicationContext.Users.AddAsync(newUser);

                await ApplicationContext.SaveChangesAsync();

                // Sends confirmation Email
                await EmailService.SendAsync(newUser.Email,
                                             $"<h1>Please confirm your email</h1><a href={AppSettings.BaseUrl}/api/auth/confirm?id={newUser.Id}>confirm</a>",
                                             "Confirm Email");
            }
            catch
            {
                Logger.LogWarning("User failed to save");
                throw;
            }
        }