/// <inheritdoc/> public async Task <RepositoryResponse> CreateAsync(NewIdSrvUserDto user) { if (user == null || user.UserName == null) { throw new ArgumentNullException(nameof(user)); } using (IDbConnection connection = await this.GetConnection()) { var compiler = new SqlServerCompiler(); var db = new QueryFactory(connection, compiler); string passwordSalt = user.Password != null?Guid.NewGuid().ToString() : null; try { int inserted = await db.Query("Users").InsertAsync(new { user.UserName, PasswordHash = this.GetB64PasswordHashFrom(user.Password, passwordSalt), PasswordSalt = passwordSalt, IsBlocked = false, }); return(inserted == 1 ? RepositoryResponse.Success : RepositoryResponse.Conflict); } catch (SqlCeException ex) when(ex.NativeError == 25016) { return(RepositoryResponse.Conflict); } } }
public void Create_ThrowsUserRepositoryException_When_RepositoryReturnUnexpetedResponse() { this.UserRepository .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>())) .ReturnsAsync(this.UnexpectedRepositoryResponse); var controller = new UserController(this.UserRepository.Object); var newUserDto = new NewIdSrvUserDto { UserName = "******", Password = "******" }; Assert.ThrowsAsync <UserRepositoryException>(() => controller.Create(newUserDto)); }
public async Task Create_CallServiceCreateUser_When_PassingNewUser() { var newUser = new NewIdSrvUserDto { UserName = "******", Password = "******" }; this.UserServiceMock.Setup(v => v.CreateUserAsync(newUser)).ReturnsAsync(true); var controller = new UsersController(this.UserServiceMock.Object); await controller.Create(newUser); this.UserServiceMock.Verify(v => v.CreateUserAsync(newUser), Times.Once); }
public async Task Create_InvokeCreateFromRepository_With_PassedUser_When_PassingUserWithoutPassword() { this.UserRepository .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>())) .ReturnsAsync(RepositoryResponse.Success); var controller = new UserController(this.UserRepository.Object); var userDto = new NewIdSrvUserDto { UserName = "******" }; IHttpActionResult httpResult = await controller.Create(userDto); this.UserRepository.Verify(v => v.CreateAsync(userDto)); }
public async Task Create_ReturnConflict_When_RepositoryReturnConflict() { this.UserRepository .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>())) .ReturnsAsync(RepositoryResponse.Conflict); var controller = new UserController(this.UserRepository.Object); var newUserDto = new NewIdSrvUserDto { UserName = "******", Password = "******" }; IHttpActionResult httpResult = await controller.Create(newUserDto); Assert.NotNull(httpResult); Assert.IsInstanceOf <ConflictResult>(httpResult); }
public async Task Create_ReturnOk_When_PassingDtoOnlyWithUsername_And_RepositoryReturnSuccess() { this.UserRepository .Setup(v => v.CreateAsync(It.IsAny <NewIdSrvUserDto>())) .ReturnsAsync(RepositoryResponse.Success); var controller = new UserController(this.UserRepository.Object); var newUserDto = new NewIdSrvUserDto { UserName = "******" }; IHttpActionResult httpResult = await controller.Create(newUserDto); Assert.NotNull(httpResult); Assert.IsInstanceOf <OkResult>(httpResult); }
public async Task <IHttpActionResult> Create(NewIdSrvUserDto user) { // Password can be null for windows users if (user == null || user.UserName == null) { return(this.BadRequest()); } RepositoryResponse response = await this.UserRepository.CreateAsync(user); return (response == RepositoryResponse.Success ? this.Ok() : response == RepositoryResponse.Conflict ? this.Conflict() as IHttpActionResult : throw new UserRepositoryException()); }
public async Task <ActionResult> Create(NewIdSrvUserDto user) { if (!this.ModelState.IsValid) { return(this.View(user)); } bool created = await this.UserService.CreateUserAsync(user); if (!created) { this.ModelState.AddModelError(string.Empty, "Такой пользователь уже существует"); } return(created ? this.ViewSuccess("Пользователь успешно создан") : this.View(user) as ActionResult); }
public async Task Create_ReturnSelf_With_InvalilModelState_And_PassedModel_When_UserServiceCanNotCreateUser() { var newUser = new NewIdSrvUserDto { UserName = "******", Password = "******" }; this.UserServiceMock.Setup(v => v.CreateUserAsync(It.IsAny <NewIdSrvUserDto>())).Returns(Task.FromResult(false)); var controller = new UsersController(this.UserServiceMock.Object); ActionResult result = await controller.Create(newUser); Assert.IsInstanceOf <ViewResult>(result); var viewResult = result as ViewResult; Assert.NotNull(viewResult); Assert.AreEqual(string.Empty, viewResult.ViewName); Assert.IsFalse(controller.ModelState.IsValid); Assert.AreEqual(controller.ViewData.Model, newUser); }
/// <inheritdoc/> /// <remarks> /// В случае ошибки подключения к WebApi возникнет системное исключение, /// внутри метода оно никак не перехватывается. Метод может вернуть false только /// в случае успешного подключения (когда ответ WebApi интепретируется как ошибка). /// </remarks> public async Task <bool> CreateUserAsync(NewIdSrvUserDto newUser) { return(await RestApiHelpers.CallBoolApi(() => this.RestClient.CreateAsync(newUser))); }
public async Task <ActionResult> Register(RegisterForm registerForm) { if (!this.ModelState.IsValid) { return(this.View(registerForm)); } this.ViewBag.AlreadyExists = false; NewUser createdUser = null; var userDto = new NewIdSrvUserDto { UserName = registerForm.Login, Password = registerForm.Password }; using (var client = new HttpClient()) { // Update port # in the following line. client.BaseAddress = new Uri("https://localhost:44397/Api/User/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.PutAsJsonAsync(string.Empty, userDto); if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Conflict) { this.ModelState.AddModelError("Couldn't create", "Не удалось зарегистрировать нового пользователя на SSO сервере"); return(this.View(registerForm)); } if (response.StatusCode == HttpStatusCode.Conflict) { this.ViewBag.AlreadyExists = true; } response = await client.GetAsync($"GetByUserName?userName={HttpUtility.UrlEncode(userDto.UserName)}"); if (!response.IsSuccessStatusCode) { this.ModelState.AddModelError("Couldn't create", "Ошибка при чтении созданного пользователя на SSO сервере"); return(this.View(registerForm)); } var createdUserDto = await response.Content.ReadAsAsync <IdSrvUserDto>(); createdUser = new NewUser { Id = createdUserDto.Id.ToString(), Name = createdUserDto.UserName }; } using (var context = new AccountsContext()) { context.UserProfiles.Add(new UserProfile { IdSrvId = createdUser.Id, Login = createdUser.Name }); // Тут может рухнуть с исключением, никак пока не обрабатываю await context.SaveChangesAsync(); } this.ViewBag.Name = createdUser.Name; return(this.View("UserCreated")); }