]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10175 delete project assiociations when deleting Quality Gate
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 6 Mar 2018 11:03:45 +0000 (12:03 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 15 Mar 2018 11:08:14 +0000 (12:08 +0100)
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java
server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java

index 4c26cf364f4f7d9b5008e9d0b295d12c22d67e09..5b71c51c0d43bee6790e75a689b7733a946ebb12 100644 (file)
@@ -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();
index be7eeaf4e32a603db63267d5c3401f3b41660b06..cc4194ecec9ea73a080d81148ae5c935839d1f00 100644 (file)
@@ -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();