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>(); }
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); }