*/
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;
return this;
}
+ public Boolean getSummaryCommentEnabled() {
+ return summaryCommentEnabled;
+ }
+
+ public ProjectAlmSettingDto setSummaryCommentEnabled(@Nullable Boolean summaryCommentEnabled) {
+ this.summaryCommentEnabled = summaryCommentEnabled;
+ return this;
+ }
+
long getUpdatedAt() {
return updatedAt;
}
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>
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}
"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");
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;
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();
}
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
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
return new ProjectAlmSettingDto()
.setAlmSettingUuid(githubAlmSetting.getUuid())
.setProjectUuid(project.getUuid())
- .setAlmRepo(randomAlphanumeric(256));
+ .setAlmRepo(randomAlphanumeric(256))
+ .setSummaryCommentEnabled(true);
}
static ProjectAlmSettingDto newGitlabProjectAlmSettingDto(AlmSettingDto gitlabAlmSetting, ProjectDto project) {
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
DbVersion80.class,
DbVersion81.class,
DbVersion82.class,
+ DbVersion83.class,
// migration steps
MigrationStepRegistryImpl.class,
--- /dev/null
+/*
+ * 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());
+ }
+}
--- /dev/null
+/*
+ * 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);
+ }
+}
--- /dev/null
+/*
+ * 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;
+ });
+ }
+}
--- /dev/null
+/*
+ * 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;
assertThat(container.getPicoContainer().getComponentAdapters())
.hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER
// DbVersion classes
- + 4
+ + 5
// Others
+ 4);
}
--- /dev/null
+/*
+ * 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());
+ }
+
+}
--- /dev/null
+/*
+ * 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);
+ }
+
+}
--- /dev/null
+/*
+ * 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());
+ }
+
+}
--- /dev/null
+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");
--- /dev/null
+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");
.setParam("almSetting", request.getAlmSetting())
.setParam("project", request.getProject())
.setParam("repository", request.getRepository())
+ .setParam("summaryCommentEnabled", request.getSummaryCommentEnabled())
.setMediaType(MediaTypes.JSON)).content();
}
private String almSetting;
private String project;
private String repository;
+ private String summaryCommentEnabled;
/**
* This is a mandatory parameter.
public String getRepository() {
return repository;
}
+
+ public String getSummaryCommentEnabled() {
+ return summaryCommentEnabled;
+ }
+
+ public SetGithubBindingRequest setSummaryCommentEnabled(String summaryCommentEnabled) {
+ this.summaryCommentEnabled = summaryCommentEnabled;
+ return this;
+ }
}
optional string repository = 3;
optional string url = 4;
optional string slug = 5;
+ optional bool summaryCommentEnabled = 6;
}
enum Alm {