コード例 #1
0
            public virtual async Task WhenNewEmailIsDifferentAndWasUnconfirmed_SavesChanges()
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);
                var model      = CreateViewModel(account);

                model.ChangeEmail.NewEmail = "*****@*****.**";

                account.UnconfirmedEmailAddress = account.EmailAddress;
                account.EmailAddress            = null;

                // Act
                var result = await InvokeChangeEmail(controller, account, model);

                // Assert
                GetMock <IUserService>().Verify(u => u.ChangeEmailAddress(It.IsAny <User>(), It.IsAny <string>()), Times.Once);
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });

                Assert.Equal(controller.Messages.EmailUpdated, controller.TempData["Message"]);

                GetMock <IMessageService>()
                .Verify(m => m.SendEmailChangeConfirmationNotice(It.IsAny <MailAddress>(), It.IsAny <string>()),
                        Times.Never);
            }
コード例 #2
0
            public void RedirectsToPasswordChangedIfUserServiceSucceeds()
            {
                // Arrange
                var controller = GetController <UsersController>();

                controller.SetUser("user");
                GetMock <IUserService>()
                .Setup(u => u.ChangePassword("user", "old", "new"))
                .Returns(true);
                var inputModel = new PasswordChangeViewModel()
                {
                    OldPassword     = "******",
                    NewPassword     = "******",
                    ConfirmPassword = "******"
                };

                // Act
                var result = controller.ChangePassword(inputModel);

                // Assert
                ResultAssert.IsRedirectToRoute(result, new
                {
                    controller = "Users",
                    action     = "PasswordChanged"
                });
            }
コード例 #3
0
            public async Task GivenValidRequest_ItRemovesCredAndSendsNotificationToUser()
            {
                // Arrange
                var cred = CredentialBuilder.CreatePbkdf2Password("password");
                var user = Fakes.CreateUser("test",
                                            cred,
                                            CredentialBuilder.CreateExternalCredential("MicrosoftAccount", "blorg", "bloog"));

                GetMock <AuthenticationService>()
                .Setup(a => a.RemoveCredential(user, cred))
                .Completes()
                .Verifiable();
                GetMock <IMessageService>()
                .Setup(m => m.SendCredentialRemovedNotice(user, cred))
                .Verifiable();

                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = await controller.RemovePassword();

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                GetMock <AuthenticationService>().VerifyAll();
                GetMock <IMessageService>().VerifyAll();
            }
コード例 #4
0
            public async Task GivenSuccessInAuthService_ItRedirectsBackToManageCredentialsWithMessage()
            {
                // Arrange
                var user = new User("foo");

                user.Credentials.Add(CredentialBuilder.CreatePbkdf2Password("old"));

                GetMock <AuthenticationService>()
                .Setup(u => u.ChangePassword(user, "old", "new"))
                .CompletesWith(true);
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);
                var inputModel = new AccountViewModel()
                {
                    ChangePassword = new ChangePasswordViewModel()
                    {
                        OldPassword = "******",
                        NewPassword = "******",
                    }
                };

                // Act
                var result = await controller.ChangePassword(inputModel);

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                Assert.Equal(Strings.PasswordChanged, controller.TempData["Message"]);
            }
コード例 #5
0
            public async Task WhenAddOrganizationSucceeds_RedirectsToManageOrganization()
            {
                var token = "token";
                var org   = new Organization("newlyCreated")
                {
                    UnconfirmedEmailAddress = OrgEmail,
                    EmailConfirmationToken  = token
                };

                var mockUserService = GetMock <IUserService>();

                mockUserService
                .Setup(x => x.AddOrganizationAsync(OrgName, OrgEmail, Admin))
                .Returns(Task.FromResult(org));

                var messageService = GetMock <IMessageService>();

                var controller = GetController <OrganizationsController>();

                controller.SetCurrentUser(Admin);

                var result = await controller.Add(Model);

                ResultAssert.IsRedirectToRoute(result,
                                               new { accountName = org.Username, action = nameof(OrganizationsController.ManageOrganization) });

                messageService.Verify(
                    x => x.SendNewAccountEmail(
                        It.Is <MailAddress>(m => m.Address == OrgEmail && m.DisplayName == org.Username),
                        It.Is <string>(s => s.Contains(token))),
                    Times.Once());
            }
コード例 #6
0
            public virtual async Task WhenAlreadyConfirmed_RedirectsToAccount(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                // Act
                var result = await InvokeCancelChangeEmail(controller, account, getCurrentUser);

                // Assert
                GetMock <IUserService>().Verify(u => u.CancelChangeEmailAddress(It.IsAny <User>()), Times.Never);
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });
            }
コード例 #7
0
            public async Task RedirectsToAccountPage()
            {
                var user = new User {
                    Username = "******"
                };
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                var result = await controller.GenerateApiKey(expirationInDays : null);

                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
            }
コード例 #8
0
            public virtual async Task UpdatesEmailPreferences(Func <Fakes, User> getCurrentUser, bool emailAllowed, bool notifyPackagePushed)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                // Act
                var result = await InvokeChangeEmailSubscription(controller, getCurrentUser, emailAllowed, notifyPackagePushed);

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });
                GetMock <IUserService>().Verify(u => u.ChangeEmailSubscriptionAsync(account, emailAllowed, notifyPackagePushed));
            }
コード例 #9
0
            public void RedirectsToAccountPage()
            {
                var user = new User {
                    Username = "******"
                };
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                var result = controller.GenerateApiKey();

                ResultAssert.IsRedirectToRoute(result, new { action = "Account", controller = "Users" });
            }
コード例 #10
0
            public void RedirectsToAccountPage()
            {
                var controller = GetController <UsersController>();
                var user       = new User {
                    Username = "******"
                };

                controller.SetUser(user);
                GetMock <IUserService>()
                .Setup(u => u.FindByUsername(It.IsAny <string>()))
                .Returns(user);
                var result = controller.GenerateApiKey();

                ResultAssert.IsRedirectToRoute(result, new { action = "Account", controller = "Users" });
            }
コード例 #11
0
            public virtual async Task WhenNewEmailIsSame_RedirectsWithoutChange(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);
                var model      = CreateViewModel(account);

                model.ChangeEmail.NewEmail = account.EmailAddress;

                // Act
                var result = await InvokeChangeEmail(controller, account, getCurrentUser, model);

                // Assert
                GetMock <IUserService>().Verify(u => u.ChangeEmailAddress(It.IsAny <User>(), It.IsAny <string>()), Times.Never);
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });
            }
コード例 #12
0
            public async Task GivenNoCredential_ItRedirectsBackWithNoChangesMade()
            {
                // Arrange
                var user = Fakes.CreateUser("test",
                                            CredentialBuilder.CreatePbkdf2Password("password"));
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = await controller.RemoveCredential(CredentialTypes.ExternalPrefix + "MicrosoftAccount");

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                Assert.Equal(1, user.Credentials.Count);
            }
コード例 #13
0
            public async Task GivenNoOtherLoginCredentials_ItRedirectsBackWithAnErrorMessage()
            {
                // Arrange
                var user = Fakes.CreateUser("test",
                                            CredentialBuilder.CreatePbkdf2Password("password"));
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = await controller.RemovePassword();

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                Assert.Equal(Strings.CannotRemoveOnlyLoginCredential, controller.TempData["Message"]);
                Assert.Equal(1, user.Credentials.Count);
            }
コード例 #14
0
            public async Task GivenNoOtherLoginCredentials_ItRedirectsBackWithAnErrorMessage()
            {
                // Arrange
                var cred       = CredentialBuilder.CreateExternalCredential("MicrosoftAccount", "blorg", "bloog");
                var user       = Fakes.CreateUser("test", cred);
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = await controller.RemoveCredential(cred.Type);

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                Assert.Equal(Strings.CannotRemoveOnlyLoginCredential, controller.TempData["Message"]);
                Assert.Equal(1, user.Credentials.Count);
            }
コード例 #15
0
            public virtual async Task WhenUnconfirmed_CancelsEmailChangeRequest(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                account.UnconfirmedEmailAddress = account.EmailAddress;
                account.EmailAddress            = null;

                // Act
                var result = await InvokeCancelChangeEmail(controller, account, getCurrentUser);

                // Assert
                GetMock <IUserService>().Verify(u => u.CancelChangeEmailAddress(account), Times.Once);
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });
                Assert.Equal(controller.Messages.EmailUpdateCancelled, controller.TempData["Message"]);
            }
コード例 #16
0
            public async Task GivenNoPassword_ItRedirectsBackWithNoChangesMade()
            {
                // Arrange
                var fakes = Get <Fakes>();
                var user  = fakes.CreateUser("test",
                                             CredentialBuilder.CreateExternalCredential("MicrosoftAccount", "blorg", "bloog"));
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = await controller.RemovePassword();

                // Assert
                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                Assert.Equal(Strings.NoCredentialToRemove, controller.TempData["Message"]);
                Assert.Equal(1, user.Credentials.Count);
            }
コード例 #17
0
            public void UpdatesEmailAllowedSetting()
            {
                var user = new User("aUsername")
                {
                    EmailAddress = "*****@*****.**",
                    EmailAllowed = true
                };

                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);
                GetMock <IUserService>()
                .Setup(u => u.ChangeEmailSubscription(user, false));

                var result = controller.ChangeEmailSubscription(false);

                ResultAssert.IsRedirectToRoute(result, new { action = "Account" });
                GetMock <IUserService>().Verify(u => u.ChangeEmailSubscription(user, false));
            }
コード例 #18
0
            /// <remarks>
            /// Normally, you should use a single <see cref="TheoryAttribute"/> that enumerates through the possible values of <paramref name="getCurrentUser"/> and <paramref name="newEmailIsConfirmed"/>,
            /// but because we are using test case "inheritance" (search for properties with the same name as <see cref="AllowedCurrentUsersDataName"/>), this is not possible.
            /// </remarks>
            private async Task WhenNewEmailIsDifferentAndWasConfirmedHelper(Func <Fakes, User> getCurrentUser, bool newEmailIsConfirmed)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);
                var model      = CreateViewModel(account);

                model.ChangeEmail.NewEmail = "*****@*****.**";

                // Act
                var result = await InvokeChangeEmail(controller, account, getCurrentUser, model, newEmailIsConfirmed);

                // Assert
                GetMock <IUserService>().Verify(u => u.ChangeEmailAddress(It.IsAny <User>(), It.IsAny <string>()), Times.Once);
                ResultAssert.IsRedirectToRoute(result, new { action = controller.AccountAction });

                GetMock <IMessageService>()
                .Verify(m => m.SendMessageAsync(It.IsAny <EmailChangeConfirmationMessage>(), It.IsAny <bool>(), It.IsAny <bool>()),
                        newEmailIsConfirmed ? Times.Never() : Times.Once());
            }