public async void any_user_can_login()
        {
            //arrange
            var userService = new Mock <IUserService>();

            userService.Setup(x => x.Authenticate(ValidLoginModel.Email, ValidLoginModel.Password))
            .Returns(Task.FromResult(true));

            userService.Setup(x => x.GetByEmail(ValidLoginModel.Email))
            .Returns(Task.FromResult(ValidUserEntity));

            var authService = new Mock <IAuthService>();

            authService.Setup(x => x.SignIn(ValidUserEntity.Id, ValidUserEntity.Name, ValidUserEntity.Email, ConstHelper.User, true));

            ////act
            var sut = new UserControllerBuilder().WithUserService(userService.Object)
                      .WithAuthService(authService.Object)
                      .Build();

            var result = await sut.Login(ValidLoginModel);

            ////assert
            Assert.IsNotNull(result);
            Assert.IsAssignableFrom <RedirectResult>(result);

            userService.Verify(x => x.Authenticate(ValidLoginModel.Email, ValidLoginModel.Password), Times.Once);
            userService.Verify(x => x.GetByEmail(ValidLoginModel.Email), Times.Once);
            authService.Verify(x => x.SignIn(ValidUserEntity.Id, ValidUserEntity.Name, ValidUserEntity.Email, ConstHelper.User, true), Times.Once);

            sut.AssertPostAttribute(ACTION_LOGIN, new[] { typeof(LoginModel) });
            sut.AssertAllowAnonymousAttribute(ACTION_LOGIN, new[] { typeof(LoginModel) });
        }
        public async void any_user_can_request_password_reset_link()
        {
            //arrange
            var userService = new Mock <IUserService>();

            userService.Setup(x => x.RequestPasswordReset(ValidPasswordResetModel.Email))
            .Returns(Task.FromResult(true));

            //act
            var sut = new UserControllerBuilder().WithUserService(userService.Object)
                      .Build();
            var result = await sut.PasswordReset(ValidPasswordResetModel);

            //assert
            Assert.IsNotNull(result);
            Assert.IsAssignableFrom <ViewResult>(result);

            userService.Verify(x => x.RequestPasswordReset(ValidPasswordResetModel.Email), Times.Once);

            sut.AssertPostAttribute(ACTION_PASSWORD_RESET, new[] { typeof(PasswordResetModel) });
            sut.AssertAllowAnonymousAttribute(ACTION_PASSWORD_RESET, new[] { typeof(PasswordResetModel) });
        }