public async Task ChangeUserRolesPost_ShouldReturnBadRequestWhenSelectedRoleNotExist()
        {
            // Arrange
            ChangeUserRolesFormModel formModel = new ChangeUserRolesFormModel()
            {
                AvailableRoles = new List <string>(),
                SelectedRoles  = new List <string>()
                {
                    "InvalidRole"
                },
                Username = FirstUserUsername
            };

            Mock <RoleManager <IdentityRole> > roleManager = this.GetAndSetRoleManagerMock();

            roleManager
            .Setup(rm => rm.RoleExistsAsync(It.IsAny <string>()))
            .ReturnsAsync(false);

            Mock <UserManager <User> > userManager = this.GetAndSetUserManagerMock();

            UsersController controller = new UsersController(null, roleManager.Object, userManager.Object);

            // Act
            IActionResult actionResult = await controller.ChangeUserRoles(FirstUserId, formModel);

            // Assert
            actionResult.Should().BeOfType <BadRequestResult>();
        }
示例#2
0
        public async Task <IActionResult> ChangeUserRoles(string id, ChangeUserRolesFormModel formModel)
        {
            User user = await this.userManager.FindByIdAsync(id);

            if (user == null)
            {
                return(NotFound());
            }

            IEnumerable <string> availableRoles = formModel.AvailableRoles;
            IEnumerable <string> selectedRoles  = formModel.SelectedRoles;

            if (availableRoles.Count() == 0 && selectedRoles.Count() == 0)
            {
                return(BadRequest());
            }

            foreach (string role in selectedRoles)
            {
                bool roleExists = await this.roleManager.RoleExistsAsync(role);

                if (!roleExists)
                {
                    return(BadRequest());
                }
            }

            IEnumerable <string> currentRoles = await this.userManager.GetRolesAsync(user);

            IdentityResult resultClearRoles = await this.userManager
                                              .RemoveFromRolesAsync(user, currentRoles);

            if (!resultClearRoles.Succeeded)
            {
                this.AddModelErrors(resultClearRoles);

                return(View(await GetChangeUserRolesFormModel(user, formModel.CurrentPage, formModel.Search)));
            }

            if (selectedRoles.Count() == 0)
            {
                TempData.AddSuccessMessage(string.Format(UserProfileUpdatedMessage, user.UserName));

                return(RedirectToAction(nameof(Index), new { page = formModel.CurrentPage, search = formModel.Search }));
            }

            IdentityResult resultSetRoles = await this.userManager.AddToRolesAsync(user, selectedRoles);

            if (!resultSetRoles.Succeeded)
            {
                this.AddModelErrors(resultSetRoles);

                return(View(await GetChangeUserRolesFormModel(user, formModel.CurrentPage, formModel.Search)));
            }

            TempData.AddSuccessMessage(string.Format(UserProfileUpdatedMessage, user.UserName));

            return(RedirectToAction(nameof(Index), new { page = formModel.CurrentPage, search = formModel.Search }));
        }
        public async Task ChangeUserRolesPost_ShouldReturnRedirectToActionWhenValidUserId()
        {
            // Arrange
            string tempDataSuccessMessage = null;

            ChangeUserRolesFormModel formModel = new ChangeUserRolesFormModel()
            {
                AvailableRoles = new List <string>(),
                SelectedRoles  = new List <string>()
                {
                    GlobalConstants.ModeratorRole
                },
                Username = FirstUserUsername
            };

            Mock <RoleManager <IdentityRole> > roleManager = this.GetAndSetRoleManagerMock();

            roleManager
            .Setup(rm => rm.RoleExistsAsync(It.IsAny <string>()))
            .ReturnsAsync(true);

            Mock <UserManager <User> > userManager = this.GetAndSetUserManagerMock();

            userManager
            .Setup(um => um.RemoveFromRolesAsync(It.IsAny <User>(), It.IsAny <List <string> >()))
            .ReturnsAsync(IdentityResult.Success);

            userManager
            .Setup(um => um.AddToRolesAsync(It.IsAny <User>(), It.IsAny <List <string> >()))
            .ReturnsAsync(IdentityResult.Success);

            Mock <ITempDataDictionary> tempData = new Mock <ITempDataDictionary>();

            tempData.SetupSet(t => t[WebConstants.TempDataSuccessMessageKey]        = It.IsAny <string>())
            .Callback((string key, object successMessage) => tempDataSuccessMessage = successMessage as string);

            UsersController controller = new UsersController(null, roleManager.Object, userManager.Object);

            controller.TempData = tempData.Object;

            // Act
            IActionResult actionResult = await controller.ChangeUserRoles(FirstUserId, formModel);

            // Assert
            actionResult.Should().BeOfType <RedirectToActionResult>();
            actionResult.As <RedirectToActionResult>().ActionName.Should().Be("Index");

            tempDataSuccessMessage.Should().Be(MessageUpdated);
        }
        public async Task ChangeUserRolesPost_ShouldReturnViewWithModelWhenAddToRolesAsyncFailed()
        {
            // Arrange
            ChangeUserRolesFormModel formModel = new ChangeUserRolesFormModel()
            {
                AvailableRoles = new List <string>(),
                SelectedRoles  = new List <string>()
                {
                    GlobalConstants.ModeratorRole
                },
                Username = FirstUserUsername
            };

            Mock <RoleManager <IdentityRole> > roleManager = this.GetAndSetRoleManagerMock();

            roleManager
            .Setup(rm => rm.RoleExistsAsync(It.IsAny <string>()))
            .ReturnsAsync(true);

            Mock <UserManager <User> > userManager = this.GetAndSetUserManagerMock();

            userManager
            .Setup(um => um.RemoveFromRolesAsync(It.IsAny <User>(), It.IsAny <List <string> >()))
            .ReturnsAsync(IdentityResult.Success);

            userManager
            .Setup(um => um.AddToRolesAsync(It.IsAny <User>(), It.IsAny <List <string> >()))
            .ReturnsAsync(IdentityResult.Failed(new IdentityError {
                Description = "test"
            }));

            UsersController controller = new UsersController(null, roleManager.Object, userManager.Object);

            // Act
            IActionResult actionResult = await controller.ChangeUserRoles(FirstUserId, formModel);

            // Assert
            actionResult.Should().BeOfType <ViewResult>();

            object model = actionResult.As <ViewResult>().Model;

            model.Should().BeOfType <ChangeUserRolesFormModel>();

            ChangeUserRolesFormModel returnedModel = model.As <ChangeUserRolesFormModel>();

            returnedModel.Username.Should().Be(formModel.Username);
        }
        public async Task ChangeUserRolesPost_ShouldReturnBadRequestWhenAvailableRolesCountIsZeroAndSelectedRolesCountIsZero()
        {
            // Arrange
            ChangeUserRolesFormModel formModel = new ChangeUserRolesFormModel()
            {
                AvailableRoles = new List <string>(),
                SelectedRoles  = new List <string>()
            };

            Mock <UserManager <User> > userManager = this.GetAndSetUserManagerMock();

            UsersController controller = new UsersController(null, null, userManager.Object);

            // Act
            IActionResult actionResult = await controller.ChangeUserRoles(FirstUserId, formModel);

            // Assert
            actionResult.Should().BeOfType <BadRequestResult>();
        }
        public async Task ChangeUserRolesGet_ShouldReturnViewWithCorrectModelWhenValidUserId()
        {
            // Arrange
            Mock <RoleManager <IdentityRole> > roleManager = GetAndSetRoleManagerMock();

            Mock <UserManager <User> > userManager = GetAndSetUserManagerMock();

            UsersController controller = new UsersController(null, roleManager.Object, userManager.Object);

            // Act
            IActionResult actionResult = await controller.ChangeUserRoles(FirstUserId, 1, null);

            // Arrange
            actionResult.Should().BeOfType <ViewResult>();

            object model = actionResult.As <ViewResult>().Model;

            model.Should().BeOfType <ChangeUserRolesFormModel>();

            ChangeUserRolesFormModel returnedModel = model.As <ChangeUserRolesFormModel>();

            returnedModel.Username.Should().Be(FirstUserUsername);
        }