import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.Projects.CreateWsResponse.Project;
import org.sonarqube.ws.client.qualitygates.CreateRequest;
import org.sonarqube.ws.client.qualitygates.DestroyRequest;
import org.sonarqube.ws.client.qualitygates.SelectRequest;
import org.sonarqube.ws.client.qualitygates.SetAsDefaultRequest;
+import static java.util.Arrays.stream;
import static org.sonarqube.ws.Qualitygates.CreateResponse;
import static org.sonarqube.ws.Qualitygates.ListWsResponse;
}
public CreateResponse generate() {
+ return generate(null);
+ }
+
+ @SafeVarargs
+ public final CreateResponse generate(@Nullable Organizations.Organization organization, Consumer<CreateRequest>... populators) {
int id = ID_GENERATOR.getAndIncrement();
- return session.wsClient().qualitygates().create(new CreateRequest().setName("QualityGate" + id));
+ CreateRequest request = new CreateRequest()
+ .setName("QualityGate " + id)
+ .setOrganization(organization != null ? organization.getKey() : null);
+ stream(populators).forEach(p -> p.accept(request));
+ return session.wsClient().qualitygates().create(request);
}
public void associateProject(CreateResponse qualityGate, Project project) {
- service().select(new SelectRequest().setGateId(String.valueOf(qualityGate.getId())).setProjectKey(project.getKey()));
+ associateProject(null, qualityGate, project);
+ }
+
+ public void associateProject(@Nullable Organizations.Organization organization, CreateResponse qualityGate, Project project) {
+ service().select(new SelectRequest()
+ .setOrganization(organization != null ? organization.getKey() : null)
+ .setGateId(String.valueOf(qualityGate.getId()))
+ .setProjectKey(project.getKey()));
}
public static class ListResponse {
public void do_not_fail_quality_gate_with_poor_LEAK_coverage_and_a_max_of_19_lines_of_NEW_code() throws Exception {
Organizations.Organization organization = tester.organizations().generate();
Project project = tester.projects().provision(organization);
- Qualitygates.CreateResponse qualityGate = tester.qGates().generate();
- tester.qGates().associateProject(qualityGate, project);
+ Qualitygates.CreateResponse qualityGate = tester.qGates().generate(organization);
+ tester.qGates().associateProject(organization, qualityGate, project);
Qualitygates.CreateConditionResponse condition = tester.wsClient().qualitygates().createCondition(new CreateConditionRequest()
+ .setOrganization(organization.getKey())
.setGateId(String.valueOf(qualityGate.getId()))
.setMetric("new_coverage")
.setOp("LT")
.setDebugLogs(true);
orchestrator.executeBuild(analysis);
assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v1-1000-lines", false);
+ assertIgnoredConditions(organization,"qualitygate/small-changesets/v1-1000-lines", false);
// small leak => ignore coverage warning or error
SonarScanner analysis2 = SonarScanner
.setDebugLogs(true);
orchestrator.executeBuild(analysis2);
assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1019-lines", true);
+ assertIgnoredConditions(organization, "qualitygate/small-changesets/v2-1019-lines", true);
// small leak => if coverage is OK anyways, we do not have to ignore anything
tester.wsClient().qualitygates().updateCondition(new UpdateConditionRequest()
+ .setOrganization(organization.getKey())
.setId(String.valueOf(condition.getId()))
.setMetric("new_coverage")
.setOp("LT")
.setDebugLogs(true);
orchestrator.executeBuild(analysis3);
assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1019-lines", false);
+ assertIgnoredConditions(organization, "qualitygate/small-changesets/v2-1019-lines", false);
// big leak => use usual behaviour
tester.wsClient().qualitygates().updateCondition(new UpdateConditionRequest()
+ .setOrganization(organization.getKey())
.setId(String.valueOf(condition.getId()))
.setMetric("new_coverage")
.setOp("LT")
.setDebugLogs(true);
orchestrator.executeBuild(analysis4);
assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("ERROR");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1020-lines", false);
+ assertIgnoredConditions(organization, "qualitygate/small-changesets/v2-1020-lines", false);
}
- private void assertIgnoredConditions(String projectDir, boolean expected) throws IOException {
+ private void assertIgnoredConditions(Organizations.Organization organization, String projectDir, boolean expected) throws IOException {
String analysisId = getAnalysisId(getTaskIdInLocalReport(projectDir(projectDir)));
boolean ignoredConditions = tester.wsClient().qualitygates()
- .projectStatus(new ProjectStatusRequest().setAnalysisId(analysisId))
+ .projectStatus(new ProjectStatusRequest().setOrganization(organization.getKey()).setAnalysisId(analysisId))
.getProjectStatus()
.getIgnoredConditions();
assertThat(ignoredConditions).isEqualTo(expected);
public Tester tester = new Tester(orchestrator);
@Test
- public void always_display_current_quality_gate_in_effect() throws Exception {
+ public void always_display_current_quality_gate_in_effect() {
Organization organization = tester.organizations().generate();
Project project = tester.projects().provision(organization);
- Qualitygates.CreateResponse qualityGate = tester.qGates().generate();
- tester.qGates().associateProject(qualityGate, project);
+ Qualitygates.CreateResponse qualityGate = tester.qGates().generate(organization);
+ tester.qGates().associateProject(organization, qualityGate, project);
tester.wsClient().qualitygates().createCondition(new CreateConditionRequest()
+ .setOrganization(organization.getKey())
.setGateId(String.valueOf(qualityGate.getId()))
.setMetric("new_coverage")
.setOp("LT")
Map currentQualityGate2 = (Map) ItUtils.jsonToMap(response2.content()).get("qualityGate");
assertThat((long) (double) (Double) currentQualityGate2.get("key")).isEqualTo(qualityGate.getId());
- Qualitygates.CreateResponse qualityGate2 = tester.qGates().generate();
- tester.qGates().associateProject(qualityGate2, project);
+ Qualitygates.CreateResponse qualityGate2 = tester.qGates().generate(organization);
+ tester.qGates().associateProject(organization, qualityGate2, project);
tester.wsClient().qualitygates().createCondition(new CreateConditionRequest()
+ .setOrganization(organization.getKey())
.setGateId(String.valueOf(qualityGate2.getId()))
.setMetric("new_coverage")
.setOp("LT")