From: Sébastien Lesaint Date: Tue, 6 Mar 2018 11:03:45 +0000 (+0100) Subject: SONAR-10175 delete project assiociations when deleting Quality Gate X-Git-Tag: 7.5~1528 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9bf67e8305ea42c822a5fe190d7da9331adb8118;p=sonarqube.git SONAR-10175 delete project assiociations when deleting Quality Gate --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java index 4c26cf364f4..5b71c51c0d4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java @@ -30,6 +30,7 @@ import org.sonar.db.qualitygate.QualityGateDto; import org.sonar.server.qualitygate.QualityGateFinder; import static com.google.common.base.Preconditions.checkArgument; +import static org.sonar.server.qualitygate.QualityGateFinder.SONAR_QUALITYGATE_PROPERTY; public class DestroyAction implements QualityGatesWsAction { @@ -70,6 +71,7 @@ public class DestroyAction implements QualityGatesWsAction { checkArgument(!defaultQualityGate.getId().equals(qualityGate.getId()), "The default quality gate cannot be removed"); wsSupport.checkCanEdit(qualityGate); + dbClient.propertiesDao().deleteByKeyAndValue(dbSession, SONAR_QUALITYGATE_PROPERTY, String.valueOf(qualityGate.getId())); dbClient.qualityGateDao().delete(qualityGate, dbSession); dbSession.commit(); response.noContent(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java index be7eeaf4e32..cc4194ecec9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java @@ -28,9 +28,9 @@ import org.sonar.core.util.Uuids; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; +import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualitygate.QGateWithOrgDto; -import org.sonar.db.qualitygate.QualityGateDbTester; import org.sonar.db.qualitygate.QualityGateDto; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; @@ -97,6 +97,30 @@ public class DestroyActionTest { assertThat(db.getDbClient().qualityGateDao().selectByOrganizationAndId(dbSession, organization, qualityGate.getId())).isNull(); } + @Test + public void delete_quality_gate_and_any_association_to_any_project() { + OrganizationDto organization = db.organizations().insert(); + db.qualityGates().createDefaultQualityGate(organization); + QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); + ComponentDto prj1 = db.components().insertPublicProject(organization); + ComponentDto prj2 = db.components().insertPublicProject(organization); + db.qualityGates().associateProjectToQualityGate(prj1, qualityGate); + db.qualityGates().associateProjectToQualityGate(prj2, qualityGate); + userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); + + ws.newRequest() + .setParam(PARAM_ID, valueOf(qualityGate.getId())) + .setParam(PARAM_ORGANIZATION, organization.getKey()) + .execute(); + + assertThat(db.getDbClient().qualityGateDao().selectByOrganizationAndId(dbSession, organization, qualityGate.getId())) + .isNull(); + assertThat(db.getDbClient().propertiesDao().selectProjectProperties(prj1.getDbKey())) + .isEmpty(); + assertThat(db.getDbClient().propertiesDao().selectProjectProperties(prj2.getDbKey())) + .isEmpty(); + } + @Test public void does_not_delete_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert();