public void DoesNotSendEmailChangeConfirmationNoticeWhenTokenDoesNotChange() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true, EmailConfirmationToken = "token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny <string>())) .Returns(user); controller.MockMessageService .Setup(m => m.SendEmailChangeConfirmationNotice(It.IsAny <MailAddress>(), It.IsAny <string>())) .Throws(new InvalidOperationException()); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = true }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); Assert.Equal("Account settings saved!", controller.TempData["Message"]); controller.MockUserService .Verify(u => u.UpdateProfile(user, It.IsAny <string>(), true)); }
public void SendsEmailChangeConfirmationNoticeWhenEmailConfirmationTokenChanges() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny <string>())) .Returns(user); controller.MockUserService .Setup(u => u.UpdateProfile(user, "*****@*****.**", true)) .Callback(() => user.EmailConfirmationToken = "token"); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = true }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); Assert.Equal( "Account settings saved! We sent a confirmation email to verify your new email. When you confirm the email address, it will take effect and we will forget the old one.", controller.TempData["Message"]); }
public void DoesntSendAccountChangedEmailsIfConfirmationTokenDoesntMatch() { var user = new User { EmailAddress = "*****@*****.**", UnconfirmedEmailAddress = "*****@*****.**", EmailConfirmationToken = "the-token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername("username")) .Returns(user); controller.MockUserService .Setup(u => u.ConfirmEmailAddress(user, "faketoken")) .Returns(false); // act: var model = (controller.Confirm("username", "faketoken") as ViewResult).Model as EmailConfirmationModel; // verify: Assert.False(model.SuccessfulConfirmation); Assert.False(model.ConfirmingNewAccount); controller.MockMessageService .Verify(m => m.SendEmailChangeConfirmationNotice(It.IsAny <MailAddress>(), It.IsAny <string>()), Times.Never()); controller.MockMessageService .Verify(m => m.SendEmailChangeNoticeToPreviousEmailAddress(It.IsAny <User>(), It.IsAny <string>()), Times.Never()); }
public void UpdatesEmailAllowedSetting() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny <string>())) .Returns(user); controller.MockUserService .Setup(u => u.UpdateProfile(user, "*****@*****.**", false)) .Verifiable(); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = false }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); controller.MockUserService .Verify(u => u.UpdateProfile(user, "*****@*****.**", false)); Assert.Equal("Account settings saved!", controller.TempData["Message"]); }
public void SendsEmailWithPasswordResetUrl() { const string resetUrl = "https://example.org/?Controller=Users&Action=ResetPassword&username=somebody&token=confirmation"; var user = new User { EmailAddress = "*****@*****.**", Username = "******", PasswordResetToken = "confirmation", PasswordResetTokenExpirationDate = DateTime.UtcNow.AddDays(1) }; var controller = new TestableUsersController(); controller.MockMessageService .Setup(s => s.SendPasswordResetInstructions(user, resetUrl)); controller.MockUserService .Setup(s => s.GeneratePasswordResetToken("user", 1440)) .Returns(user); var model = new ForgotPasswordViewModel { Email = "user" }; var result = controller.ForgotPassword(model) as RedirectToRouteResult; Assert.NotNull(result); controller.MockMessageService .Verify(s => s.SendPasswordResetInstructions(user, resetUrl)); }
public void Returns404WhenTokenIsEmpty() { var controller = new TestableUsersController(); var result = controller.Confirm("username", "") as HttpNotFoundResult; Assert.NotNull(result); }
public void WillGetTheCurrentUserUsingTheRequestIdentityName() { var controller = new TestableUsersController(); controller.StubIdentity.Setup(stub => stub.Name).Returns("theUsername"); controller.Account(); controller.StubUserByUsernameQry.Verify(stub => stub.Execute("theUsername", true)); }
public void WillShowTheViewWithErrorsIfTheModelStateIsInvalid() { var controller = new TestableUsersController(); controller.ModelState.AddModelError(String.Empty, "aFakeError"); var result = controller.Register(null) as ViewResult; Assert.NotNull(result); Assert.Empty(result.ViewName); }
public void WithInvalidUsernameReturnsFileNotFound() { var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny <string>())) .ReturnsNull(); var result = controller.Edit(new EditProfileViewModel()) as HttpNotFoundResult; Assert.NotNull(result); }
public void GeneratesAnApiKey() { var controller = new TestableUsersController(); controller.MockCurrentIdentity .Setup(i => i.Name) .Returns("the-username"); controller.GenerateApiKey(); controller.MockUserService .Verify(s => s.GenerateApiKey("the-username")); }
public void ShowsDefaultThanksViewWhenConfirmingEmailAddressIsRequired() { var controller = new TestableUsersController(); controller.MockConfig .Setup(x => x.ConfirmEmailAddresses) .Returns(true); var result = controller.Thanks() as ViewResult; Assert.Empty(result.ViewName); Assert.Null(result.Model); }
public void WillGetCuratedFeedsManagedByTheCurrentUser() { var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny<string>())) .Returns(new User { Key = 42 }); // act controller.Account(); // verify controller.MockCuratedFeedService .Verify(query => query.GetFeedsForManager(42)); }
public void RedirectsToAccountPage() { var controller = new TestableUsersController(); controller.MockCurrentIdentity .Setup(i => i.Name) .Returns("the-username"); var result = controller.GenerateApiKey() as RedirectToRouteResult; Assert.NotNull(result); Assert.Equal("Account", result.RouteValues["action"]); Assert.Equal("Users", result.RouteValues["controller"]); }
public void WillReturnTheAccountViewModelWithTheUserApiKey() { var stubApiKey = Guid.NewGuid(); var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny<string>())) .Returns(new User { Key = 42, ApiKey = stubApiKey }); // act var model = ((ViewResult)controller.Account()).Model as AccountViewModel; // verify Assert.Equal(stubApiKey.ToString(), model.ApiKey); }
public void WillReturnTheAccountViewModelWithTheCuratedFeeds() { var controller = new TestableUsersController(); controller.StubCuratedFeedsByManagerQry .Setup(stub => stub.Execute(It.IsAny <int>())) .Returns(new[] { new CuratedFeed { Name = "theCuratedFeed" } }); var model = ((ViewResult)controller.Account()).Model as AccountViewModel; Assert.Equal("theCuratedFeed", model.CuratedFeeds.First()); }
public void WillGetCuratedFeedsManagedByTheCurrentUser() { var controller = new TestableUsersController(); controller.StubUserByUsernameQry .Setup(stub => stub.Execute(It.IsAny <string>(), It.IsAny <bool>())) .Returns(new User { Key = 42 }); controller.Account(); controller.StubCuratedFeedsByManagerQry.Verify(stub => stub.Execute(42)); }
public void WillReturnTheAccountViewModelWithTheUserApiKey() { var controller = new TestableUsersController(); var stubApiKey = Guid.NewGuid(); controller.StubUserByUsernameQry .Setup(stub => stub.Execute(It.IsAny <string>(), It.IsAny <bool>())) .Returns(new User { Key = 42, ApiKey = stubApiKey }); var model = ((ViewResult)controller.Account()).Model as AccountViewModel; Assert.Equal(stubApiKey.ToString(), model.ApiKey); }
public void WillReturnTheAccountViewModelWithTheCuratedFeeds() { var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny<string>())) .Returns(new User { Key = 42 }); controller.MockCuratedFeedService .Setup(stub => stub.GetFeedsForManager(It.IsAny<int>())) .Returns(new[] { new CuratedFeed { Name = "theCuratedFeed" } }); // act var model = ((ViewResult)controller.Account()).Model as AccountViewModel; // verify Assert.Equal("theCuratedFeed", model.CuratedFeeds.First()); }
public void ShowsConfirmViewWithModelWhenConfirmingEmailAddressIsNotRequired() { var controller = new TestableUsersController(); controller.MockConfig .Setup(x => x.ConfirmEmailAddresses) .Returns(false); var result = controller.Thanks() as ViewResult; Assert.Equal("Confirm", result.ViewName); var model = result.Model as EmailConfirmationModel; Assert.True(model.ConfirmingNewAccount); Assert.True(model.SuccessfulConfirmation); }
public void ReturnsSameViewIfTokenGenerationFails() { var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.GeneratePasswordResetToken("user", 1440)) .Returns((User)null); var model = new ForgotPasswordViewModel { Email = "user" }; var result = controller.ForgotPassword(model) as ViewResult; Assert.NotNull(result); Assert.IsNotType(typeof(RedirectResult), result); }
public void WillGetTheCurrentUserUsingTheRequestIdentityName() { var controller = new TestableUsersController(); controller.MockCurrentIdentity .Setup(stub => stub.Name) .Returns("theUsername"); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny<string>())) .Returns(new User { Key = 42 }); //act controller.Account(); // verify controller.MockUserService .Verify(stub => stub.FindByUsername("theUsername")); }
public void WillReturnTheAccountViewModelWithTheUserApiKey() { var stubApiKey = Guid.NewGuid(); var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny <string>())) .Returns(new User { Key = 42, ApiKey = stubApiKey }); // act var model = ((ViewResult)controller.Account()).Model as AccountViewModel; // verify Assert.Equal(stubApiKey.ToString(), model.ApiKey); }
public void WillGetCuratedFeedsManagedByTheCurrentUser() { var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny <string>())) .Returns(new User { Key = 42 }); // act controller.Account(); // verify controller.MockFeedsQuery .Verify(query => query.Execute(42)); }
public void ResetsPasswordForValidToken() { var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.ResetPasswordWithToken("user", "token", "newpwd")) .Returns(true); var model = new PasswordResetViewModel { ConfirmPassword = "******", NewPassword = "******" }; var result = controller.ResetPassword("user", "token", model) as RedirectToRouteResult; Assert.NotNull(result); controller.MockUserService .Verify(u => u.ResetPasswordWithToken("user", "token", "newpwd")); }
public void ShowsErrorIfTokenExpired() { var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.ResetPasswordWithToken("user", "token", "newpwd")) .Returns(false); var model = new PasswordResetViewModel { ConfirmPassword = "******", NewPassword = "******" }; controller.ResetPassword("user", "token", model); Assert.Equal("The Password Reset Token is not valid or expired.", controller.ModelState[""].Errors[0].ErrorMessage); controller.MockUserService .Verify(u => u.ResetPasswordWithToken("user", "token", "newpwd")); }
public void ReturnsConfirmedWhenTokenMatchesUser() { var user = new User { UnconfirmedEmailAddress = "*****@*****.**", EmailConfirmationToken = "the-token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername("username")) .Returns(user); controller.MockUserService .Setup(u => u.ConfirmEmailAddress(user, "the-token")) .Returns(true); var model = (controller.Confirm("username", "the-token") as ViewResult).Model as EmailConfirmationModel; Assert.True(model.SuccessfulConfirmation); }
public void WillGetTheCurrentUserUsingTheRequestIdentityName() { var controller = new TestableUsersController(); controller.MockCurrentIdentity .Setup(stub => stub.Name) .Returns("theUsername"); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny <string>())) .Returns(new User { Key = 42 }); //act controller.Account(); // verify controller.MockUserService .Verify(stub => stub.FindByUsername("theUsername")); }
public void WillReturnTheAccountViewModelWithTheCuratedFeeds() { var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.FindByUsername(It.IsAny <string>())) .Returns(new User { Key = 42 }); controller.MockFeedsQuery .Setup(stub => stub.Execute(It.IsAny <int>())) .Returns(new[] { new CuratedFeed { Name = "theCuratedFeed" } }); // act var model = ((ViewResult)controller.Account()).Model as AccountViewModel; // verify Assert.Equal("theCuratedFeed", model.CuratedFeeds.First()); }
public void WillCreateTheUser() { var controller = new TestableUsersController(); controller.MockUserService .Setup(x => x.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Returns(new User { Username = "******", EmailAddress = "*****@*****.**" }); controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "theEmailAddress", }); controller.MockUserService .Verify(x => x.Create("theUsername", "thePassword", "theEmailAddress")); }
public void ReturnsFalseWhenTokenDoesNotMatchUser() { var user = new User { EmailAddress = "*****@*****.**", UnconfirmedEmailAddress = "*****@*****.**", EmailConfirmationToken = "the-token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername("username")) .Returns(user); controller.MockUserService .Setup(u => u.ConfirmEmailAddress(user, "not-the-token")) .Returns(false); var model = (controller.Confirm("username", "not-the-token") as ViewResult).Model as EmailConfirmationModel; Assert.False(model.SuccessfulConfirmation); }
public void WillInvalidateModelStateAndShowTheViewWhenAnEntityExceptionIsThrow() { var controller = new TestableUsersController(); controller.MockUserService .Setup(x => x.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Throws(new EntityException("aMessage")); var result = controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "theEmailAddress", }) as ViewResult; Assert.NotNull(result); Assert.Empty(result.ViewName); Assert.False(controller.ModelState.IsValid); Assert.Equal("aMessage", controller.ModelState[String.Empty].Errors[0].ErrorMessage); }
public void RedirectsAfterGeneratingToken() { var user = new User { EmailAddress = "*****@*****.**", Username = "******" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(s => s.GeneratePasswordResetToken("user", 1440)) .Returns(user) .Verifiable(); var model = new ForgotPasswordViewModel { Email = "user" }; var result = controller.ForgotPassword(model) as RedirectToRouteResult; Assert.NotNull(result); controller.MockUserService .Verify(s => s.GeneratePasswordResetToken("user", 1440)); }
public void WillSendNewUserEmailIfConfirmationRequired() { string sentConfirmationUrl = null; MailAddress sentToAddress = null; var controller = new TestableUsersController(); controller.MockMessageService .Setup(m => m.SendNewAccountEmail(It.IsAny <MailAddress>(), It.IsAny <string>())) .Callback <MailAddress, string>((to, url) => { sentToAddress = to; sentConfirmationUrl = url; }); controller.MockUserService .Setup(x => x.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())) .Returns(new User { Username = "******", EmailAddress = "*****@*****.**", EmailConfirmationToken = "confirmation" }); controller.MockConfig .Setup(x => x.ConfirmEmailAddresses) .Returns(true); controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "*****@*****.**", }); // We use a catch-all route for unit tests so we can see the parameters // are passed correctly. Assert.Equal("https://example.org/?Controller=Users&Action=Confirm&username=theUsername&token=confirmation", sentConfirmationUrl); Assert.Equal("*****@*****.**", sentToAddress.Address); }
public void SendsAccountChangedNoticeWhenConfirmingChangedEmail() { var user = new User { EmailAddress = "*****@*****.**", UnconfirmedEmailAddress = "*****@*****.**", EmailConfirmationToken = "the-token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername("username")) .Returns(user); controller.MockUserService .Setup(u => u.ConfirmEmailAddress(user, "the-token")) .Returns(true); var model = (controller.Confirm("username", "the-token") as ViewResult).Model as EmailConfirmationModel; Assert.True(model.SuccessfulConfirmation); Assert.False(model.ConfirmingNewAccount); controller.MockMessageService .Verify(m => m.SendEmailChangeNoticeToPreviousEmailAddress(user, "*****@*****.**")); }
public void DoesNotSendEmailChangeConfirmationNoticeWhenTokenDoesNotChange() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true, EmailConfirmationToken = "token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny<string>())) .Returns(user); controller.MockMessageService .Setup(m => m.SendEmailChangeConfirmationNotice(It.IsAny<MailAddress>(), It.IsAny<string>())) .Throws(new InvalidOperationException()); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = true }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); Assert.Equal("Account settings saved!", controller.TempData["Message"]); controller.MockUserService .Verify(u => u.UpdateProfile(user, It.IsAny<string>(), true)); }
public void WithInvalidUsernameReturnsFileNotFound() { var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny<string>())) .ReturnsNull(); var result = controller.Edit(new EditProfileViewModel()) as HttpNotFoundResult; Assert.NotNull(result); }
public void WillSendNewUserEmailIfConfirmationRequired() { string sentConfirmationUrl = null; MailAddress sentToAddress = null; var controller = new TestableUsersController(); controller.MockMessageService .Setup(m => m.SendNewAccountEmail(It.IsAny<MailAddress>(), It.IsAny<string>())) .Callback<MailAddress, string>((to, url) => { sentToAddress = to; sentConfirmationUrl = url; }); controller.MockUserService .Setup(x => x.Create(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) .Returns(new User { Username = "******", EmailAddress = "*****@*****.**", EmailConfirmationToken = "confirmation" }); controller.MockConfig .Setup(x => x.ConfirmEmailAddresses) .Returns(true); controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "*****@*****.**", }); // We use a catch-all route for unit tests so we can see the parameters // are passed correctly. Assert.Equal("https://example.org/?Controller=Users&Action=Confirm&username=theUsername&token=confirmation", sentConfirmationUrl); Assert.Equal("*****@*****.**", sentToAddress.Address); }
public void SendsEmailChangeConfirmationNoticeWhenEmailConfirmationTokenChanges() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny<string>())) .Returns(user); controller.MockUserService .Setup(u => u.UpdateProfile(user, "*****@*****.**", true)) .Callback(() => user.EmailConfirmationToken = "token"); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = true }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); Assert.Equal( "Account settings saved! We sent a confirmation email to verify your new email. When you confirm the email address, it will take effect and we will forget the old one.", controller.TempData["Message"]); }
public void WillCreateTheUser() { var controller = new TestableUsersController(); controller.MockUserService .Setup(x => x.Create(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) .Returns(new User { Username = "******", EmailAddress = "*****@*****.**" }); controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "theEmailAddress", }); controller.MockUserService .Verify(x => x.Create("theUsername", "thePassword", "theEmailAddress")); }
public void WillInvalidateModelStateAndShowTheViewWhenAnEntityExceptionIsThrow() { var controller = new TestableUsersController(); controller.MockUserService .Setup(x => x.Create(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) .Throws(new EntityException("aMessage")); var result = controller.Register( new RegisterRequest { Username = "******", Password = "******", EmailAddress = "theEmailAddress", }) as ViewResult; Assert.NotNull(result); Assert.Empty(result.ViewName); Assert.False(controller.ModelState.IsValid); Assert.Equal("aMessage", controller.ModelState[String.Empty].Errors[0].ErrorMessage); }
public void UpdatesEmailAllowedSetting() { var user = new User { EmailAddress = "*****@*****.**", EmailAllowed = true }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername(It.IsAny<string>())) .Returns(user); controller.MockUserService .Setup(u => u.UpdateProfile(user, "*****@*****.**", false)) .Verifiable(); var model = new EditProfileViewModel { EmailAddress = "*****@*****.**", EmailAllowed = false }; var result = controller.Edit(model) as RedirectToRouteResult; Assert.NotNull(result); controller.MockUserService .Verify(u => u.UpdateProfile(user, "*****@*****.**", false)); Assert.Equal("Account settings saved!", controller.TempData["Message"]); }
public void DoesntSendAccountChangedEmailsIfConfirmationTokenDoesntMatch() { var user = new User { EmailAddress = "*****@*****.**", UnconfirmedEmailAddress = "*****@*****.**", EmailConfirmationToken = "the-token" }; var controller = new TestableUsersController(); controller.MockUserService .Setup(u => u.FindByUsername("username")) .Returns(user); controller.MockUserService .Setup(u => u.ConfirmEmailAddress(user, "faketoken")) .Returns(false); // act: var model = (controller.Confirm("username", "faketoken") as ViewResult).Model as EmailConfirmationModel; // verify: Assert.False(model.SuccessfulConfirmation); Assert.False(model.ConfirmingNewAccount); controller.MockMessageService .Verify(m => m.SendEmailChangeConfirmationNotice(It.IsAny<MailAddress>(), It.IsAny<string>()), Times.Never()); controller.MockMessageService .Verify(m => m.SendEmailChangeNoticeToPreviousEmailAddress(It.IsAny<User>(), It.IsAny<string>()), Times.Never()); }