]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-14944 NPE when updating a Permission Template created via WS without a description
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Mon, 28 Jun 2021 21:07:13 +0000 (16:07 -0500)
committersonartech <sonartech@sonarsource.com>
Tue, 29 Jun 2021 20:03:18 +0000 (20:03 +0000)
server/sonar-webserver-webapi/src/main/java/org/sonar/server/permission/ws/template/UpdateTemplateAction.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/permission/ws/template/UpdateTemplateActionTest.java

index f555d90684a96e619eefa179d38080c18acba15d..816324eca3d0b9423e599eb5702a63fde975dead 100644 (file)
@@ -39,7 +39,6 @@ import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.Permissions.PermissionTemplate;
 import org.sonarqube.ws.Permissions.UpdateTemplateWsResponse;
 
-import static com.google.common.base.MoreObjects.firstNonNull;
 import static java.lang.String.format;
 import static java.util.Objects.requireNonNull;
 import static org.apache.commons.lang.StringUtils.isBlank;
@@ -131,14 +130,19 @@ public class UpdateTemplateAction implements PermissionsWsAction {
   private PermissionTemplateDto getAndBuildTemplateToUpdate(DbSession dbSession, String uuid, @Nullable String newName, @Nullable String newDescription,
     @Nullable String newProjectKeyPattern) {
     PermissionTemplateDto templateToUpdate = wsSupport.findTemplate(dbSession, WsTemplateRef.newTemplateRef(uuid, null));
-    templateToUpdate.setName(firstNonNull(newName, templateToUpdate.getName()));
-    templateToUpdate.setDescription(firstNonNull(newDescription, templateToUpdate.getDescription()));
-    templateToUpdate.setKeyPattern(firstNonNull(newProjectKeyPattern, templateToUpdate.getKeyPattern()));
+    templateToUpdate.setName(coalesce(newName, templateToUpdate.getName()));
+    templateToUpdate.setDescription(coalesce(newDescription, templateToUpdate.getDescription()));
+    templateToUpdate.setKeyPattern(coalesce(newProjectKeyPattern, templateToUpdate.getKeyPattern()));
     templateToUpdate.setUpdatedAt(new Date(system.now()));
 
     return templateToUpdate;
   }
 
+  @CheckForNull
+  private static String coalesce(@Nullable String s1, @Nullable String s2) {
+    return s1 != null ? s1 : s2;
+  }
+
   private PermissionTemplateDto updateTemplate(DbSession dbSession, PermissionTemplateDto templateToUpdate) {
     return dbClient.permissionTemplateDao().update(dbSession, templateToUpdate);
   }
index 4e18165ddd8df5c5518acd4efeaa004dde34bb82..d373115c36d712a7109adfd4504762db7ae7cbc4 100644 (file)
@@ -95,6 +95,26 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
     assertThat(reloaded.getKeyPattern()).isEqualTo(template.getKeyPattern());
   }
 
+  @Test
+  public void update_with_null_values() {
+    template = db.getDbClient().permissionTemplateDao().insert(db.getSession(), newPermissionTemplateDto()
+      .setName("Test")
+      .setDescription(null)
+      .setKeyPattern(null)
+      .setCreatedAt(new Date(1_000_000_000_000L))
+      .setUpdatedAt(new Date(1_000_000_000_000L)));
+    db.commit();
+
+    loginAsAdmin();
+
+    call(template.getUuid(), template.getName(), null, null);
+
+    PermissionTemplateDto reloaded = db.getDbClient().permissionTemplateDao().selectByUuid(db.getSession(), template.getUuid());
+    assertThat(reloaded.getName()).isEqualTo(template.getName());
+    assertThat(reloaded.getDescription()).isNull();
+    assertThat(reloaded.getKeyPattern()).isNull();
+  }
+
   @Test
   public void update_name_only() {
     loginAsAdmin();