Browse Source

SONAR-13139 Add 'summaryCommentEnable' property to allow enable/disable of showing summary of analysis in discussion tab for GitHub

tags/8.3.0.34182
Jacek 4 years ago
parent
commit
a91ea17d6e
19 changed files with 541 additions and 16 deletions
  1. 15
    0
      server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDto.java
  2. 42
    0
      server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml
  3. 2
    1
      server/sonar-db-dao/src/schema/schema-sq.ddl
  4. 17
    13
      server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java
  5. 2
    1
      server/sonar-db-dao/src/testFixtures/java/org/sonar/db/almsettings/AlmSettingsTesting.java
  6. 2
    0
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/MigrationConfigurationModule.java
  7. 50
    0
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettings.java
  8. 32
    0
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java
  9. 52
    0
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHub.java
  10. 23
    0
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/package-info.java
  11. 1
    1
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/MigrationConfigurationModuleTest.java
  12. 68
    0
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest.java
  13. 42
    0
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83Test.java
  14. 140
    0
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest.java
  15. 13
    0
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest/schema.sql
  16. 28
    0
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest/schema.sql
  17. 1
    0
      sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/AlmSettingsService.java
  18. 10
    0
      sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/SetGithubBindingRequest.java
  19. 1
    0
      sonar-ws/src/main/protobuf/ws-alm_settings.proto

+ 15
- 0
server/sonar-db-dao/src/main/java/org/sonar/db/alm/setting/ProjectAlmSettingDto.java View File

*/ */
private String almSlug; 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 updatedAt;
private long createdAt; private long createdAt;


return this; return this;
} }


public Boolean getSummaryCommentEnabled() {
return summaryCommentEnabled;
}

public ProjectAlmSettingDto setSummaryCommentEnabled(@Nullable Boolean summaryCommentEnabled) {
this.summaryCommentEnabled = summaryCommentEnabled;
return this;
}

long getUpdatedAt() { long getUpdatedAt() {
return updatedAt; return updatedAt;
} }

+ 42
- 0
server/sonar-db-dao/src/main/resources/org/sonar/db/alm/setting/ProjectAlmSettingMapper.xml View File

p.alm_setting_uuid as almSettingUuid, p.alm_setting_uuid as almSettingUuid,
p.alm_repo as almRepo, p.alm_repo as almRepo,
p.alm_slug as almSlug, p.alm_slug as almSlug,
p.summary_comment_enabled as summaryCommentEnabled,
p.created_at as createdAt, p.created_at as createdAt,
p.updated_at as updatedAt p.updated_at as updatedAt
</sql> </sql>
alm_setting_uuid, alm_setting_uuid,
alm_repo, alm_repo,
alm_slug, alm_slug,
summary_comment_enabled,
created_at, created_at,
updated_at updated_at
) )
#{dto.almSettingUuid, jdbcType=VARCHAR}, #{dto.almSettingUuid, jdbcType=VARCHAR},
#{dto.almRepo, jdbcType=VARCHAR}, #{dto.almRepo, jdbcType=VARCHAR},
#{dto.almSlug, 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},
#{now, jdbcType=BIGINT} #{now, jdbcType=BIGINT}
) )
alm_setting_uuid = #{dto.almSettingUuid, jdbcType=VARCHAR}, alm_setting_uuid = #{dto.almSettingUuid, jdbcType=VARCHAR},
alm_repo = #{dto.almRepo, jdbcType=VARCHAR}, alm_repo = #{dto.almRepo, jdbcType=VARCHAR},
alm_slug = #{dto.almSlug, 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} updated_at = #{now, jdbcType=BIGINT}
WHERE WHERE
project_uuid = #{dto.projectUuid, jdbcType=VARCHAR} project_uuid = #{dto.projectUuid, jdbcType=VARCHAR}

+ 2
- 1
server/sonar-db-dao/src/schema/schema-sq.ddl View File

"ALM_REPO" VARCHAR(256), "ALM_REPO" VARCHAR(256),
"ALM_SLUG" VARCHAR(256), "ALM_SLUG" VARCHAR(256),
"UPDATED_AT" BIGINT NOT NULL, "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"); 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 UNIQUE INDEX "UNIQ_PROJECT_ALM_SETTINGS" ON "PROJECT_ALM_SETTINGS"("PROJECT_UUID");

+ 17
- 13
server/sonar-db-dao/src/test/java/org/sonar/db/alm/setting/ProjectAlmSettingDaoTest.java View File

import org.sonar.db.project.ProjectDto; import org.sonar.db.project.ProjectDto;


import static org.assertj.core.api.Assertions.assertThat; 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.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto; import static org.sonar.db.almsettings.AlmSettingsTesting.newBitbucketProjectAlmSettingDto;
assertThat(underTest.selectByProject(dbSession, project).get()) assertThat(underTest.selectByProject(dbSession, project).get())
.extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid, .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug, ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt)
ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
ProjectAlmSettingDto::getSummaryCommentEnabled)
.containsExactly(A_UUID, githubAlmSettingDto.getUuid(), project.getUuid(), .containsExactly(A_UUID, githubAlmSettingDto.getUuid(), project.getUuid(),
githubProjectAlmSettingDto.getAlmRepo(), githubProjectAlmSettingDto.getAlmSlug(), githubProjectAlmSettingDto.getAlmRepo(), githubProjectAlmSettingDto.getAlmSlug(),
A_DATE, A_DATE);
A_DATE, A_DATE, githubProjectAlmSettingDto.getSummaryCommentEnabled());


assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotPresent(); assertThat(underTest.selectByProject(dbSession, anotherProject)).isNotPresent();
} }
when(system2.now()).thenReturn(A_DATE); when(system2.now()).thenReturn(A_DATE);
AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting(); AlmSettingDto almSettingsDto = db.almSettings().insertBitbucketAlmSetting();
ProjectDto project = db.components().insertPrivateProjectDto(); 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); when(uuidFactory.create()).thenReturn(A_UUID + 1);
underTest.insertOrUpdate(dbSession, githubProjectAlmSettingDto2);
underTest.insertOrUpdate(dbSession, bitbucketProjectAlmSettingDto2);


Set<String> slugs = new HashSet<>(); Set<String> slugs = new HashSet<>();
slugs.add("slug1"); slugs.add("slug1");
assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs)) assertThat(underTest.selectByAlmSettingAndSlugs(dbSession, almSettingsDto, slugs))
.extracting(ProjectAlmSettingDto::getProjectUuid)
.containsExactly(project.getUuid());
.extracting(ProjectAlmSettingDto::getProjectUuid, ProjectAlmSettingDto::getSummaryCommentEnabled)
.containsExactly(tuple(project.getUuid(), bitbucketProjectAlmSettingDto2.getSummaryCommentEnabled()));
} }


@Test @Test
AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting(); AlmSettingDto anotherGithubAlmSetting = db.almSettings().insertGitHubAlmSetting();


when(system2.now()).thenReturn(A_DATE_LATER); when(system2.now()).thenReturn(A_DATE_LATER);
ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project);
ProjectAlmSettingDto newProjectAlmSettingDto = newGithubProjectAlmSettingDto(anotherGithubAlmSetting, project)
.setSummaryCommentEnabled(false);
underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto); underTest.insertOrUpdate(dbSession, newProjectAlmSettingDto);


assertThat(underTest.selectByProject(dbSession, project).get()) assertThat(underTest.selectByProject(dbSession, project).get())
.extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid, .extracting(ProjectAlmSettingDto::getUuid, ProjectAlmSettingDto::getAlmSettingUuid, ProjectAlmSettingDto::getProjectUuid,
ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug, ProjectAlmSettingDto::getAlmRepo, ProjectAlmSettingDto::getAlmSlug,
ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt)
ProjectAlmSettingDto::getCreatedAt, ProjectAlmSettingDto::getUpdatedAt,
ProjectAlmSettingDto::getSummaryCommentEnabled)
.containsExactly(projectAlmSettingDto.getUuid(), anotherGithubAlmSetting.getUuid(), project.getUuid(), .containsExactly(projectAlmSettingDto.getUuid(), anotherGithubAlmSetting.getUuid(), project.getUuid(),
newProjectAlmSettingDto.getAlmRepo(), newProjectAlmSettingDto.getAlmSlug(), newProjectAlmSettingDto.getAlmRepo(), newProjectAlmSettingDto.getAlmSlug(),
A_DATE, A_DATE_LATER);
A_DATE, A_DATE_LATER, newProjectAlmSettingDto.getSummaryCommentEnabled());
} }


@Test @Test

+ 2
- 1
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/almsettings/AlmSettingsTesting.java View File

return new ProjectAlmSettingDto() return new ProjectAlmSettingDto()
.setAlmSettingUuid(githubAlmSetting.getUuid()) .setAlmSettingUuid(githubAlmSetting.getUuid())
.setProjectUuid(project.getUuid()) .setProjectUuid(project.getUuid())
.setAlmRepo(randomAlphanumeric(256));
.setAlmRepo(randomAlphanumeric(256))
.setSummaryCommentEnabled(true);
} }


static ProjectAlmSettingDto newGitlabProjectAlmSettingDto(AlmSettingDto gitlabAlmSetting, ProjectDto project) { static ProjectAlmSettingDto newGitlabProjectAlmSettingDto(AlmSettingDto gitlabAlmSetting, ProjectDto project) {

+ 2
- 0
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/MigrationConfigurationModule.java View File

import org.sonar.server.platform.db.migration.version.v80.DbVersion80; 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.v81.DbVersion81;
import org.sonar.server.platform.db.migration.version.v82.DbVersion82; 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 { public class MigrationConfigurationModule extends Module {
@Override @Override
DbVersion80.class, DbVersion80.class,
DbVersion81.class, DbVersion81.class,
DbVersion82.class, DbVersion82.class,
DbVersion83.class,


// migration steps // migration steps
MigrationStepRegistryImpl.class, MigrationStepRegistryImpl.class,

+ 50
- 0
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettings.java View File

/*
* 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());
}
}

+ 32
- 0
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83.java View File

/*
* 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);
}
}

+ 52
- 0
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHub.java View File

/*
* 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;
});
}
}

+ 23
- 0
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v83/package-info.java View File

/*
* 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;

+ 1
- 1
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/MigrationConfigurationModuleTest.java View File

assertThat(container.getPicoContainer().getComponentAdapters()) assertThat(container.getPicoContainer().getComponentAdapters())
.hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER .hasSize(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER
// DbVersion classes // DbVersion classes
+ 4
+ 5
// Others // Others
+ 4); + 4);
} }

+ 68
- 0
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest.java View File

/*
* 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());
}

}

+ 42
- 0
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/DbVersion83Test.java View File

/*
* 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);
}

}

+ 140
- 0
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest.java View File

/*
* 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());
}

}

+ 13
- 0
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/AddSummaryEnabledColumnToAlmSettingsTest/schema.sql View File

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");

+ 28
- 0
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v83/PopulateSummaryCommentEnabledColumnForGitHubTest/schema.sql View File

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");

+ 1
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/AlmSettingsService.java View File

.setParam("almSetting", request.getAlmSetting()) .setParam("almSetting", request.getAlmSetting())
.setParam("project", request.getProject()) .setParam("project", request.getProject())
.setParam("repository", request.getRepository()) .setParam("repository", request.getRepository())
.setParam("summaryCommentEnabled", request.getSummaryCommentEnabled())
.setMediaType(MediaTypes.JSON)).content(); .setMediaType(MediaTypes.JSON)).content();
} }



+ 10
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/almsettings/SetGithubBindingRequest.java View File

private String almSetting; private String almSetting;
private String project; private String project;
private String repository; private String repository;
private String summaryCommentEnabled;


/** /**
* This is a mandatory parameter. * This is a mandatory parameter.
public String getRepository() { public String getRepository() {
return repository; return repository;
} }

public String getSummaryCommentEnabled() {
return summaryCommentEnabled;
}

public SetGithubBindingRequest setSummaryCommentEnabled(String summaryCommentEnabled) {
this.summaryCommentEnabled = summaryCommentEnabled;
return this;
}
} }

+ 1
- 0
sonar-ws/src/main/protobuf/ws-alm_settings.proto View File

optional string repository = 3; optional string repository = 3;
optional string url = 4; optional string url = 4;
optional string slug = 5; optional string slug = 5;
optional bool summaryCommentEnabled = 6;
} }


enum Alm { enum Alm {

Loading…
Cancel
Save