public async Task ShouldModifyExistingAndAddPermissions() { // Arrange Guid expectedId = Guid.NewGuid(); string expectedName = "Modified Name"; ICollection <Guid> expectedPermissionIds = new List <Guid> { Guid.NewGuid(), Guid.NewGuid() }; Role entity = Role.Create(expectedId, "Name", "Code"); var repository = new Mock <IRoleRepository>(); repository.Setup(e => e.GetByIdAsync(It.IsAny <Guid>(), It.IsAny <CancellationToken>())).ReturnsAsync(entity); ModifyRoleCommand cmd = new ModifyRoleCommand(expectedId, expectedName, "Code", expectedPermissionIds, 1); RoleCommandHandler actual = new RoleCommandHandler(repository.Object); // Act await actual.HandleAsync(cmd); // Assert Assert.IsTrue(entity.Id == expectedId); Assert.IsTrue(entity.Name == expectedName); Assert.IsTrue(entity.RolePermissions != null); Assert.IsTrue(entity.RolePermissions.Count == expectedPermissionIds.Count); }
public async Task HandleAsync(ModifyRoleCommand message, CancellationToken token = default(CancellationToken)) { var role = await this.GetRoleAsync(message.RoleId); role.Modify(message.Name, message.Code, message.Version); if (message.PermissionIds == null || message.PermissionIds.Count == 0) { if (role.RolePermissions.Count != 0) { role.UnassignAllPermissions(); } } else { var existingPermissionIds = (from permission in role.RolePermissions select permission.PermissionId).ToList(); foreach (var permissionId in message.PermissionIds) { if (!role.RolePermissions.Any(e => e.PermissionId == permissionId)) { role.AssignPermission(permissionId); } } foreach (var permissionId in existingPermissionIds) { if (!message.PermissionIds.Any(e => e == permissionId)) { role.UnassignPermission(permissionId); } } } await _roles.SaveChangesAsync(token); }