public async void EditUserRoles_ResultFail_ReturnsBadRequestObjectResult()
        {
            //Arrange
            var model          = _fixture.Create <EditRolesModel>();
            var identityResult = new EditUserRolesResultModel()
            {
                Succeeded = false, Errors = new List <IdentityError>()
            };

            _rolesService.Setup(cfg => cfg.EditUserRolesAsync(model)).ReturnsAsync(identityResult);

            //Act
            var response = await _rolesController.EditUserRoles(model);

            //Assert
            Assert.NotNull(response);
            Assert.IsType <BadRequestObjectResult>(response.Result);
        }
        public async void EditUserRoles_ResultSucceeded_ReturnsOkObjectResult()
        {
            //Arrange
            var model          = _fixture.Create <EditRolesModel>();
            var identityResult = new EditUserRolesResultModel()
            {
                Succeeded = true, Errors = new List <IdentityError>()
            };

            _rolesService.Setup(cfg => cfg.EditUserRolesAsync(model)).ReturnsAsync(identityResult);

            //Act
            var response = await _rolesController.EditUserRoles(model);

            //Assert
            Assert.NotNull(response);
            var okResult = Assert.IsType <OkObjectResult>(response.Result);
            var result   = Assert.IsType <EditUserRolesResultModel>(okResult.Value);

            Assert.Equal(identityResult, result);
        }
        /// <inheritdoc/>
        public async Task <EditUserRolesResultModel> EditUserRolesAsync(EditRolesModel model)
        {
            User user = await _userManager.FindByIdAsync(model.UserId);

            var userRoles = await _userManager.GetRolesAsync(user);

            var addResult = await _userManager.AddToRolesAsync(user, model.Roles.Except(userRoles));

            var removeResult = await _userManager.RemoveFromRolesAsync(user, userRoles.Except(model.Roles));

            var result = new EditUserRolesResultModel();

            result.Succeeded = false;
            result.Errors.AddRange(addResult.Errors);
            result.Errors.AddRange(removeResult.Errors);

            if (addResult.Succeeded && removeResult.Succeeded)
            {
                result.Succeeded = true;
            }

            return(result);
        }