import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.server.ws.WebService;
-import org.sonar.api.server.ws.WebService.Param;
import org.sonar.db.DbTester;
import org.sonar.db.metric.MetricDto;
+import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.qualitygate.QGateWithOrgDto;
import org.sonar.db.qualitygate.QualityGateConditionDto;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.exceptions.ForbiddenException;
import static java.lang.String.valueOf;
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
+import static org.assertj.core.api.Assertions.tuple;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
+import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
+import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ORGANIZATION;
public class DeleteConditionActionTest {
@Test
public void definition() {
- WebService.Action definition = ws.getDef();
+ WebService.Action action = ws.getDef();
+ assertThat(action.since()).isEqualTo("4.3");
+ assertThat(action.isPost()).isTrue();
+ assertThat(action.isInternal()).isFalse();
+ assertThat(action.params())
+ .extracting(WebService.Param::key, WebService.Param::isRequired)
+ .containsExactlyInAnyOrder(
+ tuple("id", true),
+ tuple("organization", false));
+ }
- assertThat(definition.since()).isEqualTo("4.3");
- assertThat(definition.isPost()).isTrue();
- assertThat(definition.isInternal()).isFalse();
- assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("id");
+ @Test
+ public void delete_condition() {
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);
+ MetricDto metric = db.measures().insertMetric();
+ QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
+
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
+ .execute();
- Param id = definition.param("id");
- assertThat(id.isRequired()).isTrue();
+ assertThat(searchConditionsOf(qualityGate)).isEmpty();
}
@Test
- public void delete_condition() {
+ public void default_organization_is_used_when_no_organization_parameter() {
userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization());
- QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization());
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
- call(qualityGateCondition.getId());
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .execute();
assertThat(searchConditionsOf(qualityGate)).isEmpty();
}
@Test
public void no_content() {
- userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization());
- QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
- TestResponse result = call(qualityGateCondition.getId());
+ TestResponse result = ws.newRequest()
+ .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
+ .execute();
assertThat(result.getStatus()).isEqualTo(HTTP_NO_CONTENT);
}
@Test
public void fail_if_built_in_quality_gate() {
- userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization());
- QualityGateDto qualityGate = db.qualityGates().insertQualityGate(qg -> qg.setBuiltIn(true));
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true));
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
ws.newRequest()
.setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}
@Test
public void fail_if_not_quality_gate_administrator() {
- userSession.addPermission(ADMINISTER, db.getDefaultOrganization());
- QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
expectedException.expect(ForbiddenException.class);
- call(qualityGateCondition.getId());
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(qualityGateCondition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
+ .execute();
}
@Test
public void fail_if_condition_id_is_not_found() {
- userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization());
- QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);
MetricDto metric = db.measures().insertMetric();
QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
long unknownConditionId = qualityGateCondition.getId() + 42L;
expectedException.expect(NotFoundException.class);
expectedException.expectMessage("No quality gate condition with id '" + unknownConditionId + "'");
- call(unknownConditionId);
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(unknownConditionId))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
+ .execute();
}
@Test
public void fail_when_condition_match_unknown_quality_gate() {
- userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization());
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
QualityGateConditionDto condition = new QualityGateConditionDto().setQualityGateId(123L);
db.getDbClient().gateConditionDao().insert(condition, db.getSession());
db.commit();
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getId(), 123L));
- call(condition.getId());
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(condition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
+ .execute();
}
- private TestResponse call(long qualityGateConditionId) {
- return ws.newRequest()
- .setParam(PARAM_ID, valueOf(qualityGateConditionId))
+ @Test
+ public void fail_when_condition_match_quality_gate_on_other_organization() {
+ OrganizationDto organization = db.organizations().insert();
+ userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization);
+ OrganizationDto otherOrganization = db.organizations().insert();
+ QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(otherOrganization);
+ MetricDto metric = db.measures().insertMetric();
+ QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric);
+
+ expectedException.expect(IllegalStateException.class);
+ expectedException.expectMessage(format("Condition '%s' is linked to an unknown quality gate '%s'", condition.getId(), qualityGate.getId()));
+
+ ws.newRequest()
+ .setParam(PARAM_ID, valueOf(condition.getId()))
+ .setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}