From fd8df3f967b7ef8a52a2c37ed21ceb7af8bcdb7e Mon Sep 17 00:00:00 2001 From: Aurelien Poscia Date: Fri, 5 May 2023 11:32:42 +0200 Subject: [PATCH] SONAR-19086 Compare DB groups and GitHub teams, update DB membership accordingly --- .../java/org/sonar/auth/github/GithubTeamConverter.java | 6 +++++- .../org/sonar/auth/github/GithubTeamConverterTest.java | 7 ++++++- .../src/main/java/org/sonar/db/version/SqTables.java | 1 + .../src/main/java/org/sonar/db/user/ExternalGroupDto.java | 5 +++++ .../testFixtures/java/org/sonar/db/user/UserDbTester.java | 6 ++++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GithubTeamConverter.java b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GithubTeamConverter.java index be7bc9cd432..39bdff80d91 100644 --- a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GithubTeamConverter.java +++ b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GithubTeamConverter.java @@ -31,7 +31,11 @@ public class GithubTeamConverter { } public static String toGroupName(GsonTeam team) { - return team.getOrganizationId() + "/" + team.getId(); + return toGroupName(team.getOrganizationId(), team.getId()); + } + + public static String toGroupName(String organization, String groupName) { + return organization + "/" + groupName; } public static Optional extractOrganizationName(String groupName) { diff --git a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GithubTeamConverterTest.java b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GithubTeamConverterTest.java index 2f7ad3288be..5b96e885287 100644 --- a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GithubTeamConverterTest.java +++ b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/GithubTeamConverterTest.java @@ -27,11 +27,16 @@ import static org.assertj.core.api.Assertions.assertThat; public class GithubTeamConverterTest { @Test - public void toGroup_creates_correct_groupName() { + public void toGroupName_withGsonTeam_returnsCorrectGroupName() { GsonTeam team = new GsonTeam("team-1", new GsonTeam.GsonOrganization("Org1")); assertThat(GithubTeamConverter.toGroupName(team)).isEqualTo("Org1/team-1"); } + @Test + public void toGroupName_withGroupAndName_returnsCorrectGroupName() { + assertThat(GithubTeamConverter.toGroupName("Org1", "team-1")).isEqualTo("Org1/team-1"); + } + @Test public void extractOrganizationName_whenNameIsCorrect_extractsOrganizationName() { assertThat(GithubTeamConverter.extractOrganizationName("Org1/team1")).isEqualTo(Optional.of("Org1")); diff --git a/server/sonar-db-core/src/main/java/org/sonar/db/version/SqTables.java b/server/sonar-db-core/src/main/java/org/sonar/db/version/SqTables.java index c6a6b80dcc8..0a1c7e536d1 100644 --- a/server/sonar-db-core/src/main/java/org/sonar/db/version/SqTables.java +++ b/server/sonar-db-core/src/main/java/org/sonar/db/version/SqTables.java @@ -50,6 +50,7 @@ public final class SqTables { "es_queue", "events", "event_component_changes", + "external_groups", "file_sources", "groups", "groups_users", diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDto.java index 03d29082fbf..d66f42a2d52 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/ExternalGroupDto.java @@ -19,6 +19,7 @@ */ package org.sonar.db.user; +import java.util.Objects; import javax.annotation.Nullable; public record ExternalGroupDto(String groupUuid, String externalId, String externalIdentityProvider, @Nullable String name) { @@ -26,4 +27,8 @@ public record ExternalGroupDto(String groupUuid, String externalId, String exter public ExternalGroupDto(String groupUuid, String externalId, String externalIdentityProvider) { this(groupUuid, externalId, externalIdentityProvider, null); } + + public String getNameOrThrow() { + return Objects.requireNonNull(name); + } } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java index e3bba169d92..45a2815630b 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java @@ -44,6 +44,7 @@ import org.sonar.db.scim.ScimUserDto; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Arrays.stream; +import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; import static org.apache.commons.lang.math.RandomUtils.nextLong; import static org.sonar.db.permission.GlobalPermission.ADMINISTER; import static org.sonar.db.user.GroupTesting.newGroupDto; @@ -157,6 +158,11 @@ public class UserDbTester { return dto; } + public void markGroupAsGithubManaged(String groupUuid) { + db.getDbClient().externalGroupDao().insert(db.getSession(), new ExternalGroupDto(groupUuid, randomAlphanumeric(20), "github")); + db.commit(); + } + public ScimGroupDto insertScimGroup(GroupDto dto) { ScimGroupDto result = db.getDbClient().scimGroupDao().enableScimForGroup(db.getSession(), dto.getUuid()); db.commit(); -- 2.39.5