]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-13139 Add 'summaryCommentEnable' property to allow enable/disable of showing...
authorJacek <jacek.poreda@sonarsource.com>
Fri, 28 Feb 2020 12:12:24 +0000 (13:12 +0100)
committersonartech <sonartech@sonarsource.com>
Fri, 6 Mar 2020 20:04:32 +0000 (20:04 +0000)
19 files changed:
server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDto.java
server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml
server/sonar-db-dao/src/schema/schema-sq.ddl
server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/almsettings/AlmSettingsTesting.java
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/MigrationConfigurationModule.java
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettings.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHub.java [new file with mode: 0644]
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/package-info.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/MigrationConfigurationModuleTest.java
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83Test.java [new file with mode: 0644]
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest.java [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest/schema.sql [new file with mode: 0644]
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest/schema.sql [new file with mode: 0644]
sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/AlmSettingsService.java
sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/SetGithubBindingRequest.java
sonar-ws/src/main/protobuf/ws-alm_settings.proto

index 622416fdaf457ed1ff013d71d2b616a0434e385d..519c2ea6d4df6f7f831fd303e7a33ab8f231876f 100644 (file)
@@ -56,6 +56,12 @@ public class ProjectAlmSettingDto {
    */
   private String almSlug;
 
+  /**
+   * Boolean flag which enable/disable inserting summary of analysis as a comment
+   * It will be null when the ALM is other than GitHub
+   */
+  private Boolean summaryCommentEnabled;
+
   private long updatedAt;
   private long createdAt;
 
@@ -105,6 +111,15 @@ public class ProjectAlmSettingDto {
     return this;
   }
 
+  public Boolean getSummaryCommentEnabled() {
+    return summaryCommentEnabled;
+  }
+
+  public ProjectAlmSettingDto setSummaryCommentEnabled(@Nullable Boolean summaryCommentEnabled) {
+    this.summaryCommentEnabled = summaryCommentEnabled;
+    return this;
+  }
+
   long getUpdatedAt() {
     return updatedAt;
   }
index 7b6a7f862624bf5fb751c045ac59a2fe47d8260b..283d8f15757fae716da8e5b9226d1f8a4649b47a 100644 (file)
@@ -9,6 +9,7 @@
     p.alm_setting_uuid as almSettingUuid,
     p.alm_repo as almRepo,
     p.alm_slug as almSlug,
+    p.summary_comment_enabled as summaryCommentEnabled,
     p.created_at as createdAt,
     p.updated_at as updatedAt
   </sql>
@@ -41,6 +42,7 @@
       alm_setting_uuid,
       alm_repo,
       alm_slug,
+      summary_comment_enabled,
       created_at,
       updated_at
     )
       #{dto.almSettingUuid, jdbcType=VARCHAR},
       #{dto.almRepo, jdbcType=VARCHAR},
       #{dto.almSlug, jdbcType=VARCHAR},
+      #{dto.summaryCommentEnabled, jdbcType=BOOLEAN},
+      #{now, jdbcType=BIGINT},
+      #{now, jdbcType=BIGINT}
+    )
+  </insert>
+
+  <!-- Oracle -->
+  <insert id="insert" parameterType="Map" useGeneratedKeys="false" databaseId="oracle">
+    INSERT INTO project_alm_settings
+    (
+      uuid,
+      project_uuid,
+      alm_setting_uuid,
+      alm_repo,
+      alm_slug,
+      summary_comment_enabled,
+      created_at,
+      updated_at
+    )
+    VALUES (
+      #{uuid, jdbcType=VARCHAR},
+      #{dto.projectUuid, jdbcType=VARCHAR},
+      #{dto.almSettingUuid, jdbcType=VARCHAR},
+      #{dto.almRepo, jdbcType=VARCHAR},
+      #{dto.almSlug, jdbcType=VARCHAR},
+      #{dto.summaryCommentEnabled, jdbcType=NUMERIC},
       #{now, jdbcType=BIGINT},
       #{now, jdbcType=BIGINT}
     )
       alm_setting_uuid = #{dto.almSettingUuid, jdbcType=VARCHAR},
       alm_repo = #{dto.almRepo, jdbcType=VARCHAR},
       alm_slug = #{dto.almSlug, jdbcType=VARCHAR},
+      summary_comment_enabled = #{dto.summaryCommentEnabled, jdbcType=BOOLEAN},
+      updated_at = #{now, jdbcType=BIGINT}
+    WHERE
+      project_uuid = #{dto.projectUuid, jdbcType=VARCHAR}
+  </update>
+
+  <!-- Oracle -->
+  <update id="update" parameterType="map" databaseId="oracle">
+    UPDATE project_alm_settings
+    SET
+      alm_setting_uuid = #{dto.almSettingUuid, jdbcType=VARCHAR},
+      alm_repo = #{dto.almRepo, jdbcType=VARCHAR},
+      alm_slug = #{dto.almSlug, jdbcType=VARCHAR},
+      summary_comment_enabled = #{dto.summaryCommentEnabled, jdbcType=NUMERIC},
       updated_at = #{now, jdbcType=BIGINT}
     WHERE
       project_uuid = #{dto.projectUuid, jdbcType=VARCHAR}
index 17a3cd04dc34b9077684dadd8c59a3bf1380c948..2589b2325b3759996bffaf9f4d8bac37e6c3aaab 100644 (file)
@@ -631,7 +631,8 @@ CREATE TABLE "PROJECT_ALM_SETTINGS"(
     "ALM_REPO" VARCHAR(256),
     "ALM_SLUG" VARCHAR(256),
     "UPDATED_AT" BIGINT NOT NULL,
-    "CREATED_AT" BIGINT NOT NULL
+    "CREATED_AT" BIGINT NOT NULL,
+    "SUMMARY_COMMENT_ENABLED" BOOLEAN
 );
 ALTER TABLE "PROJECT_ALM_SETTINGS" ADD CONSTRAINT "PK_PROJECT_ALM_SETTINGS" PRIMARY KEY("UUID");
 CREATE UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");
index cdbfa161c5d7390aa907728a79de0dd96d9b0859..9a81c0d9b56bedfa253848432852aaa3eff01ad5 100644 (file)
@@ -31,6 +31,7 @@ import org.sonar.db.DbTester;
 import org.sonar.db.project.ProjectDto;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto;
@@ -65,10 +66,11 @@ public class ProjectAlmSettingDaoTest {
     assertThat(underTest.selectByProject(dbSession, project).get())
       .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
         ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
-        ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt)
+        ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
+        ProjectAlmSettingDto::getSummaryCommentEnabled)
       .containsExactly(A_UUID, githubAlmSettingDto.getUuid(), project.getUuid(),
         githubProjectAlmSettingDto.getAlmRepo(), githubProjectAlmSettingDto.getAlmSlug(),
-        A_DATE, A_DATE);
+        A_DATE, A_DATE, githubProjectAlmSettingDto.getSummaryCommentEnabled());
 
     assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotPresent();
   }
@@ -79,19 +81,19 @@ public class ProjectAlmSettingDaoTest {
     when(system2.now()).thenReturn(A_DATE);
     AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
     ProjectDto project = db.components().insertPrivateProjectDto();
-    ProjectAlmSettingDto githubProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project);
-    githubProjectAlmSettingDto.setAlmSlug("slug1");
-    underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto);
-    ProjectAlmSettingDto githubProjectAlmSettingDto2 = newBitbucketProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProjectDto());
-    githubProjectAlmSettingDto2.setAlmSlug("slug2");
+    ProjectAlmSettingDto bitbucketProjectAlmSettingDto = newBitbucketProjectAlmSettingDto(almSettingsDto, project);
+    bitbucketProjectAlmSettingDto.setAlmSlug("slug1");
+    underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto);
+    ProjectAlmSettingDto bitbucketProjectAlmSettingDto2 = newBitbucketProjectAlmSettingDto(almSettingsDto, db.components().insertPrivateProjectDto());
+    bitbucketProjectAlmSettingDto2.setAlmSlug("slug2");
     when(uuidFactory.create()).thenReturn(A_UUID + 1);
-    underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto2);
+    underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto2);
 
     Set<String> slugs = new HashSet<>();
     slugs.add("slug1");
     assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs))
-      .extracting(ProjectAlmSettingDto::getProjectUuid)
-      .containsExactly(project.getUuid());
+      .extracting(ProjectAlmSettingDto::getProjectUuid, ProjectAlmSettingDto::getSummaryCommentEnabled)
+      .containsExactly(tuple(project.getUuid(), bitbucketProjectAlmSettingDto2.getSummaryCommentEnabled()));
   }
 
   @Test
@@ -113,16 +115,18 @@ public class ProjectAlmSettingDaoTest {
     AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting();
 
     when(system2.now()).thenReturn(A_DATE_LATER);
-    ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project);
+    ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project)
+      .setSummaryCommentEnabled(false);
     underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto);
 
     assertThat(underTest.selectByProject(dbSession, project).get())
       .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
         ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
-        ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt)
+        ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
+        ProjectAlmSettingDto::getSummaryCommentEnabled)
       .containsExactly(projectAlmSettingDto.getUuid(), anotherGithubAlmSetting.getUuid(), project.getUuid(),
         newProjectAlmSettingDto.getAlmRepo(), newProjectAlmSettingDto.getAlmSlug(),
-        A_DATE, A_DATE_LATER);
+        A_DATE, A_DATE_LATER, newProjectAlmSettingDto.getSummaryCommentEnabled());
   }
 
   @Test
index 54a56f82afe74e6884936661a6fd8609b9d6d118..76b3c3cb0c1e76736d31c59321a5c7575df68ccf 100644 (file)
@@ -64,7 +64,8 @@ public class AlmSettingsTesting {
     return new ProjectAlmSettingDto()
       .setAlmSettingUuid(githubAlmSetting.getUuid())
       .setProjectUuid(project.getUuid())
-      .setAlmRepo(randomAlphanumeric(256));
+      .setAlmRepo(randomAlphanumeric(256))
+      .setSummaryCommentEnabled(true);
   }
 
   static ProjectAlmSettingDto newGitlabProjectAlmSettingDto(AlmSettingDto gitlabAlmSetting, ProjectDto project) {
index 1d3754e6f39b766d2543ae61fab7c4721719218a..a7d9d6ed89a34f09a9887794795b94ecbe785d05 100644 (file)
@@ -28,6 +28,7 @@ import org.sonar.server.platform.db.migration.version.v00.DbVersion00;
 import org.sonar.server.platform.db.migration.version.v80.DbVersion80;
 import org.sonar.server.platform.db.migration.version.v81.DbVersion81;
 import org.sonar.server.platform.db.migration.version.v82.DbVersion82;
+import org.sonar.server.platform.db.migration.version.v83.DbVersion83;
 
 public class MigrationConfigurationModule extends Module {
   @Override
@@ -38,6 +39,7 @@ public class MigrationConfigurationModule extends Module {
       DbVersion80.class,
       DbVersion81.class,
       DbVersion82.class,
+      DbVersion83.class,
 
       // migration steps
       MigrationStepRegistryImpl.class,
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettings.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettings.java
new file mode 100644 (file)
index 0000000..1d51c95
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import java.sql.SQLException;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.def.BooleanColumnDef;
+import org.sonar.server.platform.db.migration.sql.AddColumnsBuilder;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static org.sonar.server.platform.db.migration.def.BooleanColumnDef.newBooleanColumnDefBuilder;
+
+public class AddSummaryEnabledColumnToAlmSettings extends DdlChange {
+  private static final String TABLE = "project_alm_settings";
+  private static final String NEW_COLUMN = "summary_comment_enabled";
+
+  private static final BooleanColumnDef SUMMARY_COMMENT_ENABLED = newBooleanColumnDefBuilder()
+    .setColumnName(NEW_COLUMN)
+    .setIsNullable(true)
+    .setDefaultValue(null)
+    .build();
+
+  public AddSummaryEnabledColumnToAlmSettings(Database db) {
+    super(db);
+  }
+
+  @Override
+  public void execute(Context context) throws SQLException {
+    context.execute(new AddColumnsBuilder(getDialect(), TABLE)
+      .addColumn(SUMMARY_COMMENT_ENABLED)
+      .build());
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java
new file mode 100644 (file)
index 0000000..63845bb
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import org.sonar.server.platform.db.migration.step.MigrationStepRegistry;
+import org.sonar.server.platform.db.migration.version.DbVersion;
+
+public class DbVersion83 implements DbVersion {
+  @Override
+  public void addSteps(MigrationStepRegistry registry) {
+    registry
+      .add(3300, "Add 'summary_comment_enabled' boolean column to 'project_alm_settings'", AddSummaryEnabledColumnToAlmSettings.class)
+      .add(3301, "Enable 'summary_comment_enabled' for GitHub based projects", PopulateSummaryCommentEnabledColumnForGitHub.class);
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHub.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHub.java
new file mode 100644 (file)
index 0000000..4d077e0
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import java.sql.SQLException;
+import org.sonar.api.utils.System2;
+import org.sonar.db.Database;
+import org.sonar.server.platform.db.migration.step.DataChange;
+import org.sonar.server.platform.db.migration.step.MassUpdate;
+
+public class PopulateSummaryCommentEnabledColumnForGitHub extends DataChange {
+
+  private final System2 system;
+
+  public PopulateSummaryCommentEnabledColumnForGitHub(Database db, System2 system) {
+    super(db);
+    this.system = system;
+  }
+
+  @Override
+  protected void execute(Context context) throws SQLException {
+    MassUpdate massUpdate = context.prepareMassUpdate();
+
+    massUpdate.select("select uuid from alm_settings where alm_id = ? ")
+      .setString(1, "github");
+    massUpdate.update("update project_alm_settings set summary_comment_enabled = ?, updated_at = ? where alm_setting_uuid = ?");
+
+    massUpdate.execute((row, update) -> {
+      update.setBoolean(1, true)
+        .setLong(2, system.now())
+        .setString(3, row.getString(1));
+      return true;
+    });
+  }
+}
diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/package-info.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/package-info.java
new file mode 100644 (file)
index 0000000..a671d6a
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.server.platform.db.migration.version.v83;
+
+import javax.annotation.ParametersAreNonnullByDefault;
index 17f0012f50f8763b22a0baf8184b5986ce556a45..102d9c808bc6f907566e3067a0f125410c9207ac 100644 (file)
@@ -37,7 +37,7 @@ public class MigrationConfigurationModuleTest {
     assertThat(container.getPicoContainer().getComponentAdapters())
       .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER
         // DbVersion classes
-        + 4
+        + 5
         // Others
         + 4);
   }
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest.java
new file mode 100644 (file)
index 0000000..a6e7bf2
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import java.sql.SQLException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.api.utils.System2;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DdlChange;
+
+import static java.sql.Types.BOOLEAN;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class AddSummaryEnabledColumnToAlmSettingsTest {
+
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(AddSummaryEnabledColumnToAlmSettingsTest.class, "schema.sql");
+
+  private DdlChange underTest = new AddSummaryEnabledColumnToAlmSettings(db.database());
+
+  @Before
+  public void setup() {
+    insertProjectAlmSetting("1");
+    insertProjectAlmSetting("2");
+    insertProjectAlmSetting("3");
+    insertProjectAlmSetting("4");
+    insertProjectAlmSetting("5");
+  }
+
+  @Test
+  public void should_add_summary_comment_enabled_column() throws SQLException {
+    underTest.execute();
+
+    db.assertColumnDefinition("project_alm_settings", "summary_comment_enabled", BOOLEAN, null, true);
+
+    assertThat(db.countSql("select count(uuid) from project_alm_settings where summary_comment_enabled is null"))
+      .isEqualTo(5);
+  }
+
+  private void insertProjectAlmSetting(String uuid) {
+    db.executeInsert("PROJECT_ALM_SETTINGS",
+      "UUID", uuid,
+      "ALM_SETTING_UUID", uuid + "-name",
+      "PROJECT_UUID", uuid + "-description",
+      "UPDATED_AT", System2.INSTANCE.now(),
+      "CREATED_AT", System2.INSTANCE.now());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83Test.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83Test.java
new file mode 100644 (file)
index 0000000..54f2350
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import org.junit.Test;
+import org.sonar.server.platform.db.migration.version.DbVersion;
+
+import static org.sonar.server.platform.db.migration.version.DbVersionTestUtils.verifyMigrationCount;
+import static org.sonar.server.platform.db.migration.version.DbVersionTestUtils.verifyMinimumMigrationNumber;
+
+public class DbVersion83Test {
+
+  private DbVersion underTest = new DbVersion83();
+
+  @Test
+  public void migrationNumber_starts_at_3300() {
+    verifyMinimumMigrationNumber(underTest, 3300);
+  }
+
+  @Test
+  public void verify_migration_count() {
+    verifyMigrationCount(underTest, 2);
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest.java
new file mode 100644 (file)
index 0000000..ddda359
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2020 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.db.migration.version.v83;
+
+import java.sql.SQLException;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+import org.junit.Rule;
+import org.junit.Test;
+import org.sonar.api.utils.System2;
+import org.sonar.db.CoreDbTester;
+import org.sonar.server.platform.db.migration.step.DataChange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PopulateSummaryCommentEnabledColumnForGitHubTest {
+  @Rule
+  public CoreDbTester db = CoreDbTester.createForSchema(PopulateSummaryCommentEnabledColumnForGitHubTest.class, "schema.sql");
+
+  private System2 system = System2.INSTANCE;
+
+  private DataChange underTest = new PopulateSummaryCommentEnabledColumnForGitHub(db.database(), system);
+
+  @Test
+  public void does_not_fail_if_alm_settings_are_empty() throws SQLException {
+    underTest.execute();
+
+    assertThat(db.countSql("select count(uuid) from project_alm_settings where summary_comment_enabled is null"))
+      .isEqualTo(0);
+
+    // re-entrant migration
+    underTest.execute();
+  }
+
+  @Test
+  public void does_not_set_comment_summary_enabled_flag_for_alms_other_than_github() throws SQLException {
+    insertAlmSetting("alm-bitbucket", "bitbucket");
+    insertAlmSetting("alm-azure", "azure");
+    insertAlmSetting("alm-gitlab", "gitlab");
+
+    insertProjectAlmSetting("project-alm-1", "alm-bitbucket");
+    insertProjectAlmSetting("project-alm-2", "alm-bitbucket");
+    insertProjectAlmSetting("project-alm-3", "alm-azure");
+    insertProjectAlmSetting("project-alm-4", "alm-azure");
+    insertProjectAlmSetting("project-alm-5", "alm-azure");
+    insertProjectAlmSetting("project-alm-6", "alm-gitlab");
+
+    underTest.execute();
+
+    verifySummaryColumnForProjectAlmSettings(null, "project-alm-1", "project-alm-2", "project-alm-3",
+      "project-alm-4", "project-alm-5", "project-alm-6");
+  }
+
+  @Test
+  public void set_comment_summary_enabled_flag_to_true_for_github_alm_only() throws SQLException {
+    insertAlmSetting("alm-github", "github");
+    insertAlmSetting("alm-azure", "azure");
+    insertAlmSetting("alm-gitlab", "gitlab");
+
+    insertProjectAlmSetting("project-alm-1", "alm-bitbucket");
+    insertProjectAlmSetting("project-alm-2", "alm-bitbucket");
+    insertProjectAlmSetting("project-alm-3", "alm-github");
+    insertProjectAlmSetting("project-alm-4", "alm-github");
+    insertProjectAlmSetting("project-alm-5", "alm-github");
+    insertProjectAlmSetting("project-alm-6", "alm-github");
+    insertProjectAlmSetting("project-alm-7", "alm-gitlab");
+
+    underTest.execute();
+
+    verifySummaryColumnForProjectAlmSettings(null, "project-alm-1", "project-alm-2", "project-alm-7");
+    verifySummaryColumnForProjectAlmSettings(true, "project-alm-3", "project-alm-4", "project-alm-5", "project-alm-6");
+  }
+
+  @Test
+  public void migration_is_reentrant() throws SQLException {
+    insertAlmSetting("alm-github", "github");
+    insertAlmSetting("alm-azure", "azure");
+    insertAlmSetting("alm-gitlab", "gitlab");
+
+    insertProjectAlmSetting("project-alm-1", "alm-bitbucket");
+    insertProjectAlmSetting("project-alm-2", "alm-github");
+
+    underTest.execute();
+    // re-entrant
+    underTest.execute();
+
+    verifySummaryColumnForProjectAlmSettings(null, "project-alm-1");
+    verifySummaryColumnForProjectAlmSettings(true, "project-alm-2");
+  }
+
+  private void verifySummaryColumnForProjectAlmSettings(@Nullable Boolean expectedSummarColumnValue, String... projectUuids) {
+    assertThat(db.select("select uuid, summary_comment_enabled from project_alm_settings")
+      .stream()
+      .filter(rowColumns -> Objects.equals(expectedSummarColumnValue, getBooleanValue(rowColumns.get("SUMMARY_COMMENT_ENABLED"))))
+      .map(row -> row.get("UUID"))
+      .collect(Collectors.toList()))
+        .containsExactly(projectUuids);
+  }
+
+  private Boolean getBooleanValue(@Nullable Object value) {
+    return value == null ? null : Boolean.parseBoolean(value.toString());
+  }
+
+  private void insertProjectAlmSetting(String uuid, String almSettingsUuid) {
+    db.executeInsert("PROJECT_ALM_SETTINGS",
+      "UUID", uuid,
+      "ALM_SETTING_UUID", almSettingsUuid,
+      "PROJECT_UUID", uuid + "-description",
+      "UPDATED_AT", system.now(),
+      "CREATED_AT", system.now());
+  }
+
+  private void insertAlmSetting(String uuid, String almId) {
+    db.executeInsert("ALM_SETTINGS",
+      "UUID", uuid,
+      "ALM_ID", almId,
+      "KEE", uuid + "-key",
+      "UPDATED_AT", system.now(),
+      "CREATED_AT", system.now());
+  }
+
+}
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest/schema.sql
new file mode 100644 (file)
index 0000000..ead60d1
--- /dev/null
@@ -0,0 +1,13 @@
+CREATE TABLE "PROJECT_ALM_SETTINGS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "ALM_SETTING_UUID" VARCHAR(40) NOT NULL,
+    "PROJECT_UUID" VARCHAR(50) NOT NULL,
+    "ALM_REPO" VARCHAR(256),
+    "ALM_SLUG" VARCHAR(256),
+    "UPDATED_AT" BIGINT NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "PROJECT_ALM_SETTINGS" ADD CONSTRAINT "PK_PROJECT_ALM_SETTINGS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_ALM" ON "PROJECT_ALM_SETTINGS"("ALM_SETTING_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_SLUG" ON "PROJECT_ALM_SETTINGS"("ALM_SLUG");
diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest/schema.sql
new file mode 100644 (file)
index 0000000..320a964
--- /dev/null
@@ -0,0 +1,28 @@
+CREATE TABLE "ALM_SETTINGS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "ALM_ID" VARCHAR(40) NOT NULL,
+    "KEE" VARCHAR(200) NOT NULL,
+    "URL" VARCHAR(2000),
+    "APP_ID" VARCHAR(80),
+    "PRIVATE_KEY" VARCHAR(2000),
+    "PAT" VARCHAR(2000),
+    "UPDATED_AT" BIGINT NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL
+);
+ALTER TABLE "ALM_SETTINGS" ADD CONSTRAINT "PK_ALM_SETTINGS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_ALM_SETTINGS" ON "ALM_SETTINGS"("KEE");
+
+CREATE TABLE "PROJECT_ALM_SETTINGS"(
+    "UUID" VARCHAR(40) NOT NULL,
+    "ALM_SETTING_UUID" VARCHAR(40) NOT NULL,
+    "PROJECT_UUID" VARCHAR(50) NOT NULL,
+    "ALM_REPO" VARCHAR(256),
+    "ALM_SLUG" VARCHAR(256),
+    "UPDATED_AT" BIGINT NOT NULL,
+    "CREATED_AT" BIGINT NOT NULL,
+    "SUMMARY_COMMENT_ENABLED" BOOLEAN
+);
+ALTER TABLE "PROJECT_ALM_SETTINGS" ADD CONSTRAINT "PK_PROJECT_ALM_SETTINGS" PRIMARY KEY("UUID");
+CREATE UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_ALM" ON "PROJECT_ALM_SETTINGS"("ALM_SETTING_UUID");
+CREATE INDEX "PROJECT_ALM_SETTINGS_SLUG" ON "PROJECT_ALM_SETTINGS"("ALM_SLUG");
index 0807efd423e043d9cad60500d5ffff9c2d64b9ae..a443796e0edef20557bac9e08c7c77b52cbf14cd 100644 (file)
@@ -225,6 +225,7 @@ public class AlmSettingsService extends BaseService {
         .setParam("almSetting", request.getAlmSetting())
         .setParam("project", request.getProject())
         .setParam("repository", request.getRepository())
+        .setParam("summaryCommentEnabled", request.getSummaryCommentEnabled())
         .setMediaType(MediaTypes.JSON)).content();
   }
 
index 9d38a6ac708c67cdeba36df84fb4d57dfa5c1c15..2eb1d264bab30422a6fe1caf1ee9e874cb50a2d9 100644 (file)
@@ -33,6 +33,7 @@ public class SetGithubBindingRequest {
   private String almSetting;
   private String project;
   private String repository;
+  private String summaryCommentEnabled;
 
   /**
    * This is a mandatory parameter.
@@ -69,4 +70,13 @@ public class SetGithubBindingRequest {
   public String getRepository() {
     return repository;
   }
+
+  public String getSummaryCommentEnabled() {
+    return summaryCommentEnabled;
+  }
+
+  public SetGithubBindingRequest setSummaryCommentEnabled(String summaryCommentEnabled) {
+    this.summaryCommentEnabled = summaryCommentEnabled;
+    return this;
+  }
 }
index b2e97e2fb4169ac29d1a85df41b8a973adab18fd..81b6b2ab2bf446b7886fa385c921e4a1b5a91ced 100644 (file)
@@ -63,6 +63,7 @@ message GetBindingWsResponse {
   optional string repository = 3;
   optional string url = 4;
   optional string slug = 5;
+  optional bool summaryCommentEnabled = 6;
 }
 
 enum Alm {