diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2018-10-30 08:34:54 +0100 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2018-11-16 20:21:05 +0100 |
commit | 2507163633382d56601e825ba2aadafc3edbbe9f (patch) | |
tree | 02c8d3f113653a59611637f797b11151b8701638 /server/sonar-db-dao | |
parent | 02f78a025d5a3569c9b1c9e6e1cc5e170b27f91c (diff) | |
download | sonarqube-2507163633382d56601e825ba2aadafc3edbbe9f.tar.gz sonarqube-2507163633382d56601e825ba2aadafc3edbbe9f.zip |
SONAR-11321 Prevent binding already bound application
Diffstat (limited to 'server/sonar-db-dao')
5 files changed, 57 insertions, 9 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingDao.java index 3612870461b..5a21a4be784 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingDao.java @@ -29,6 +29,7 @@ import org.sonar.db.Dao; import org.sonar.db.DbSession; import org.sonar.db.organization.OrganizationDto; +import static java.util.Optional.ofNullable; import static org.sonar.db.DatabaseUtils.executeLargeInputs; public class OrganizationAlmBindingDao implements Dao { @@ -42,7 +43,7 @@ public class OrganizationAlmBindingDao implements Dao { } public Optional<OrganizationAlmBindingDto> selectByOrganization(DbSession dbSession, OrganizationDto organization) { - return Optional.ofNullable(getMapper(dbSession).selectByOrganizationUuid(organization.getUuid())); + return ofNullable(getMapper(dbSession).selectByOrganizationUuid(organization.getUuid())); } public List<OrganizationAlmBindingDto> selectByOrganizations(DbSession dbSession, Collection<OrganizationDto> organizations) { @@ -50,6 +51,10 @@ public class OrganizationAlmBindingDao implements Dao { organizationUuids -> getMapper(dbSession).selectByOrganizationUuids(organizationUuids)); } + public Optional<OrganizationAlmBindingDto> selectByAlmAppInstall(DbSession dbSession, AlmAppInstallDto almAppInstall) { + return ofNullable(getMapper(dbSession).selectByInstallationUuid(almAppInstall.getUuid())); + } + public void insert(DbSession dbSession, OrganizationDto organization, AlmAppInstallDto almAppInstall, String url, String userUuid) { long now = system2.now(); getMapper(dbSession).insert(new OrganizationAlmBindingDto() diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingMapper.java index f664a50f51b..ec29ed9f93d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/alm/OrganizationAlmBindingMapper.java @@ -31,6 +31,9 @@ public interface OrganizationAlmBindingMapper { List<OrganizationAlmBindingDto> selectByOrganizationUuids(@Param("organizationUuids") Collection<String> organizationUuids); + @CheckForNull + OrganizationAlmBindingDto selectByInstallationUuid(@Param("installationUuid") String installationUuid); + void insert(@Param("dto") OrganizationAlmBindingDto dto); void deleteByOrganizationUuid(@Param("organizationUuid") String organizationUuid); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDto.java index d8a40ea81fc..14e607a85fb 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDto.java @@ -109,6 +109,7 @@ public class OrganizationDto { return this; } + @CheckForNull public String getDescription() { return description; } @@ -118,6 +119,7 @@ public class OrganizationDto { return this; } + @CheckForNull public String getUrl() { return url; } @@ -127,6 +129,7 @@ public class OrganizationDto { return this; } + @CheckForNull public String getAvatarUrl() { return avatarUrl; } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/OrganizationAlmBindingMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/OrganizationAlmBindingMapper.xml index 395eb9100e5..1f636ee415b 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/OrganizationAlmBindingMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/alm/OrganizationAlmBindingMapper.xml @@ -26,12 +26,21 @@ select <include refid="columns"/> from - organization_alm_bindings + organization_alm_bindings + where + organization_uuid in + <foreach collection="organizationUuids" open="(" close=")" item="organizationUuid" separator=","> + #{organizationUuid , jdbcType=VARCHAR} + </foreach> + </select> + + <select id="selectByInstallationUuid" parameterType="String" resultType="org.sonar.db.alm.OrganizationAlmBindingDto"> + select + <include refid="columns"/> + from + organization_alm_bindings where - organization_uuid in - <foreach collection="organizationUuids" open="(" close=")" item="organizationUuid" separator=","> - #{organizationUuid , jdbcType=VARCHAR} - </foreach> + alm_app_install_uuid = #{installationUuid, jdbcType=VARCHAR} </select> <insert id="insert" parameterType="Map" useGeneratedKeys="false"> diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/OrganizationAlmBindingDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/OrganizationAlmBindingDaoTest.java index 8972e200a09..857a403ab40 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/alm/OrganizationAlmBindingDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/alm/OrganizationAlmBindingDaoTest.java @@ -25,14 +25,12 @@ import org.junit.Test; import org.sonar.api.utils.System2; import org.sonar.api.utils.internal.TestSystem2; import org.sonar.core.util.UuidFactory; -import org.sonar.core.util.Uuids; import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.UserDto; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; -import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.groups.Tuple.tuple; @@ -75,7 +73,7 @@ public class OrganizationAlmBindingDaoTest { OrganizationDto organization = db.organizations().insert(); AlmAppInstallDto almAppInstall = db.alm().insertAlmAppInstall(); db.alm().insertOrganizationAlmBinding(organization, almAppInstall); - // No binding on other organization + // No binding on other installation OrganizationDto otherOrganization = db.organizations().insert(); Optional<OrganizationAlmBindingDto> result = underTest.selectByOrganization(db.getSession(), otherOrganization); @@ -101,6 +99,36 @@ public class OrganizationAlmBindingDaoTest { } @Test + public void selectByAlmAppInstall() { + OrganizationDto organization = db.organizations().insert(); + AlmAppInstallDto almAppInstall = db.alm().insertAlmAppInstall(); + OrganizationAlmBindingDto dto = db.alm().insertOrganizationAlmBinding(organization, almAppInstall); + + Optional<OrganizationAlmBindingDto> result = underTest.selectByAlmAppInstall(db.getSession(), almAppInstall); + + assertThat(result.get()) + .extracting(OrganizationAlmBindingDto::getUuid, OrganizationAlmBindingDto::getOrganizationUuid, OrganizationAlmBindingDto::getAlmAppInstallUuid, + OrganizationAlmBindingDto::getUrl, OrganizationAlmBindingDto::getAlm, + OrganizationAlmBindingDto::getUserUuid, OrganizationAlmBindingDto::getCreatedAt) + .containsExactlyInAnyOrder(dto.getUuid(), organization.getUuid(), dto.getAlmAppInstallUuid(), + dto.getUrl(), ALM.GITHUB, + dto.getUserUuid(), NOW); + } + + @Test + public void selectByAlmAppInstall_returns_empty_when_installation_is_not_bound_to_organization() { + OrganizationDto organization = db.organizations().insert(); + AlmAppInstallDto almAppInstall = db.alm().insertAlmAppInstall(); + db.alm().insertOrganizationAlmBinding(organization, almAppInstall); + // No binding on other organization + AlmAppInstallDto otherAlmAppInstall = db.alm().insertAlmAppInstall(); + + Optional<OrganizationAlmBindingDto> result = underTest.selectByAlmAppInstall(db.getSession(), otherAlmAppInstall); + + assertThat(result).isEmpty(); + } + + @Test public void insert() { when(uuidFactory.create()).thenReturn("ABCD"); OrganizationDto organization = db.organizations().insert(); |