} else {
qualityGate = wsSupport.getByName(dbSession, gateName);
}
- wsSupport.checkCanEdit(qualityGate);
+ wsSupport.checkCanLimitedEdit(dbSession, qualityGate);
QualityGateConditionDto condition = qualityGateConditionsUpdater.createCondition(dbSession, qualityGate, metric, operator, error);
CreateConditionResponse.Builder createConditionResponse = CreateConditionResponse.newBuilder()
.setId(condition.getUuid())
QualityGateConditionDto condition = wsSupport.getCondition(dbSession, conditionUuid);
QualityGateDto qualityGateDto = dbClient.qualityGateDao().selectByUuid(dbSession, condition.getQualityGateUuid());
checkState(qualityGateDto != null, "Condition '%s' is linked to an unknown quality gate '%s'", conditionUuid, condition.getQualityGateUuid());
- wsSupport.checkCanEdit(qualityGateDto);
+ wsSupport.checkCanLimitedEdit(dbSession, qualityGateDto);
dbClient.gateConditionDao().delete(condition, dbSession);
dbSession.commit();
QualityGateConditionDto condition = wsSupport.getCondition(dbSession, id);
QualityGateDto qualityGateDto = dbClient.qualityGateDao().selectByUuid(dbSession, condition.getQualityGateUuid());
checkState(qualityGateDto != null, "Condition '%s' is linked to an unknown quality gate '%s'", id, condition.getQualityGateUuid());
- wsSupport.checkCanEdit(qualityGateDto);
+ wsSupport.checkCanLimitedEdit(dbSession, qualityGateDto);
QualityGateConditionDto updatedCondition = qualityGateConditionsUpdater.updateCondition(dbSession, condition, metric, operator, error);
UpdateConditionResponse.Builder updateConditionResponse = UpdateConditionResponse.newBuilder()
.setId(updatedCondition.getUuid())
import org.sonar.db.metric.MetricDto;
import org.sonar.db.qualitygate.QualityGateConditionDto;
import org.sonar.db.qualitygate.QualityGateDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.component.TestComponentFinder;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.qualitygate.QualityGateConditionsUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Qualitygates.CreateConditionResponse;
assertThat(response.getError()).isEqualTo("45");
}
+ @Test
+ public void user_with_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = insertMetric();
+ UserDto user = db.users().insertUser();
+ db.qualityGates().addUserPermission(qualityGate, user);
+ userSession.logIn(user);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_GATE_ID, qualityGate.getUuid())
+ .setParam(PARAM_METRIC, metric.getKey())
+ .setParam(PARAM_OPERATOR, "LT")
+ .setParam(PARAM_ERROR, "90")
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(200);
+ }
+
+ @Test
+ public void user_with_group_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = insertMetric();
+ UserDto user = db.users().insertUser();
+ GroupDto group = db.users().insertGroup();
+ db.qualityGates().addGroupPermission(qualityGate, group);
+ userSession.logIn(user).setGroups(group);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_GATE_ID, qualityGate.getUuid())
+ .setParam(PARAM_METRIC, metric.getKey())
+ .setParam(PARAM_OPERATOR, "LT")
+ .setParam(PARAM_ERROR, "90")
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(200);
+ }
+
@Test
public void throw_ForbiddenException_if_not_gate_administrator() {
QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
import org.sonar.db.metric.MetricDto;
import org.sonar.db.qualitygate.QualityGateConditionDto;
import org.sonar.db.qualitygate.QualityGateDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.component.TestComponentFinder;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
assertThat(result.getStatus()).isEqualTo(HTTP_NO_CONTENT);
}
+ @Test
+ public void user_with_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = db.measures().insertMetric();
+ QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
+ UserDto user = db.users().insertUser();
+ db.qualityGates().addUserPermission(qualityGate, user);
+ userSession.logIn(user);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(HTTP_NO_CONTENT);
+ }
+
+ @Test
+ public void user_with_group_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = db.measures().insertMetric();
+ QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric);
+ UserDto user = db.users().insertUser();
+ GroupDto group = db.users().insertGroup();
+ db.qualityGates().addGroupPermission(qualityGate, group);
+ userSession.logIn(user).setGroups(group);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_ID, qualityGateCondition.getUuid())
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(HTTP_NO_CONTENT);
+ }
+
@Test
public void fail_if_built_in_quality_gate() {
userSession.addPermission(ADMINISTER_QUALITY_GATES);
import org.sonar.db.metric.MetricDto;
import org.sonar.db.qualitygate.QualityGateConditionDto;
import org.sonar.db.qualitygate.QualityGateDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.component.TestComponentFinder;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.qualitygate.QualityGateConditionsUpdater;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Qualitygates.CreateConditionResponse;
assertThat(response.getError()).isEqualTo("45");
}
+ @Test
+ public void user_with_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = insertMetric();
+ QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric);
+ UserDto user = db.users().insertUser();
+ db.qualityGates().addUserPermission(qualityGate, user);
+ userSession.logIn(user);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_ID, condition.getUuid())
+ .setParam(PARAM_METRIC, metric.getKey())
+ .setParam(PARAM_OPERATOR, "LT")
+ .setParam(PARAM_ERROR, "45")
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(200);
+ }
+
+ @Test
+ public void user_with_group_permission_can_call_endpoint() {
+ QualityGateDto qualityGate = db.qualityGates().insertQualityGate();
+ MetricDto metric = insertMetric();
+ QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric);
+ UserDto user = db.users().insertUser();
+ GroupDto group = db.users().insertGroup();
+ db.qualityGates().addGroupPermission(qualityGate, group);
+ userSession.logIn(user).setGroups(group);
+
+ TestResponse response = ws.newRequest()
+ .setParam(PARAM_ID, condition.getUuid())
+ .setParam(PARAM_METRIC, metric.getKey())
+ .setParam(PARAM_OPERATOR, "LT")
+ .setParam(PARAM_ERROR, "45")
+ .execute();
+
+ assertThat(response.getStatus()).isEqualTo(200);
+ }
+
@Test
public void fail_to_update_built_in_quality_gate() {
userSession.addPermission(ADMINISTER_QUALITY_GATES);
@DataProvider
public static Object[][] update_invalid_operators_and_direction() {
- return new Object[][] {
+ return new Object[][]{
{"GT", "LT", -1},
{"LT", "GT", 1},
};