Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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());
        }
Exemple #9
0
        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?);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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);
        }
Exemple #12
0
 /// <inheritdoc/>
 /// <remarks>
 /// В случае ошибки подключения к WebApi возникнет системное исключение,
 /// внутри метода оно никак не перехватывается. Метод может вернуть false только
 /// в случае успешного подключения (когда ответ WebApi интепретируется как ошибка).
 /// </remarks>
 public async Task <bool> ChangePasswordForUserAsync(IdSrvUserPasswordDto passwords)
 {
     return(await RestApiHelpers.CallBoolApi(() => this.RestClient.ChangePasswordAsync(passwords)));
 }