/* O mapeamento entre entidade e DTO pode ser automatizado por bibliotecas como AutoMapper, * porém, já ouvi várias opiniões positivas e negativas sobre o uso do AutoMapper. */ private User CreateUserMapper(AccountUserPostDto dto, string password) { var user = new User { Username = dto.Username, Password = password, Role = dto.Role }; return(user); }
public async Task <IActionResult> Create(AccountUserPostDto dto) { var validationResult = await _app.CreateUser(dto); if (!validationResult.IsValid) { return(BadRequest(validationResult.Errors.Select(x => x.ErrorMessage).ToList())); } return(NoContent()); }
public async Task <ValidationResult> CreateUser(AccountUserPostDto dto) { var password = !string.IsNullOrWhiteSpace(dto.Password) ? MD5Hash.Generate(dto.Password) : null; var user = CreateUserMapper(dto, password); var validationResult = await _userValidation.CreateValidation.ValidateAsync(user); if (!validationResult.IsValid) { return(validationResult); } _uow.UserRepository.Add(user); await _uow.CommitAsync(); return(validationResult); }
public async Task Password_Vazio() { var dto = new AccountUserPostDto { Username = "******", Password = "", Role = "admin" }; _uow.Setup(a => a.UserRepository.Add(new User { Id = Guid.NewGuid() })); var result = await _app.CreateUser(dto); Assert.False(result.IsValid); Assert.Equal("O campo Senha é obrigatório.", result.Errors.FirstOrDefault().ErrorMessage); }
public async Task Username_Invalido() { var dto = new AccountUserPostDto { Username = "******", Password = "******", Role = "admin" }; var idUser = Guid.NewGuid(); _uow.Setup(x => x.UserRepository.Add(new User { Id = idUser, Username = "******" })); var result = await _app.CreateUser(dto); Assert.False(result.IsValid); Assert.Equal("O campo Usuário deve possuir no máximo 50 caracteres.", result.Errors.FirstOrDefault().ErrorMessage); }