From 67ed6ff49b43f30db67c87345b0cf91e2cfa0127 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 7 Dec 2017 16:58:47 +0100 Subject: [PATCH] SONAR-10136 Add method to get/set default quality gate on organization --- .../sonar/db/organization/OrganizationDao.java | 5 +++++ .../db/organization/OrganizationMapper.java | 3 +++ .../sonar/db/qualitygate/QualityGateDao.java | 4 ++++ .../sonar/db/qualitygate/QualityGateMapper.java | 2 ++ .../db/organization/OrganizationMapper.xml | 9 +++++++++ .../sonar/db/qualitygate/QualityGateMapper.xml | 8 ++++++++ .../db/organization/OrganizationDaoTest.java | 17 ++++++++++++++++- .../db/qualitygate/QualityGateDaoTest.java | 13 +++++++++++++ 8 files changed, 60 insertions(+), 1 deletion(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDao.java index f606589a624..6735a3e746d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationDao.java @@ -26,6 +26,7 @@ import org.sonar.api.utils.System2; import org.sonar.db.Dao; import org.sonar.db.DbSession; import org.sonar.db.Pagination; +import org.sonar.db.qualitygate.QGateWithOrgDto; import org.sonar.db.user.GroupDto; import static java.util.Objects.requireNonNull; @@ -109,6 +110,10 @@ public class OrganizationDao implements Dao { getMapper(dbSession).updateDefaultGroupId(uuid, requireNonNull(defaultGroupId, "Default group id cannot be null"), system2.now()); } + public void setDefaultQualityGate(DbSession dbSession, OrganizationDto organization, QGateWithOrgDto qualityGate) { + getMapper(dbSession).updateDefaultQualityGate(organization.getUuid(), qualityGate.getUuid(), system2.now()); + } + public boolean getNewProjectPrivate(DbSession dbSession, OrganizationDto organization) { return getMapper(dbSession).selectNewProjectPrivateByUuid(organization.getUuid()); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMapper.java index bcaa10f513f..c28d96fdda7 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMapper.java @@ -65,6 +65,9 @@ public interface OrganizationMapper { void updateDefaultGroupId(@Param("organizationUuid") String organizationUuid, @Param("defaultGroupId") int defaultGroupId, @Param("now") long now); + void updateDefaultQualityGate(@Param("organizationUuid") String organizationUuid, + @Param("defaultQualityGateUuid") String defaultQualityGateUuid, @Param("now") long now); + void updateNewProjectPrivate(@Param("organizationUuid") String organizationUuid, @Param("newProjectPrivate") boolean newProjectPrivate, @Param("now") long now); int deleteByUuid(@Param("uuid") String uuid); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateDao.java index 3d90f2a5f29..614320715ef 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateDao.java @@ -67,6 +67,10 @@ public class QualityGateDao implements Dao { return mapper(session).selectByIdAndOrganization(id, organization.getUuid()); } + public QGateWithOrgDto selectDefault(DbSession dbSession, OrganizationDto organization) { + return mapper(dbSession).selectDefault(organization.getUuid()); + } + public void delete(QualityGateDto qGate, DbSession session) { mapper(session).delete(qGate.getId()); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateMapper.java index a6fa14c48ee..533be402260 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateMapper.java @@ -40,6 +40,8 @@ public interface QualityGateMapper { QGateWithOrgDto selectByIdAndOrganization(@Param("id") long id, @Param("organizationUuid") String organizationUuid); + QGateWithOrgDto selectDefault(@Param("organizationUuid") String organizationUuid); + QualityGateDto selectBuiltIn(); void delete(long id); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml index fcdacde0253..41d758d9536 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml @@ -215,6 +215,15 @@ uuid = #{organizationUuid, jdbcType=VARCHAR} + + update organizations + set + default_quality_gate_uuid = #{defaultQualityGateUuid, jdbcType=INTEGER}, + updated_at = #{now, jdbcType=BIGINT} + where + uuid = #{organizationUuid, jdbcType=VARCHAR} + + update organizations set diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateMapper.xml index 468ecab43e1..aeddd3947e4 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/QualityGateMapper.xml @@ -91,6 +91,14 @@ is_built_in = ${_true} + + delete from quality_gates where id=#{id} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDaoTest.java index e57971cf294..c6bfeb8e232 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/organization/OrganizationDaoTest.java @@ -41,6 +41,7 @@ import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.dialect.Dialect; import org.sonar.db.dialect.Oracle; +import org.sonar.db.qualitygate.QGateWithOrgDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.GroupTesting; import org.sonar.db.user.UserDto; @@ -664,6 +665,19 @@ public class OrganizationDaoTest { underTest.setDefaultGroupId(dbSession, "uuid", GroupTesting.newGroupDto().setId(null)); } + @Test + public void setDefaultQualityGate() { + when(system2.now()).thenReturn(DATE_3); + OrganizationDto organization = dbTester.organizations().insert(); + QGateWithOrgDto qualityGate = dbTester.qualityGates().insertQualityGate(organization); + + underTest.setDefaultQualityGate(dbSession, organization, qualityGate); + dbTester.commit(); + + assertThat(dbClient.qualityGateDao().selectDefault(dbSession, organization).getUuid()).isEqualTo(qualityGate.getUuid()); + verifyOrganizationUpdatedAt(organization.getUuid(), DATE_3); + } + @Test public void update_fails_with_NPE_if_OrganizationDto_is_null() { expectDtoCanNotBeNull(); @@ -1007,7 +1021,8 @@ public class OrganizationDaoTest { " guarded as \"guarded\", user_id as \"userId\"," + " created_at as \"createdAt\", updated_at as \"updatedAt\"," + " default_perm_template_project as \"projectDefaultPermTemplate\"," + - " default_perm_template_view as \"viewDefaultPermTemplate\"" + + " default_perm_template_view as \"viewDefaultPermTemplate\"," + + " default_quality_gate_uuid as \"defaultQualityGateUuid\" " + " from organizations"); assertThat(rows).hasSize(1); return rows.get(0); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateDaoTest.java index e3d73d3e8ac..99e93b43054 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateDaoTest.java @@ -145,6 +145,19 @@ public class QualityGateDaoTest { assertThat(underTest.selectByOrganizationAndId(dbSession, organization, 123L)).isNull(); } + @Test + public void select_default() { + OrganizationDto organization = db.organizations().insert(); + QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); + db.getDbClient().organizationDao().setDefaultQualityGate(dbSession, organization, qualityGate); + OrganizationDto otherOrganization = db.organizations().insert(); + QGateWithOrgDto otherQualityGate = db.qualityGates().insertQualityGate(otherOrganization); + db.getDbClient().organizationDao().setDefaultQualityGate(dbSession, otherOrganization, otherQualityGate); + + assertThat(underTest.selectDefault(dbSession, organization).getUuid()).isEqualTo(qualityGate.getUuid()); + assertThat(underTest.selectDefault(dbSession, otherOrganization).getUuid()).isEqualTo(otherQualityGate.getUuid()); + } + @Test public void delete() { OrganizationDto organization = db.organizations().insert(); -- 2.39.5