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 {
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();
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;
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();