예제 #1
0
		public void Setup()
		{
			_container = new MocksAndStubsContainer();

			_applicationSettings = _container.ApplicationSettings;
			_applicationSettings.AttachmentsFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "attachments");
			_repository = _container.Repository;
			_settingsService = _container.SettingsService;
			_userService = _container.UserService;
			_userContext = _container.UserContext;
			_emailClientMock = _container.EmailClient;

			_userService.AddUser(AdminEmail, AdminUsername, AdminPassword, true, true);
			_userService.Users[0].IsActivated = true;
			_userService.Users[0].Firstname = "Firstname";
			_userService.Users[0].Lastname = "LastnameNotSurname";

			_userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, null);
			_mvcMockContainer = _userController.SetFakeControllerContext();
		}
예제 #2
0
        public void Signup_POST_Should_Set_ModelState_Error_From_SecurityException()
        {
            // Arrange
            SiteSettings siteSettings = _settingsService.GetSiteSettings();
            siteSettings.AllowUserSignup = true;

            SignupEmailStub signupEmail = new SignupEmailStub(_applicationSettings, _repository, _emailClientMock); // change the signup email
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, signupEmail, null);
            userController.SetFakeControllerContext();

            _userService.ThrowSecurityExceptionOnSignup = true;

            UserViewModel model = new UserViewModel();

            // Act
            ActionResult result = userController.Signup(model, null);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.Not.EqualTo("Signup"));
            Assert.That(userController.ModelState.Count, Is.EqualTo(1));
            Assert.That(userController.ModelState["General"].Errors[0].ErrorMessage, Is.EqualTo("ThrowSecurityExceptionOnSignup"));
        }
예제 #3
0
        public void Signup_POST_Should_Send_Email()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;

            SiteSettings siteSettings = _settingsService.GetSiteSettings();
            siteSettings.AllowUserSignup = true;

            SignupEmailStub signupEmail = new SignupEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, signupEmail, null);
            userController.SetFakeControllerContext();

            UserViewModel model = new UserViewModel();
            model.NewEmail = "blah@localhost";
            model.Password = "******";
            model.PasswordConfirmation = "password";

            // Act
            ActionResult result = userController.Signup(model, null);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.EqualTo("SignupComplete"));
            Assert.That(signupEmail.IsSent, Is.True);
            Assert.That(signupEmail.ViewModel, Is.EqualTo(model));
        }
예제 #4
0
        public void Signup_POST_Should_Not_Send_Email_With_Invalid_ModelState()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;

            SiteSettings siteSettings = _settingsService.GetSiteSettings();
            siteSettings.AllowUserSignup = true;

            SignupEmailStub signupEmail = new SignupEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, signupEmail, null);
            userController.SetFakeControllerContext();
            userController.ModelState.AddModelError("key", "this is used to force ModelState.IsValid to false");

            UserViewModel model = new UserViewModel();

            // Act
            ActionResult result = userController.Signup(model, null);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.Not.EqualTo("Signup"));
            Assert.That(userController.ModelState.Count, Is.EqualTo(1));
            Assert.That(signupEmail.IsSent, Is.False);
        }
예제 #5
0
        public void ResetPassword_POST_Should_Not_Send_Email_With_Invalid_ModelState()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;
            SiteSettings siteSettings = _settingsService.GetSiteSettings();

            ResetPasswordEmailStub resetEmail = new ResetPasswordEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, resetEmail);
            userController.SetFakeControllerContext();

            // Act
            ActionResult result = userController.ResetPassword("fake email");

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            viewResult.AssertViewRendered();
            Assert.That(userController.ModelState.Count, Is.EqualTo(1));
            Assert.That(resetEmail.IsSent, Is.EqualTo(false));
        }
예제 #6
0
        public void ResetPassword_POST_Should_Have_ResetPasswordSent_View_And_Should_Send_ResetPassword_Email()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;
            SiteSettings siteSettings = _settingsService.GetSiteSettings();

            string email = "*****@*****.**";
            _userService.AddUser(email, "test", "test", false, true);
            _userService.Users.First(x => x.Email == email).IsActivated = true;

            ResetPasswordEmailStub resetEmail = new ResetPasswordEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, resetEmail);
            userController.SetFakeControllerContext();

            // Act
            ActionResult result = userController.ResetPassword(email);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.EqualTo("ResetPasswordSent"));
            Assert.That(resetEmail.IsSent, Is.True);
            Assert.That(resetEmail.Model.ExistingEmail, Is.EqualTo(email));
            Assert.That(resetEmail.Model.PasswordResetKey, Is.EqualTo(UserServiceMock.RESETKEY));
        }
예제 #7
0
        public void ResendConfirmation_POST_With_Invalid_Email_Should_Show_Signup_View()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;
            SiteSettings siteSettings = _settingsService.GetSiteSettings();

            ResetPasswordEmailStub resetEmail = new ResetPasswordEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, resetEmail);
            userController.SetFakeControllerContext();

            // Act
            ActionResult result = userController.ResendConfirmation("doesnt exist");

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.EqualTo("Signup"));
        }
예제 #8
0
        public void ResendConfirmation_POST_Should_SendEmail_And_Show_SignupComplete_View_And_Set_TempData()
        {
            // Arrange
            _applicationSettings.UseWindowsAuthentication = false;
            SiteSettings siteSettings = _settingsService.GetSiteSettings();

            string email = "*****@*****.**";
            _userService.AddUser(email, "test", "password", false, true);
            UserViewModel model = new UserViewModel(_userService.GetUser("*****@*****.**", false));

            SignupEmailStub signupEmail = new SignupEmailStub(_applicationSettings, _repository, _emailClientMock);
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, signupEmail, null);
            userController.SetFakeControllerContext();

            // Act
            ActionResult result = userController.ResendConfirmation(email);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.EqualTo("SignupComplete"));
            Assert.That(viewResult.TempData["resend"], Is.EqualTo(true));
            Assert.That(signupEmail.IsSent, Is.EqualTo(true));
        }
예제 #9
0
        public void Profile_POST_Should_Return_403_When_Updated_Id_Is_Not_Logged_In_User()
        {
            // Arrange
            string loggedInEmail = "*****@*****.**";
            string secondUserEmail = "*****@*****.**";
            string secondUserNewEmail = "*****@*****.**";

            _userService.AddUser(loggedInEmail, "profiletest", "password", false, true);
            _userService.Users.First(x => x.Email == loggedInEmail).IsActivated = true;
            Guid firstUserId = _userService.GetUser(loggedInEmail).Id;

            _userService.AddUser(secondUserEmail, "seconduser", "password", false, true);
            _userService.Users.First(x => x.Email == secondUserEmail).IsActivated = true;
            Guid secondUserId = _userService.GetUser(secondUserEmail).Id;

            _userContext.CurrentUser = firstUserId.ToString();

            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, null);
            userController.SetFakeControllerContext();

            UserViewModel model = new UserViewModel(); // try to change the other user's email
            model.Id = secondUserId;
            model.ExistingEmail = secondUserEmail;
            model.NewEmail = secondUserNewEmail;
            model.Firstname = "test";
            model.Lastname = "user";
            model.ExistingUsername = "******";
            model.NewUsername = "******";

            // Act
            ActionResult result = userController.Profile(model);

            // Assert
            Assert.That(result, Is.TypeOf<HttpStatusCodeResult>());

            HttpStatusCodeResult redirectResult = result as HttpStatusCodeResult;
            Assert.That(redirectResult.StatusCode, Is.EqualTo(403));
        }
예제 #10
0
        public void CompleteResetPassword_GET_Should_Return_CompleteResetPasswordInvalid_View_When_User_Is_Null()
        {
            // Arrange
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, null);
            userController.SetFakeControllerContext();

            // Act
            ActionResult result = userController.CompleteResetPassword("invalidresetkey");

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();
            Assert.That(viewResult.ViewName, Is.EqualTo("CompleteResetPasswordInvalid"));
        }
예제 #11
0
        public void CompleteResetPassword_GET_Should_Have_Correct_Model_And_ActionResult()
        {
            // Arrange
            UserController userController = new UserController(_applicationSettings, _userService, _userContext, _settingsService, null, null);
            userController.SetFakeControllerContext();
            _userService.ResetPassword(AdminEmail);

            // Act
            ActionResult result = userController.CompleteResetPassword(UserServiceMock.RESETKEY);

            // Assert
            ViewResult viewResult = result.AssertResultIs<ViewResult>();

            UserViewModel model = viewResult.ModelFromActionResult<UserViewModel>();
            User expectedUser = _userService.Users[0];

            Assert.That(model.Id, Is.EqualTo(expectedUser.Id));
            Assert.That(model.NewEmail, Is.EqualTo(expectedUser.Email));
            Assert.That(model.PasswordResetKey, Is.EqualTo(expectedUser.PasswordResetKey));
            Assert.That(model.Firstname, Is.EqualTo(expectedUser.Firstname));
            Assert.That(model.Lastname, Is.EqualTo(expectedUser.Lastname));
        }