示例#1
0
            public async Task WhenUserIsNotMember_ReturnsNonSuccess()
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                controller.SetCurrentUser(Fakes.User);

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

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.True(model.WrongUsername);
                Assert.False(model.SuccessfulConfirmation);
            }
            public virtual async Task WhenAlreadyConfirmed_DoesNotSendEmail(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

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

                // Assert
                var mailService = GetMock <IMessageService>();

                mailService.Verify(m => m.SendMessageAsync(It.IsAny <NewAccountMessage>(), It.IsAny <bool>(), It.IsAny <bool>()), Times.Never);

                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SentEmail);
            }
            public async Task WhenIsNotConfirmedAndTokenDoesNotMatch_ShowsError(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                account.EmailConfirmationToken = "token";

                account.UnconfirmedEmailAddress = "*****@*****.**";

                // Act
                var result = await InvokeConfirm(controller, account, getCurrentUser, "wrongToken");

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SuccessfulConfirmation);
            }
示例#4
0
            public virtual void WhenAccountAlreadyConfirmed()
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                controller.SetCurrentUser(GetCurrentUser(controller));

                // Act
                var result = InvokeConfirmationRequired(controller, account);

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.True(model.AlreadyConfirmed);
                Assert.Equal(account.EmailAddress, model.ConfirmedEmailAddress);
                Assert.Null(model.UnconfirmedEmailAddress);
            }
            public async Task WhenIsNotConfirmedAndEntityExceptionThrown_ShowsErrorForDuplicateEmail(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);
                var token      = account.EmailConfirmationToken = "token";

                account.UnconfirmedEmailAddress = "*****@*****.**";

                // Act
                var result = await InvokeConfirm(controller, account, getCurrentUser, token,
                                                 exception : new EntityException("msg"));

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SuccessfulConfirmation);
                Assert.True(model.DuplicateEmailAddress);
            }
            public void WillReturnTheAccountViewModelWithTheUserApiKey()
            {
                var controller = GetController <UsersController>();

                controller.SetUser("user");
                var stubApiKey = Guid.NewGuid();

                GetMock <IUserService>()
                .Setup(s => s.FindByUsername("user"))
                .Returns(new User {
                    Key = 42, ApiKey = stubApiKey
                });

                // act
                var model = ResultAssert.IsView <AccountViewModel>(controller.Account());

                // verify
                Assert.Equal(stubApiKey.ToString(), model.ApiKey);
            }
示例#7
0
            public async Task WhenAddOrganizationThrowsEntityException_ReturnsViewWithMessage()
            {
                var message = "message";

                var mockUserService = GetMock <IUserService>();

                mockUserService
                .Setup(x => x.AddOrganizationAsync(OrgName, OrgEmail, Admin))
                .Throws(new EntityException(message));

                var controller = GetController <OrganizationsController>();

                controller.SetCurrentUser(Admin);

                var result = await controller.Add(Model);

                ResultAssert.IsView <AddOrganizationViewModel>(result);
                Assert.Equal(message, controller.TempData["ErrorMessage"]);
            }
            public virtual async Task WithNullUser_ShowsError(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller      = GetController();
                var accountUsername = "******";

                controller.SetCurrentUser(getCurrentUser(Fakes));

                // Act
                var result = await controller.Confirm(accountUsername, "token");

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.Equal(accountUsername, model.AccountName);
                Assert.False(model.SuccessfulConfirmation);
                Assert.True(model.WrongUsername);
                Assert.True(model.AlreadyConfirmed);
            }
            public void WillReturnTheAccountViewModelWithTheCuratedFeeds()
            {
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(new User {
                    Key = 42
                });
                GetMock <ICuratedFeedService>()
                .Setup(stub => stub.GetFeedsForManager(42))
                .Returns(new[] { new CuratedFeed {
                                     Name = "theCuratedFeed"
                                 } });

                // act
                var model = ResultAssert.IsView <AccountViewModel>(controller.Account(), viewName: "Account");

                // verify
                Assert.Equal("theCuratedFeed", model.CuratedFeeds.First());
            }
            public virtual void WhenAccountIsNotConfirmed(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

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

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

                // Assert
                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.AlreadyConfirmed);
                Assert.Null(model.ConfirmedEmailAddress);
                Assert.Equal(account.UnconfirmedEmailAddress, model.UnconfirmedEmailAddress);
            }
示例#11
0
            public virtual void WhenAlreadyConfirmed_DoesNotSendEmail()
            {
                // Arrange
                var controller = GetController();
                var account    = GetAccount(controller);

                controller.SetCurrentUser(GetCurrentUser(controller));

                // Act
                var result = InvokeConfirmationRequiredPost(controller, account);

                // Assert
                var mailService = GetMock <IMessageService>();

                mailService.Verify(m => m.SendNewAccountEmail(It.IsAny <User>(), It.IsAny <string>()), Times.Never);

                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SentEmail);
            }
            public void WillReturnTheAccountViewModelWithTheCuratedFeeds(Func <Fakes, User> getCurrentUser)
            {
                // Arrange
                var controller = GetController <TAccountsController>();
                var account    = GetAccount(controller);

                GetMock <ICuratedFeedService>()
                .Setup(stub => stub.GetFeedsForManager(account.Key))
                .Returns(new[] { new CuratedFeed {
                                     Name = "theCuratedFeed"
                                 } });

                // Act
                var result = InvokeAccountInternal(controller, getCurrentUser);

                // Assert
                var model = ResultAssert.IsView <TAccountViewModel>(result, viewName: controller.AccountAction);

                Assert.Equal("theCuratedFeed", model.CuratedFeeds.First());
            }
            public async Task ShowsAnErrorForWrongUsername()
            {
                var user = new User
                {
                    Username = "******",
                    UnconfirmedEmailAddress = "*****@*****.**",
                    EmailConfirmationToken  = "aToken",
                };

                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                var result = await controller.Confirm("wrongUsername", "aToken");

                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SuccessfulConfirmation);
                Assert.True(model.WrongUsername);
            }
            public async Task GivenFailureInAuthService_ItAddsModelError()
            {
                // Arrange
                var user = new User("foo");

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

                GetMock <AuthenticationService>()
                .Setup(u => u.ChangePassword(user, "old", "new", false))
                .CompletesWith(false);

                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

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

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

                // Assert
                var outputModel = ResultAssert.IsView <AccountViewModel>(result, viewName: "Account");

                Assert.Same(inputModel, outputModel);

                var errorMessages = controller
                                    .ModelState["ChangePassword.OldPassword"]
                                    .Errors
                                    .Select(e => e.ErrorMessage)
                                    .ToArray();

                Assert.Equal(errorMessages, new[] { Strings.CurrentPasswordIncorrect });
            }
示例#15
0
            public void WillUseApiKeyInColumnIfNoCredentialPresent()
            {
                var apiKey     = Guid.NewGuid();
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(new User {
                    Key = 42, ApiKey = apiKey
                });
                GetMock <ICuratedFeedService>()
                .Setup(stub => stub.GetFeedsForManager(42))
                .Returns(new[] { new CuratedFeed {
                                     Name = "theCuratedFeed"
                                 } });

                // act
                var result = controller.Account();

                // verify
                var model = ResultAssert.IsView <AccountViewModel>(result);

                Assert.Equal(apiKey.ToString().ToLowerInvariant(), model.ApiKey);
            }
            public async Task ShowsAnErrorForWrongToken()
            {
                var user = new User
                {
                    Username = "******",
                    UnconfirmedEmailAddress = "*****@*****.**",
                    EmailConfirmationToken  = "aToken",
                };

                GetMock <IUserService>()
                .Setup(u => u.ConfirmEmailAddress(user, It.IsAny <string>()))
                .CompletesWith(false);
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                var result = await controller.Confirm("aUsername", "wrongToken");

                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SuccessfulConfirmation);
            }
            public async Task ShowsAnErrorForConflictingEmailAddress()
            {
                var user = new User
                {
                    Username = "******",
                    UnconfirmedEmailAddress = "*****@*****.**",
                    EmailConfirmationToken  = "aToken",
                };

                GetMock <IUserService>()
                .Setup(u => u.ConfirmEmailAddress(user, It.IsAny <string>()))
                .Throws(new EntityException("msg"));
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                var result = await controller.Confirm("aUsername", "aToken");

                var model = ResultAssert.IsView <ConfirmationViewModel>(result);

                Assert.False(model.SuccessfulConfirmation);
                Assert.True(model.DuplicateEmailAddress);
            }
示例#18
0
            public async Task GivenInvalidView_ItReturnsView()
            {
                // Arrange
                var controller = GetController <UsersController>();

                controller.ModelState.AddModelError("ChangePassword.blarg", "test");
                var inputModel = new AccountViewModel();

                controller.SetCurrentUser(new User()
                {
                    Credentials = new List <Credential> {
                        new CredentialBuilder().CreatePasswordCredential("abc")
                    }
                });

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

                // Assert
                var outputModel = ResultAssert.IsView <AccountViewModel>(result, viewName: "Account");

                Assert.Same(inputModel, outputModel);
            }
            public async Task DeleteHappyAccount(bool shouldUnlist)
            {
                // Arrange
                string username   = "******";
                var    controller = GetController();
                var    fakes      = Get <Fakes>();
                var    testUser   = fakes.CreateUser(username);

                testUser.IsDeleted = false;
                testUser.Key       = 1;
                var adminUser = fakes.Admin;

                controller.SetCurrentUser(adminUser);

                var expectedStatus = new DeleteAccountStatus();

                GetMock <IDeleteAccountService>()
                .Setup(stub => stub.DeleteAccountAsync(
                           testUser,
                           adminUser,
                           shouldUnlist ? AccountDeletionOrphanPackagePolicy.UnlistOrphans : AccountDeletionOrphanPackagePolicy.KeepOrphans))
                .ReturnsAsync(expectedStatus);

                var model = new DeleteAccountAsAdminViewModel()
                {
                    AccountName  = username,
                    ShouldUnlist = shouldUnlist
                };

                // act
                var result = await controller.Delete(model);

                var status = ResultAssert.IsView <DeleteAccountStatus>(result, "DeleteAccountStatus");

                // Assert
                Assert.Equal(expectedStatus, status);
            }
示例#20
0
            public void UpdatesEmailAllowedSetting()
            {
                var user = new User("aUsername")
                {
                    EmailAddress = "*****@*****.**",
                    EmailAllowed = true
                };

                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);
                GetMock <IUserService>()
                .Setup(u => u.UpdateProfile(user, false));
                var model = new EditProfileViewModel {
                    EmailAddress = "*****@*****.**", EmailAllowed = false
                };

                var result = controller.Edit(model);

                var viewModel = ResultAssert.IsView <EditProfileViewModel>(result);

                Assert.Same(model, viewModel);
                GetMock <IUserService>().Verify(u => u.UpdateProfile(user, false));
            }
示例#21
0
            public void LoadsDescriptionsOfCredentialsInToViewModel()
            {
                // Arrange
                var user = Fakes.CreateUser(
                    "test",
                    CredentialBuilder.CreatePbkdf2Password("hunter2"),
                    CredentialBuilder.CreateV1ApiKey(Guid.NewGuid()),
                    CredentialBuilder.CreateExternalCredential("MicrosoftAccount", "blarg", "Bloog"));
                var controller = GetController <UsersController>();

                controller.SetCurrentUser(user);

                // Act
                var result = controller.Account();

                // Assert
                var model = ResultAssert.IsView <AccountViewModel>(result, viewName: "Account");
                var descs = model.Credentials.ToDictionary(c => c.Kind); // Should only be one of each kind

                Assert.Equal(3, descs.Count);
                Assert.Equal(Strings.CredentialType_Password, descs[CredentialKind.Password].TypeCaption);
                Assert.Equal(Strings.CredentialType_ApiKey, descs[CredentialKind.Token].TypeCaption);
                Assert.Equal(Strings.MicrosoftAccount_Caption, descs[CredentialKind.External].TypeCaption);
            }