import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.WebService.Action;
import org.sonar.api.server.ws.WebService.Controller;
import org.sonar.db.DbClient;
import org.sonar.server.qualitygate.QgateProjectFinder.Association;
import org.sonar.server.qualitygate.QualityGates;
import org.sonar.server.tester.UserSessionRule;
+import org.sonar.server.ws.RemovedWebServiceHandler;
import org.sonar.server.ws.WsTester;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
new CreateAction(null, null, null, null),
new CopyAction(qGates),
new DestroyAction(qGates),
- new SetAsDefaultAction(qGates), new UnsetDefaultAction(qGates),
+ new SetAsDefaultAction(qGates),
new CreateConditionAction(null, null, null, null),
new UpdateConditionAction(null, null, null, null),
new DeleteConditionAction(null, null, null),
assertThat(unsetDefault).isNotNull();
assertThat(unsetDefault.handler()).isNotNull();
assertThat(unsetDefault.since()).isEqualTo("4.3");
+ assertThat(unsetDefault.deprecatedSince()).isEqualTo("7.0");
+ assertThat(unsetDefault.changelog())
+ .extracting(Change::getVersion, Change::getDescription)
+ .containsOnly(
+ tuple("7.0", "Unset a quality gate is no more authorized"));
assertThat(unsetDefault.isPost()).isTrue();
+ assertThat(unsetDefault.handler()).isEqualTo(RemovedWebServiceHandler.INSTANCE);
+ assertThat(unsetDefault.responseExample()).isEqualTo(RemovedWebServiceHandler.INSTANCE.getResponseExample());
assertThat(unsetDefault.isInternal()).isFalse();
Action createCondition = controller.action("create_condition");
.assertJson("{\"id\":42,\"name\":\"Copied QG\"}");
}
- @Test
- public void set_as_default_nominal() throws Exception {
- Long id = 42L;
- tester.newPostRequest("api/qualitygates", "set_as_default").setParam("id", id.toString()).execute()
- .assertNoContent();
- verify(qGates).setDefault(id);
- }
-
- @Test
- public void unset_default_nominal() throws Exception {
- tester.newPostRequest("api/qualitygates", "unset_default").execute()
- .assertNoContent();
- verify(qGates).setDefault(null);
- }
-
@Test
public void destroy_nominal() throws Exception {
Long id = 42L;
package org.sonarqube.tests.qualityGate;
import com.codeborne.selenide.Condition;
-import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.sonar.orchestrator.Orchestrator;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
-import org.openqa.selenium.Keys;
import org.sonar.wsclient.qualitygate.QualityGate;
import org.sonar.wsclient.qualitygate.QualityGateClient;
import org.sonarqube.qa.util.Tester;
selectedQualityGate.should(Condition.text("Default"));
selectedQualityGate.should(Condition.text(customQualityGate.name()));
} finally {
- qualityGateClient().unsetDefault();
qualityGateClient().destroy(customQualityGate.id());
}
}
selectedQualityGate.should(Condition.text(customQualityGate.name()));
}
- @Test
- public void should_display_none() {
- qualityGateClient().unsetDefault();
-
- ProjectQualityGatePage page = openPage();
- page.assertNotSelected();
- }
-
@Test
public void should_set_custom() {
QualityGate customQualityGate = createCustomQualityGate("should_set_custom");
selectedQualityGate.should(Condition.text("Default"));
selectedQualityGate.should(Condition.text(customQualityGate.name()));
} finally {
- qualityGateClient().unsetDefault();
qualityGateClient().destroy(customQualityGate.id());
}
}
- @Test
- @Ignore
- public void should_set_none() {
- qualityGateClient().unsetDefault();
- QualityGate customQualityGate = createCustomQualityGate("should_set_none");
- associateWithQualityGate(customQualityGate);
-
- ProjectQualityGatePage page = openPage();
- Selenide.$(".Select-input input").sendKeys(Keys.UP, Keys.UP, Keys.UP, Keys.ENTER);
-
- page.assertNotSelected();
- }
-
private ProjectQualityGatePage openPage() {
tester.wsClient().users().skipOnboardingTutorial();
Navigation navigation = tester.openBrowser().logIn().submitCredentials("admin");
}
}
- @Test
- public void do_not_compute_status_if_no_gate() throws Exception {
- qgClient().unsetDefault();
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
-
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_NO_QG);
-
- assertThat(getGateStatusMeasure(projectKey)).isNull();
- }
-
@Test
public void status_ok_if_empty_gate() throws Exception {
QualityGate empty = qgClient().create("Empty");
qgClient().setDefault(empty.id());
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_OK);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_OK);
- assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("OK");
- } finally {
- qgClient().unsetDefault();
- }
+ assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("OK");
}
@Test
qgClient().setDefault(simple.id());
qgClient().createCondition(NewCondition.create(simple.id()).metricKey("ncloc").operator("GT").warningThreshold("40"));
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_OK);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_OK);
- assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("OK");
- } finally {
- qgClient().unsetDefault();
- }
+ assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("OK");
}
@Test
qgClient().setDefault(simple.id());
qgClient().createCondition(NewCondition.create(simple.id()).metricKey("ncloc").operator("GT").warningThreshold("10"));
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
- assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("WARN");
- } finally {
- qgClient().unsetDefault();
- }
+ assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("WARN");
}
@Test
qgClient().setDefault(simple.id());
qgClient().createCondition(NewCondition.create(simple.id()).metricKey("ncloc").operator("GT").errorThreshold("10"));
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
- assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("ERROR");
- } finally {
- qgClient().unsetDefault();
- }
+ assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("ERROR");
}
@Test
orchestrator.getServer().provisionProject(projectKey, projectKey);
associateQualityGateToProject(error.id(), projectKey);
- try {
- BuildResult buildResult = executeAnalysis(projectKey);
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
- assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("ERROR");
- } finally {
- qgClient().unsetDefault();
- }
+ assertThat(getGateStatusMeasure(projectKey).getValue()).isEqualTo("ERROR");
}
@Test
qgClient().createCondition(NewCondition.create(allTypes.id()).metricKey("duplicated_lines_density").operator("GT").warningThreshold("20"));
qgClient().setDefault(allTypes.id());
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey, "sonar.cpd.xoo.minimumLines", "2", "sonar.cpd.xoo.minimumTokens", "5");
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey, "sonar.cpd.xoo.minimumLines", "2", "sonar.cpd.xoo.minimumTokens", "5");
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_WARN);
- Measure alertStatus = getGateStatusMeasure(projectKey);
- assertThat(alertStatus.getValue()).isEqualTo("WARN");
+ Measure alertStatus = getGateStatusMeasure(projectKey);
+ assertThat(alertStatus.getValue()).isEqualTo("WARN");
- String qualityGateDetailJson = getMeasure(orchestrator, projectKey, "quality_gate_details").getValue();
- assertThat(QualityGateDetails.parse(qualityGateDetailJson).getConditions())
- .extracting(QualityGateDetails.Conditions::getMetric, QualityGateDetails.Conditions::getOp, QualityGateDetails.Conditions::getWarning)
- .contains(tuple("ncloc", "GT", "10"), tuple("duplicated_lines_density", "GT", "20"));
- } finally {
- qgClient().unsetDefault();
- }
+ String qualityGateDetailJson = getMeasure(orchestrator, projectKey, "quality_gate_details").getValue();
+ assertThat(QualityGateDetails.parse(qualityGateDetailJson).getConditions())
+ .extracting(QualityGateDetails.Conditions::getMetric, QualityGateDetails.Conditions::getOp, QualityGateDetails.Conditions::getWarning)
+ .contains(tuple("ncloc", "GT", "10"), tuple("duplicated_lines_density", "GT", "20"));
}
@Test
qgClient().setDefault(simple.id());
qgClient().createCondition(NewCondition.create(simple.id()).metricKey("ncloc").operator("GT").errorThreshold("7"));
- try {
- String projectKey = newProjectKey();
- BuildResult buildResult = executeAnalysis(projectKey);
+ String projectKey = newProjectKey();
+ BuildResult buildResult = executeAnalysis(projectKey);
- verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
+ verifyQGStatusInPostTask(buildResult, projectKey, TASK_STATUS_SUCCESS, QG_STATUS_ERROR);
- String taskId = getTaskIdInLocalReport(projectDir("qualitygate/xoo-sample"));
- String analysisId = getAnalysisId(taskId);
+ String taskId = getTaskIdInLocalReport(projectDir("qualitygate/xoo-sample"));
+ String analysisId = getAnalysisId(taskId);
- Qualitygates.ProjectStatusResponse projectStatusWsResponse = tester.wsClient().qualityGates().projectStatus(new ProjectStatusRequest().setAnalysisId(analysisId));
- Qualitygates.ProjectStatusResponse.ProjectStatus projectStatus = projectStatusWsResponse.getProjectStatus();
- assertThat(projectStatus.getStatus()).isEqualTo(Qualitygates.ProjectStatusResponse.Status.ERROR);
- assertThat(projectStatus.getConditionsCount()).isEqualTo(1);
- Qualitygates.ProjectStatusResponse.Condition condition = projectStatus.getConditionsList().get(0);
- assertThat(condition.getMetricKey()).isEqualTo("ncloc");
- assertThat(condition.getErrorThreshold()).isEqualTo("7");
- } finally {
- qgClient().unsetDefault();
- }
+ ProjectStatusWsResponse projectStatusWsResponse = tester.wsClient().qualityGates().projectStatus(new ProjectStatusRequest().setAnalysisId(analysisId));
+ ProjectStatusWsResponse.ProjectStatus projectStatus = projectStatusWsResponse.getProjectStatus();
+ assertThat(projectStatus.getStatus()).isEqualTo(ProjectStatusWsResponse.Status.ERROR);
+ assertThat(projectStatus.getConditionsCount()).isEqualTo(1);
+ ProjectStatusWsResponse.Condition condition = projectStatus.getConditionsList().get(0);
+ assertThat(condition.getMetricKey()).isEqualTo("ncloc");
+ assertThat(condition.getErrorThreshold()).isEqualTo("7");
}
@Test