コード例 #1
0
        public void RegisterShouldReturnBadRequestIfCreatingUserFails()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithValidStudentEmail().Build();

            var errorCode      = Guid.NewGuid().ToString();
            var identityResult = IdentityResult.Failed(new IdentityError
            {
                Code        = errorCode,
                Description = Guid.NewGuid().ToString()
            });

            _userManagerMock.Setup(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()))
            .ReturnsAsync(identityResult);

            //Act
            var result = _controller.Register(model).Result as BadRequestObjectResult;

            //Assert
            Assert.That(result, Is.Not.Null);

            var serializableError = result.Value as SerializableError;

            Assert.That(serializableError, Is.Not.Null);
            Assert.That(serializableError.Keys, Has.One.EqualTo(errorCode));

            _userManagerMock.Verify(
                manager => manager.CreateAsync(
                    It.Is <User>(user => user.Email == model.Email && user.UserName == model.Email), model.Password),
                Times.Once);
            _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
        }
コード例 #2
0
        public void RegisterShouldCreateUserAndSendConfirmationMail()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithValidStudentEmail().Build();

            var confirmationToken = Guid.NewGuid().ToString();

            _userManagerMock.Setup(manager => manager.GenerateEmailConfirmationTokenAsync(It.IsAny <User>()))
            .ReturnsAsync(confirmationToken);

            var identityResult = IdentityResult.Success;

            _userManagerMock.Setup(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()))
            .ReturnsAsync(identityResult);

            //Act
            var result = _controller.Register(model).Result as OkResult;

            //Assert
            Assert.That(result, Is.Not.Null);

            _userManagerMock.Verify(
                manager => manager.CreateAsync(
                    It.Is <User>(user => user.Email == model.Email && user.UserName == model.Email), model.Password),
                Times.Once);

            _userManagerMock.Verify(
                manager => manager.GenerateEmailConfirmationTokenAsync(It.Is <User>(user => user.Email == model.Email)),
                Times.Once);

            _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.Is <User>(user => user.Email == model.Email), confirmationToken), Times.Once);
        }
コード例 #3
0
        public virtual ActionResult Register()
        {
            var builder = new RegisterModelBuilder();
            var model   = builder.Build();

            return(PartialView(model));
        }
コード例 #4
0
        public void ShouldListUsers()
        {
            var ruimin = new RegisterModelBuilder()
                         .WithEmail("*****@*****.**")
                         .WithRole(Roles.Author)
                         .Build();
            var akani = new RegisterModelBuilder()
                        .WithEmail("*****@*****.**")
                        .WithRole(Roles.Admin)
                        .Build();

            UsingSession(session =>
            {
                var accountController = new AccountController(session)
                {
                    EmailService = GetEmailMock().Object
                };
                accountController.Create(ruimin);
                accountController.Create(akani);
            });

            UsingSession(session =>
            {
                var accountController = new AccountController(session);
                var viewResult        = accountController.List();
                var actualUsers       = ((List <User>)(viewResult.Model));
                Assert.AreEqual(2, actualUsers.Count);
                Assert.IsTrue(UserEqual(akani, actualUsers.First()));
                Assert.IsTrue(UserEqual(ruimin, actualUsers.Last()));
            });
        }
コード例 #5
0
        public void ShouldNotBeAbleToCreateUserWithAnExistingEmail()
        {
            var model = new RegisterModelBuilder()
                        .WithEmail("*****@*****.**")
                        .WithRole(Roles.Admin)
                        .Build();

            UsingSession(session =>
            {
                var controller = new AccountController(session)
                {
                    EmailService = GetEmailMock().Object
                };

                controller.Create(model);
            });

            UsingSession(session =>
            {
                var controller = new AccountController(session)
                {
                    EmailService = GetEmailMock().Object
                };

                var viewResult = (System.Web.Mvc.ViewResult)(controller.Create(model));

                Assert.AreEqual("A user with this email already exists", controller.TempData["flashError"]);
                Assert.AreEqual(string.Empty, viewResult.MasterName);
                Assert.AreEqual("Add a User", viewResult.ViewBag.Title);
            });
        }
コード例 #6
0
        public void ShouldCreateNewUser()
        {
            var model = new RegisterModelBuilder()
                        .WithEmail("*****@*****.**")
                        .WithRole(Roles.Admin)
                        .Build();

            UsingSession(session =>
            {
                var controller = new AccountController(session)
                {
                    EmailService = GetEmailMock().Object
                };

                var actionResult = (System.Web.Mvc.RedirectToRouteResult)(controller.Create(model));
                Assert.AreEqual("Account", actionResult.RouteValues["controller"]);
                Assert.AreEqual("List", actionResult.RouteValues["action"]);
            });

            UsingSession(session =>
            {
                var users = session.Query <User>().Customize(a => a.WaitForNonStaleResultsAsOfLastWrite()).ToList();
                Assert.AreEqual(1, users.Count());
                var user = users.First();
                Assert.AreEqual(model.Email, user.Username);
                Assert.AreEqual(model.Role, user.Roles.First());
            });
        }
コード例 #7
0
        public void RegisterShouldValidateCaptcha()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithValidStudentEmail().Build();

            //Act
            var result = _controller.Register(model).Result;

            //Assert
            Assert.That(result, Is.Not.Null);
            _captchaValidatorMock.Verify(validator => validator.Validate(model.CaptchaToken, _controller.HttpContext.Connection.RemoteIpAddress));
        }
コード例 #8
0
        public void ShouldConfirmNewUserWithTokenAndNewPassword()
        {
            var model = new RegisterModelBuilder()
                        .Build();

            var    mock        = GetEmailMock();
            string secureToken = null;

            mock.Setup(e => e.SendConfirmation(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .Callback <string, string, string, int>((from, to, token, userId) =>
            {
                secureToken = token;
            });
            string oldPassword = "";

            UsingSession(session =>
            {
                var controller = new AccountController(session)
                {
                    EmailService = mock.Object
                };
                controller.Create(model);
                oldPassword = session.Query <User>().First(u => u.Username == model.Email).Password;
            });

            UsingSession(session =>
            {
                var user       = session.Query <User>().First();
                var controller = new AccountController(session)
                {
                    EmailService = mock.Object
                };
                var localPasswordModel = new LocalPasswordModelBuilder()
                                         .WithSecurityToken(secureToken)
                                         .WithUserId(user.Id)
                                         .Build();
                var mockAccountService = new Mock <IAccountService>();
                mockAccountService.Setup(s => s.Login(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>())).Returns(true);
                controller.AccountService = mockAccountService.Object;
                var actionResult          = (System.Web.Mvc.RedirectToRouteResult)(controller.RegisterConfirmation(localPasswordModel));
                Assert.AreEqual("Home", actionResult.RouteValues["controller"]);
                Assert.AreEqual("Index", actionResult.RouteValues["action"]);
            });

            UsingSession(session =>
            {
                Assert.IsTrue(session.Query <User>().First(u => u.Username == model.Email).IsApproved);
                Assert.AreNotEqual(oldPassword,
                                   session.Query <User>().First(u => u.Username == model.Email).Password);
            });
        }
コード例 #9
0
        public void RegisterShouldReturnBadRequestForNonPxlEmailAddress()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithEmail("*****@*****.**").Build();

            //Act
            var result = _controller.Register(model).Result as BadRequestObjectResult;

            //Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Value, Does.Contain("PXL").IgnoreCase);
            _userManagerMock.Verify(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
            _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
        }
コード例 #10
0
        public void RegisterShouldAssignLectorRoleForPxlEmailAddress()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithValidLectorEmail().Build();

            var identityResult = IdentityResult.Success;

            _userManagerMock.Setup(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()))
            .ReturnsAsync(identityResult);

            //Act
            var result = _controller.Register(model).Result as OkResult;

            //Assert
            Assert.That(result, Is.Not.Null);
            _userManagerMock.Verify(manager => manager.AddToRoleAsync(It.Is <User>(user => user.Email == model.Email), Role.Constants.Lector), Times.Once);
        }
コード例 #11
0
        public void RegisterShouldReturnBadRequestIfCaptchaIsInvalid()
        {
            //Arrange
            var model = new RegisterModelBuilder().WithValidStudentEmail().Build();
            var expectedCaptchaResult = new CaptchaVerificationResult {
                Success = false
            };

            _captchaValidatorMock.Setup(validator => validator.Validate(It.IsAny <string>(), It.IsAny <IPAddress>()))
            .ReturnsAsync(expectedCaptchaResult);

            //Act
            var result = _controller.Register(model).Result as BadRequestObjectResult;

            //Assert
            Assert.That(result, Is.Not.Null);
            _captchaValidatorMock.Verify(validator => validator.Validate(model.CaptchaToken, _controller.HttpContext.Connection.RemoteIpAddress));
            _userManagerMock.Verify(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
            _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
        }
コード例 #12
0
        public void RegisterShouldReturnBadRequestIfModelIsInvalid()
        {
            //Arrange
            var model = new RegisterModelBuilder().Build();

            var errorKey = "someValidationError";

            _controller.ModelState.AddModelError(errorKey, Guid.NewGuid().ToString());

            //Act
            var result = _controller.Register(model).Result as BadRequestObjectResult;

            //Assert
            Assert.That(result, Is.Not.Null);
            var serializableError = result.Value as SerializableError;

            Assert.That(serializableError, Is.Not.Null);
            Assert.That(serializableError.Keys, Has.One.EqualTo(errorKey));
            _userManagerMock.Verify(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
            _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
        }
コード例 #13
0
        public void ShouldCreateNewUserNotApproved()
        {
            var model = new RegisterModelBuilder()
                        .Build();

            var mock = GetEmailMock();

            UsingSession(session =>
            {
                var controller = new AccountController(session)
                {
                    EmailService = mock.Object
                };
                controller.Create(model);
            });

            UsingSession(session =>
            {
                var user = session.Query <User>().Customize(a => a.WaitForNonStaleResultsAsOfLastWrite()).First();
                Assert.IsFalse(user.IsApproved);
                mock.Verify(e => e.SendConfirmation("*****@*****.**", model.Email, user.ConfirmationToken, user.Id), Times.Once());
            });
        }