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