keycloak-aplcache

Details

diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
index d77f0a9..184c7d2 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java
@@ -220,12 +220,12 @@ public class UsersResource {
     }
 
     public static void updateUserFromRep(UserModel user, UserRepresentation rep, Set<String> attrsToRemove, RealmModel realm, KeycloakSession session) {
-        if (realm.isEditUsernameAllowed()) {
+        if (rep.getUsername() != null && realm.isEditUsernameAllowed()) {
             user.setUsername(rep.getUsername());
         }
-        user.setEmail(rep.getEmail());
-        user.setFirstName(rep.getFirstName());
-        user.setLastName(rep.getLastName());
+        if (rep.getEmail() != null) user.setEmail(rep.getEmail());
+        if (rep.getFirstName() != null) user.setFirstName(rep.getFirstName());
+        if (rep.getLastName() != null) user.setLastName(rep.getLastName());
 
         if (rep.isEnabled() != null) user.setEnabled(rep.isEnabled());
         if (rep.isTotp() != null) user.setOtpEnabled(rep.isTotp());
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
index 4990f58..611e2c9 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java
@@ -529,6 +529,32 @@ public class UserTest extends AbstractClientTest {
     }
 
     @Test
+    public void updateUserWithoutUsername() {
+        switchEditUsernameAllowedOn();
+
+        String id = createUser();
+
+        UserResource user = realm.users().get(id);
+
+        UserRepresentation rep = new UserRepresentation();
+        rep.setFirstName("Firstname");
+
+        user.update(rep);
+
+        rep = new UserRepresentation();
+        rep.setLastName("Lastname");
+
+        user.update(rep);
+
+        rep = realm.users().get(id).toRepresentation();
+
+        assertEquals("user1", rep.getUsername());
+        assertEquals("user1@localhost", rep.getEmail());
+        assertEquals("Firstname", rep.getFirstName());
+        assertEquals("Lastname", rep.getLastName());
+    }
+
+    @Test
     public void updateUserWithNewUsernameNotPossible() {
         String id = createUser();