/// <inheritdoc/> public async Task <RepositoryResponse> ChangePasswordAsync(IdSrvUserPasswordDto password) { if (password == null || password.Password == null) { throw new ArgumentNullException(nameof(password)); } using (IDbConnection connection = await this.GetConnection()) { var compiler = new SqlServerCompiler(); var db = new QueryFactory(connection, compiler); string passwordSalt = Guid.NewGuid().ToString(); int updated = await db .Query("Users") .Where(new { Id = password.Id }) .WhereNotNull("PasswordHash") .UpdateAsync(new { PasswordHash = this.GetB64PasswordHashFrom(password.Password, passwordSalt), PasswordSalt = passwordSalt, }); return(updated == 1 ? RepositoryResponse.Success : RepositoryResponse.NotFound); } }
public async Task ChangePassword_ReturnSelf_With_ModelIsInvalidAndHasNullPassword_When_ServiceReturnFalse() { var passwords = new IdSrvUserPasswordDto { Id = new Guid(), Password = "******", }; this.UserServiceMock.Setup(v => v.ChangePasswordForUserAsync(passwords)).ReturnsAsync(false); var controller = new UsersController(this.UserServiceMock.Object); ActionResult result = await controller.ChangePassword(passwords); Assert.IsInstanceOf <ViewResult>(result); var viewResult = result as ViewResult; Assert.NotNull(viewResult); Assert.IsEmpty(viewResult.ViewName); object model = controller.ViewData.Model; Assert.IsInstanceOf <IdSrvUserPasswordDto>(model); var actualModel = model as IdSrvUserPasswordDto; Assert.AreEqual(actualModel.Id, passwords.Id); Assert.IsNull(actualModel.Password); Assert.IsFalse(controller.ModelState.IsValid); }
public async Task ChangePassword_CallServiceChangePasswordForUser_When_PassingModel() { var passwords = new IdSrvUserPasswordDto(); this.UserServiceMock.Setup(v => v.ChangePasswordForUserAsync(passwords)).ReturnsAsync(true); var controller = new UsersController(this.UserServiceMock.Object); await controller.ChangePassword(passwords); this.UserServiceMock.Verify(v => v.ChangePasswordForUserAsync(passwords), Times.Once); }
public void ChangePassword_ThrowsUserRepositoryException_When_RepositoryReturnUnexpectedResponse() { this.UserRepository .Setup(v => v.ChangePasswordAsync(It.IsAny <IdSrvUserPasswordDto>())) .ReturnsAsync(this.UnexpectedRepositoryResponse); var controller = new UserController(this.UserRepository.Object); var passwordDto = new IdSrvUserPasswordDto { Id = Guid.NewGuid(), Password = "******" }; Assert.ThrowsAsync <UserRepositoryException>(() => controller.ChangePassword(passwordDto)); }
public async Task ChangePassword_ReturnBadRequest_When_PassingStructureWithNullArgs() { this.UserRepository .Setup(v => v.ChangePasswordAsync(It.IsAny <IdSrvUserPasswordDto>())) .ReturnsAsync(RepositoryResponse.Success); var controller = new UserController(this.UserRepository.Object); var passwordDto = new IdSrvUserPasswordDto(); IHttpActionResult httpResult = await controller.ChangePassword(passwordDto); Assert.NotNull(httpResult); Assert.IsInstanceOf <BadRequestResult>(httpResult); }
public async Task ChangePassword_InvokeChangePasswordAsyncFromRepository_With_PassedPassword() { this.UserRepository .Setup(v => v.ChangePasswordAsync(It.IsAny <IdSrvUserPasswordDto>())) .ReturnsAsync(RepositoryResponse.Success); var controller = new UserController(this.UserRepository.Object); var passwordDto = new IdSrvUserPasswordDto { Id = Guid.NewGuid(), Password = "******" }; IHttpActionResult httpResult = await controller.ChangePassword(passwordDto); this.UserRepository.Verify(v => v.ChangePasswordAsync(passwordDto)); }
public async Task ChangePassword_ReturnNotFound_When_RepositoryReturnNotFound() { this.UserRepository .Setup(v => v.ChangePasswordAsync(It.IsAny <IdSrvUserPasswordDto>())) .ReturnsAsync(RepositoryResponse.NotFound); var controller = new UserController(this.UserRepository.Object); var passwordDto = new IdSrvUserPasswordDto { Id = Guid.NewGuid(), Password = "******" }; IHttpActionResult httpResult = await controller.ChangePassword(passwordDto); Assert.NotNull(httpResult); Assert.IsInstanceOf <NotFoundResult>(httpResult); }
public async Task <IHttpActionResult> ChangePassword(IdSrvUserPasswordDto password) { if (password == null || password.Password == null) { return(this.BadRequest()); } RepositoryResponse response = await this.UserRepository.ChangePasswordAsync(password); return (response == RepositoryResponse.Success ? this.Ok() : response == RepositoryResponse.NotFound ? this.NotFound() as IHttpActionResult : throw new UserRepositoryException()); }
public async Task ChangePassword_RedirectToIndex_With_TempDataContainsNoError_When_ServiceReturnTrue() { var passwords = new IdSrvUserPasswordDto(); this.UserServiceMock.Setup(v => v.ChangePasswordForUserAsync(passwords)).ReturnsAsync(true); var controller = new UsersController(this.UserServiceMock.Object); ActionResult result = await controller.ChangePassword(passwords); Assert.IsInstanceOf <RedirectToRouteResult>(result); var redirectResult = result as RedirectToRouteResult; Assert.NotNull(redirectResult); Assert.AreEqual(nameof(controller.Index), redirectResult.RouteValues["action"]); Assert.IsTrue(controller.TempData.ContainsKey("_IsError")); Assert.IsFalse(controller.TempData["_IsError"] as bool?); }
public void UpdatePassword_ReturnSelf_With_ModelContainsPassedUserIdAndNullPassword_When_NoArgs() { var passwords = new IdSrvUserPasswordDto { Id = new Guid() }; var controller = new UsersController(this.UserServiceMock.Object); ViewResult viewResult = controller.ChangePassword(passwords.Id); Assert.NotNull(viewResult); Assert.IsEmpty(viewResult.ViewName); // empty view name means asp.net returns the same view object model = controller.ViewData.Model; Assert.IsInstanceOf <IdSrvUserPasswordDto>(model); var actualModel = model as IdSrvUserPasswordDto; Assert.AreEqual(actualModel.Id, passwords.Id); Assert.IsNull(actualModel.Password); }
public async Task <ActionResult> ChangePassword(IdSrvUserPasswordDto passwords) { if (!this.ModelState.IsValid) { return(this.View(new IdSrvUserPasswordDto { Id = passwords.Id })); } bool changed = await this.UserService.ChangePasswordForUserAsync(passwords); if (!changed) { this.ModelState.AddModelError(string.Empty, "Не удалось изменить пароль"); } return(changed ? this.ViewSuccess("Пароль успешно изменён") : this.View(new IdSrvUserPasswordDto { Id = passwords.Id }) as ActionResult); }
/// <inheritdoc/> /// <remarks> /// В случае ошибки подключения к WebApi возникнет системное исключение, /// внутри метода оно никак не перехватывается. Метод может вернуть false только /// в случае успешного подключения (когда ответ WebApi интепретируется как ошибка). /// </remarks> public async Task <bool> ChangePasswordForUserAsync(IdSrvUserPasswordDto passwords) { return(await RestApiHelpers.CallBoolApi(() => this.RestClient.ChangePasswordAsync(passwords))); }