Pārlūkot izejas kodu

SONAR-13300 Deprecate use of id in quality gate web services

tags/8.4.0.35506
Duarte Meneses pirms 4 gadiem
vecāks
revīzija
f8a00f1a80
21 mainītis faili ar 315 papildinājumiem un 66 dzēšanām
  1. 29
    6
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CopyAction.java
  2. 3
    0
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateAction.java
  3. 24
    6
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java
  4. 30
    5
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java
  5. 2
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/GetByProjectAction.java
  6. 2
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ListAction.java
  7. 3
    0
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsParameters.java
  8. 6
    0
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java
  9. 33
    10
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java
  10. 29
    5
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SearchAction.java
  11. 28
    5
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SelectAction.java
  12. 29
    6
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java
  13. 2
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java
  14. 3
    2
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CopyActionTest.java
  15. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java
  16. 3
    2
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java
  17. 1
    5
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/GetByProjectActionTest.java
  18. 1
    7
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ListActionTest.java
  19. 3
    2
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/RenameActionTest.java
  20. 2
    1
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/SearchActionTest.java
  21. 80
    0
      server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/SetAsDefaultActionTest.java

+ 29
- 6
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CopyAction.java Parādīt failu

@@ -19,6 +19,7 @@
*/
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -29,9 +30,12 @@ import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.qualitygate.QualityGateUpdater;
import org.sonar.server.user.UserSession;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_SOURCE_NAME;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
import static org.sonarqube.ws.Qualitygates.QualityGate.newBuilder;

@@ -54,34 +58,53 @@ public class CopyAction implements QualityGatesWsAction {
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("copy")
.setDescription("Copy a Quality Gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
"Either 'sourceName' or 'id' must be provided. Requires the 'Administer Quality Gates' permission.")
.setPost(true)
.setChangelog(
new Change("8.4", "Parameter 'sourceName' added"),
new Change("8.4", "Parameter 'id' is deprecated. Use 'sourceName' instead."))
.setSince("4.3")
.setHandler(this);

action.createParam(PARAM_ID)
.setDescription("The ID of the source quality gate")
.setRequired(true)
.setDescription("The ID of the source quality gate. This parameter is deprecated. Use 'sourceName' instead.")
.setRequired(false)
.setDeprecatedSince("8.4")
.setExampleValue("1");

action.createParam(PARAM_SOURCE_NAME)
.setDescription("The name of the quality gate to copy")
.setRequired(false)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setExampleValue("My Quality Gate");

action.createParam(PARAM_NAME)
.setDescription("The name of the quality gate to create")
.setRequired(true)
.setExampleValue("My Quality Gate");
.setExampleValue("My New Quality Gate");

wsSupport.createOrganizationParam(action);
}

@Override
public void handle(Request request, Response response) {
String uuid = request.mandatoryParam(PARAM_ID);
String uuid = request.param(PARAM_ID);
String sourceName = request.param(PARAM_SOURCE_NAME);
checkArgument(sourceName != null ^ uuid != null, "Either 'id' or 'sourceName' must be provided, and not both");

String destinationName = request.mandatoryParam(PARAM_NAME);

try (DbSession dbSession = dbClient.openSession(false)) {

OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
userSession.checkPermission(ADMINISTER_QUALITY_GATES, organization);
QualityGateDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
QualityGateDto qualityGate;
if (uuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, sourceName);
}
QualityGateDto copy = qualityGateUpdater.copy(dbSession, organization, qualityGate, destinationName);
dbSession.commit();


+ 3
- 0
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateAction.java Parādīt failu

@@ -19,6 +19,7 @@
*/
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -59,6 +60,8 @@ public class CreateAction implements QualityGatesWsAction {
.setDescription("Create a Quality Gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
.setSince("4.3")
.setChangelog(
new Change("8.4", "Field 'id' in the response is deprecated."))
.setResponseExample(getClass().getResource("create-example.json"))
.setHandler(this);


+ 24
- 6
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/CreateConditionAction.java Parādīt failu

@@ -31,10 +31,12 @@ import org.sonar.db.qualitygate.QualityGateConditionDto;
import org.sonar.server.qualitygate.QualityGateConditionsUpdater;
import org.sonarqube.ws.Qualitygates.CreateConditionResponse;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.server.qualitygate.ws.QualityGatesWs.addConditionParams;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.ACTION_CREATE_CONDITION;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ERROR;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_METRIC;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_OPERATOR;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
@@ -56,35 +58,51 @@ public class CreateConditionAction implements QualityGatesWsAction {
WebService.NewAction createCondition = controller.createAction(ACTION_CREATE_CONDITION)
.setPost(true)
.setDescription("Add a new condition to a quality gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
"Either 'gateId' or 'gateName' must be provided. Requires the 'Administer Quality Gates' permission.")
.setSince("4.3")
.setResponseExample(getClass().getResource("create-condition-example.json"))
.setChangelog(
new Change("7.6", "Removed optional 'warning' and 'period' parameters"),
new Change("7.6", "Made 'error' parameter mandatory"),
new Change("7.6", "Reduced the possible values of 'op' parameter to LT and GT"))
new Change("7.6", "Reduced the possible values of 'op' parameter to LT and GT"),
new Change("8.4", "Parameter 'gateName' added"),
new Change("8.4", "Parameter 'gateId' is deprecated. Use 'gateName' instead."))
.setHandler(this);

createCondition
.createParam(PARAM_GATE_ID)
.setRequired(true)
.setDescription("ID of the quality gate")
.setDeprecatedSince("8.4")
.setRequired(false)
.setDescription("ID of the quality gate. This parameter is deprecated. Use 'gateName' instead.")
.setExampleValue("1");

createCondition
.createParam(PARAM_GATE_NAME)
.setRequired(false)
.setDescription("Name of the quality gate")
.setExampleValue("SonarSource way");

addConditionParams(createCondition);
wsSupport.createOrganizationParam(createCondition);
}

@Override
public void handle(Request request, Response response) {
String gateUuid = request.mandatoryParam(PARAM_GATE_ID);
String gateUuid = request.param(PARAM_GATE_ID);
String gateName = request.param(PARAM_GATE_NAME);
String metric = request.mandatoryParam(PARAM_METRIC);
String operator = request.mandatoryParam(PARAM_OPERATOR);
String error = request.mandatoryParam(PARAM_ERROR);
checkArgument(gateName != null ^ gateUuid != null, "One of 'gateId' or 'gateName' must be provided, and not both");

try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, gateUuid);
QGateWithOrgDto qualityGate;
if (gateUuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, gateUuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, gateName);
}
wsSupport.checkCanEdit(qualityGate);
QualityGateConditionDto condition = qualityGateConditionsUpdater.createCondition(dbSession, qualityGate, metric, operator, error);
CreateConditionResponse.Builder createConditionResponse = CreateConditionResponse.newBuilder()

+ 30
- 5
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/DestroyAction.java Parādīt failu

@@ -19,6 +19,7 @@
*/
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -30,6 +31,7 @@ import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.qualitygate.QualityGateFinder;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;

public class DestroyAction implements QualityGatesWsAction {

@@ -47,25 +49,48 @@ public class DestroyAction implements QualityGatesWsAction {
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("destroy")
.setDescription("Delete a Quality Gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
"Either 'id' or 'name' must be specified. Requires the 'Administer Quality Gates' permission.")
.setSince("4.3")
.setPost(true)
.setChangelog(
new Change("8.4", "Parameter 'name' added"),
new Change("8.4", "Parameter 'id' is deprecated. Use 'name' instead."))
.setHandler(this);

action.createParam(QualityGatesWsParameters.PARAM_ID)
.setDescription("ID of the quality gate to delete")
.setRequired(true)
.setDescription("ID of the quality gate to delete. This parameter is deprecated. Use 'name' instead.")
.setRequired(false)
.setDeprecatedSince("8.4")
.setExampleValue("1");

action.createParam(QualityGatesWsParameters.PARAM_NAME)
.setDescription("Name of the quality gate to delete")
.setRequired(false)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setExampleValue("SonarSource Way");

wsSupport.createOrganizationParam(action);
}

@Override
public void handle(Request request, Response response) {
String qualityGateUuid = request.mandatoryParam(QualityGatesWsParameters.PARAM_ID);
String uuid = request.param(QualityGatesWsParameters.PARAM_ID);
String name = request.param(QualityGatesWsParameters.PARAM_NAME);

checkArgument(name != null ^ uuid != null, "One of 'id' or 'name' must be provided, and not both");

try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, qualityGateUuid);

QGateWithOrgDto qualityGate;

if (uuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, name);
}

QualityGateDto defaultQualityGate = finder.getDefault(dbSession, organization);
checkArgument(!defaultQualityGate.getUuid().equals(qualityGate.getUuid()), "The default quality gate cannot be removed");
wsSupport.checkCanEdit(qualityGate);

+ 2
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/GetByProjectAction.java Parādīt failu

@@ -77,7 +77,8 @@ public class GetByProjectAction implements QualityGatesWsAction {
.setChangelog(
new Change("6.6", "The parameter 'projectId' has been removed"),
new Change("6.6", "The parameter 'projectKey' has been renamed to 'project'"),
new Change("6.6", "This webservice is now part of the public API"));
new Change("6.6", "This webservice is now part of the public API"),
new Change("8.4", "Field 'id' in the response is deprecated."));

action.createParam(PARAM_PROJECT)
.setDescription("Project key")

+ 2
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ListAction.java Parādīt failu

@@ -60,7 +60,8 @@ public class ListAction implements QualityGatesWsAction {
new Change("7.0", "'isDefault' field is added on quality gate"),
new Change("7.0", "'default' field on root level is deprecated"),
new Change("7.0", "'isBuiltIn' field is added in the response"),
new Change("7.0", "'actions' fields are added in the response"))
new Change("7.0", "'actions' fields are added in the response"),
new Change("8.4", "Field 'id' in the response is deprecated."))
.setHandler(this);
wsSupport.createOrganizationParam(action);
}

+ 3
- 0
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsParameters.java Parādīt failu

@@ -39,12 +39,15 @@ public class QualityGatesWsParameters {
public static final String PARAM_PAGE_SIZE = "pageSize";
public static final String PARAM_PAGE = "page";
public static final String PARAM_QUERY = "query";
public static final String PARAM_CURRENT_NAME = "currentName";
public static final String PARAM_NAME = "name";
public static final String PARAM_ERROR = "error";
public static final String PARAM_OPERATOR = "op";
public static final String PARAM_METRIC = "metric";
public static final String PARAM_GATE_ID = "gateId";
public static final String PARAM_GATE_NAME = "gateName";
public static final String PARAM_ID = "id";
public static final String PARAM_SOURCE_NAME = "sourceName";

private QualityGatesWsParameters() {
// prevent instantiation

+ 6
- 0
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWsSupport.java Parādīt failu

@@ -68,6 +68,12 @@ public class QualityGatesWsSupport {
"No quality gate has been found for id %s in organization %s", qualityGateUuid, organization.getName());
}

public QGateWithOrgDto getByOrganizationAndName(DbSession dbSession, OrganizationDto organization, String qualityGateName) {
return checkFound(
dbClient.qualityGateDao().selectByOrganizationAndName(dbSession, organization, qualityGateName),
"No quality gate has been found for name %s in organization %s", qualityGateName, organization.getName());
}

QualityGateConditionDto getCondition(DbSession dbSession, String uuid) {
return checkFound(dbClient.gateConditionDao().selectByUuid(uuid, dbSession), "No quality gate condition with uuid '%s'", uuid);
}

+ 33
- 10
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java Parādīt failu

@@ -19,6 +19,7 @@
*/
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -31,6 +32,7 @@ import org.sonarqube.ws.Qualitygates.QualityGate;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_CURRENT_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
@@ -50,39 +52,60 @@ public class RenameAction implements QualityGatesWsAction {
WebService.NewAction action = controller.createAction("rename")
.setPost(true)
.setDescription("Rename a Quality Gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
"Either 'id' or 'currentName' must be specified. Requires the 'Administer Quality Gates' permission.")
.setSince("4.3")
.setChangelog(
new Change("8.4", "Parameter 'currentName' added"),
new Change("8.4", "Parameter 'id' is deprecated. Use 'currentName' instead."))
.setHandler(this);

action.createParam(PARAM_ID)
.setRequired(true)
.setDescription("ID of the quality gate to rename")
.setRequired(false)
.setDeprecatedSince("8.4")
.setDescription("ID of the quality gate to rename. This parameter is deprecated. Use 'currentName' instead.")
.setExampleValue("1");

action.createParam(PARAM_CURRENT_NAME)
.setRequired(false)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setDescription("Current name of the quality gate")
.setExampleValue("My Quality Gate");

action.createParam(PARAM_NAME)
.setRequired(true)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setDescription("New name of the quality gate")
.setExampleValue("My Quality Gate");
.setExampleValue("My New Quality Gate");

wsSupport.createOrganizationParam(action);
}

@Override
public void handle(Request request, Response response) {
String uuid = request.mandatoryParam(PARAM_ID);
String uuid = request.param(PARAM_ID);
String currentName = request.param(PARAM_CURRENT_NAME);

checkArgument(uuid != null ^ currentName != null, "One of 'id' or 'currentName' must be provided, and not both");

try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
QualityGateDto qualityGate = rename(dbSession, organization, uuid, request.mandatoryParam(PARAM_NAME));

QGateWithOrgDto qualityGate;
if (uuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, currentName);
}
QualityGateDto renamedQualityGate = rename(dbSession, organization, qualityGate, request.mandatoryParam(PARAM_NAME));
writeProtobuf(QualityGate.newBuilder()
.setId(qualityGate.getUuid())
.setName(qualityGate.getName())
.setId(renamedQualityGate.getUuid())
.setName(renamedQualityGate.getName())
.build(), request, response);
}
}

private QualityGateDto rename(DbSession dbSession, OrganizationDto organization, String uuid, String name) {
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
private QualityGateDto rename(DbSession dbSession, OrganizationDto organization, QGateWithOrgDto qualityGate, String name) {
wsSupport.checkCanEdit(qualityGate);
checkNotAlreadyExists(dbSession, organization, qualityGate, name);
qualityGate.setName(name);

+ 29
- 5
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SearchAction.java Parādīt failu

@@ -38,11 +38,14 @@ import org.sonar.db.qualitygate.QGateWithOrgDto;
import org.sonar.server.user.UserSession;
import org.sonarqube.ws.Qualitygates;

import static com.google.common.base.Preconditions.checkArgument;
import static java.util.stream.Collectors.toList;
import static org.sonar.api.server.ws.WebService.Param.SELECTED;
import static org.sonar.api.utils.Paging.forPageIndex;
import static org.sonar.db.qualitygate.ProjectQgateAssociationQuery.ANY;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_PAGE;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_PAGE_SIZE;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_QUERY;
@@ -64,20 +67,30 @@ public class SearchAction implements QualityGatesWsAction {
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("search")
.setDescription("Search for projects associated (or not) to a quality gate.<br/>" +
"Only authorized projects for current user will be returned.")
"Only authorized projects for the current user will be returned.")
.setSince("4.3")
.setResponseExample(Resources.getResource(this.getClass(), "search-example.json"))
.setChangelog(
new Change("7.9", "New field 'paging' in response"),
new Change("7.9", "New field 'key' returning the project key in 'results' response"),
new Change("7.9", "Field 'more' is deprecated in the response"))
new Change("7.9", "Field 'more' is deprecated in the response"),
new Change("8.4", "Parameter 'gateName' added"),
new Change("8.4", "Parameter 'gateId' is deprecated. Use 'gateName' instead."))
.setHandler(this);

action.createParam(PARAM_GATE_ID)
.setDescription("Quality Gate ID")
.setRequired(true)
.setDescription("Quality Gate ID. This parameter is deprecated. Use 'gateName' instead.")
.setRequired(false)
.setDeprecatedSince("8.4")
.setExampleValue("1");

action.createParam(PARAM_GATE_NAME)
.setDescription("Quality Gate name")
.setRequired(false)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setExampleValue("SonarSource Way");

action.createParam(PARAM_QUERY)
.setDescription("To search for projects containing this string. If this parameter is set, \"selected\" is set to \"all\".")
.setExampleValue("abc");
@@ -101,7 +114,18 @@ public class SearchAction implements QualityGatesWsAction {
try (DbSession dbSession = dbClient.openSession(false)) {

OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, request.mandatoryParam(PARAM_GATE_ID));

String gateUuid = request.param(PARAM_GATE_ID);
String gateName = request.param(PARAM_GATE_NAME);

checkArgument(gateName != null ^ gateUuid != null, "One of 'gateId' or 'gateName' must be provided, and not both");

QGateWithOrgDto qualityGate;
if (gateUuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, gateUuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, gateName);
}

ProjectQgateAssociationQuery projectQgateAssociationQuery = ProjectQgateAssociationQuery.builder()
.qualityGate(qualityGate)

+ 28
- 5
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SelectAction.java Parādīt failu

@@ -30,8 +30,11 @@ import org.sonar.db.project.ProjectDto;
import org.sonar.db.qualitygate.QGateWithOrgDto;
import org.sonar.db.qualitygate.QualityGateDto;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.ACTION_SELECT;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_GATE_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_PROJECT_KEY;
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;

@@ -56,13 +59,24 @@ public class SelectAction implements QualityGatesWsAction {
.setPost(true)
.setSince("4.3")
.setHandler(this)
.setChangelog(new Change("8.3", "The parameter 'projectId' was removed"));
.setChangelog(
new Change("8.3", "The parameter 'projectId' was removed"),
new Change("8.4", "Parameter 'gateName' added"),
new Change("8.4", "Parameter 'gateId' is deprecated. Use 'gateName' instead."));

action.createParam(PARAM_GATE_ID)
.setDescription("Quality gate id")
.setRequired(true)
.setDescription("Quality gate ID. This parameter is deprecated. Use 'gateName' instead.")
.setRequired(false)
.setDeprecatedSince("8.4")
.setExampleValue("1");

action.createParam(PARAM_GATE_NAME)
.setRequired(false)
.setDescription("Name of the quality gate")
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setExampleValue("SonarSource way");

action.createParam(PARAM_PROJECT_KEY)
.setRequired(true)
.setDescription("Project key")
@@ -74,12 +88,21 @@ public class SelectAction implements QualityGatesWsAction {

@Override
public void handle(Request request, Response response) {
String gateUuid = request.mandatoryParam(PARAM_GATE_ID);
String gateUuid = request.param(PARAM_GATE_ID);
String gateName = request.param(PARAM_GATE_NAME);
String projectKey = request.mandatoryParam(PARAM_PROJECT_KEY);

checkArgument(gateName != null ^ gateUuid != null, "Either 'gateId' or 'gateName' must be provided, and not both");


try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, gateUuid);
QGateWithOrgDto qualityGate;
if (gateUuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, gateUuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, gateName);
}
ProjectDto project = wsSupport.getProject(dbSession, organization, projectKey);
wsSupport.checkCanAdminProject(organization, project);


+ 29
- 6
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/SetAsDefaultAction.java Parādīt failu

@@ -19,6 +19,7 @@
*/
package org.sonar.server.qualitygate.ws;

import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -28,8 +29,11 @@ import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.user.UserSession;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;

public class SetAsDefaultAction implements QualityGatesWsAction {

@@ -47,27 +51,46 @@ public class SetAsDefaultAction implements QualityGatesWsAction {
public void define(WebService.NewController controller) {
WebService.NewAction action = controller.createAction("set_as_default")
.setDescription("Set a quality gate as the default quality gate.<br>" +
"Requires the 'Administer Quality Gates' permission.")
"Either 'id' or 'name' must be specified. Requires the 'Administer Quality Gates' permission.")
.setSince("4.3")
.setChangelog(
new Change("8.4", "Parameter 'name' added"),
new Change("8.4", "Parameter 'id' is deprecated. Use 'name' instead."))
.setPost(true)
.setHandler(this);

action.createParam(QualityGatesWsParameters.PARAM_ID)
.setDescription("ID of the quality gate to set as default")
.setRequired(true)
action.createParam(PARAM_ID)
.setDescription("ID of the quality gate to set as default. This parameter is deprecated. Use 'name' instead.")
.setDeprecatedSince("8.4")
.setRequired(false)
.setExampleValue("1");

action.createParam(PARAM_NAME)
.setDescription("Name of the quality gate to set as default")
.setRequired(false)
.setMaximumLength(NAME_MAXIMUM_LENGTH)
.setSince("8.4")
.setExampleValue("SonarSource Way");

wsSupport.createOrganizationParam(action);
}

@Override
public void handle(Request request, Response response) {
String uuid = request.mandatoryParam(PARAM_ID);
String uuid = request.param(PARAM_ID);
String name = request.param(PARAM_NAME);
checkArgument(name != null ^ uuid != null, "One of 'id' or 'name' must be provided, and not both");

try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = wsSupport.getOrganization(dbSession, request);
userSession.checkPermission(ADMINISTER_QUALITY_GATES, organization);
QualityGateDto qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
QualityGateDto qualityGate;

if (uuid != null) {
qualityGate = wsSupport.getByOrganizationAndUuid(dbSession, organization, uuid);
} else {
qualityGate = wsSupport.getByOrganizationAndName(dbSession, organization, name);
}
organization.setDefaultQualityGateUuid(qualityGate.getUuid());
dbClient.organizationDao().update(dbSession, organization);
dbSession.commit();

+ 2
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualitygate/ws/ShowAction.java Parādīt failu

@@ -70,7 +70,8 @@ public class ShowAction implements QualityGatesWsAction {
.setChangelog(
new Change("7.6", "'period' and 'warning' fields of conditions are removed from the response"),
new Change("7.0", "'isBuiltIn' field is added to the response"),
new Change("7.0", "'actions' field is added in the response"))
new Change("7.0", "'actions' field is added in the response"),
new Change("8.4", "Field 'id' in the response is deprecated."))
.setHandler(this);

action.createParam(PARAM_ID)

+ 3
- 2
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CopyActionTest.java Parādīt failu

@@ -90,7 +90,8 @@ public class CopyActionTest {
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("id", true),
tuple("id", false),
tuple("sourceName", false),
tuple("organization", false),
tuple("name", true));
}
@@ -232,7 +233,7 @@ public class CopyActionTest {
userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'id' parameter is missing");
expectedException.expectMessage("Either 'id' or 'sourceName' must be provided, and not both");

ws.newRequest()
.setParam(PARAM_NAME, "new-name")

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/CreateConditionActionTest.java Parādīt failu

@@ -240,7 +240,8 @@ public class CreateConditionActionTest {
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("gateId", true),
tuple("gateId", false),
tuple("gateName", false),
tuple("metric", true),
tuple("error", true),
tuple("op", false),

+ 3
- 2
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/DestroyActionTest.java Parādīt failu

@@ -164,7 +164,7 @@ public class DestroyActionTest {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);

expectedException.expect(IllegalArgumentException.class);
expectedException.expect(NotFoundException.class);

ws.newRequest()
.setParam(PARAM_ID, EMPTY)
@@ -225,7 +225,8 @@ public class DestroyActionTest {
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("id", true),
tuple("id", false),
tuple("name", false),
tuple("organization", false));
}


+ 1
- 5
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/GetByProjectActionTest.java Parādīt failu

@@ -22,7 +22,6 @@ package org.sonar.server.qualitygate.ws;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.api.web.UserRole;
@@ -68,10 +67,7 @@ public class GetByProjectActionTest {
assertThat(action.description()).isNotEmpty();
assertThat(action.isInternal()).isFalse();
assertThat(action.since()).isEqualTo("6.1");
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder(
tuple("6.6", "The parameter 'projectId' has been removed"),
tuple("6.6", "The parameter 'projectKey' has been renamed to 'project'"),
tuple("6.6", "This webservice is now part of the public API"));
assertThat(action.changelog()).isNotEmpty();
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(

+ 1
- 7
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/ListActionTest.java Parādīt failu

@@ -22,7 +22,6 @@ package org.sonar.server.qualitygate.ws;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.WebService;
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
@@ -246,12 +245,7 @@ public class ListActionTest {
assertThat(action.key()).isEqualTo("list");
assertThat(action.isPost()).isFalse();
assertThat(action.isInternal()).isFalse();
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription)
.containsExactlyInAnyOrder(
tuple("7.0", "'isDefault' field is added on quality gate"),
tuple("7.0", "'default' field on root level is deprecated"),
tuple("7.0", "'isBuiltIn' field is added in the response"),
tuple("7.0", "'actions' fields are added in the response"));
assertThat(action.changelog()).isNotEmpty();
assertThat(action.params()).extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(tuple("organization", false));
}

+ 3
- 2
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/RenameActionTest.java Parādīt failu

@@ -61,11 +61,12 @@ public class RenameActionTest {
WebService.Action action = ws.getDef();
assertThat(action.key()).isEqualTo("rename");
assertThat(action.since()).isEqualTo("4.3");
assertThat(action.changelog()).isEmpty();
assertThat(action.changelog()).isNotEmpty();
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("id", true),
tuple("id", false),
tuple("currentName", false),
tuple("name", true),
tuple("organization", false));
}

+ 2
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/SearchActionTest.java Parādīt failu

@@ -400,7 +400,8 @@ public class SearchActionTest {
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("gateId", true),
tuple("gateId", false),
tuple("gateName", false),
tuple("query", false),
tuple("organization", false),
tuple("selected", false),

+ 80
- 0
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualitygate/ws/SetAsDefaultActionTest.java Parādīt failu

@@ -0,0 +1,80 @@
/*
* SonarQube
* Copyright (C) 2009-2020 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.server.qualitygate.ws;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualitygate.QGateWithOrgDto;
import org.sonar.server.component.TestComponentFinder;
import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsActionTester;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.tuple;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;

public class SetAsDefaultActionTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Rule
public UserSessionRule userSession = UserSessionRule.standalone();
@Rule
public DbTester db = DbTester.create(System2.INSTANCE);

private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db);

private WsActionTester ws = new WsActionTester(
new SetAsDefaultAction(db.getDbClient(), userSession, new QualityGatesWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider, TestComponentFinder.from(db))));

@Test
public void verify_definition() {
WebService.Action action = ws.getDef();
assertThat(action.key()).isEqualTo("set_as_default");
assertThat(action.since()).isEqualTo("4.3");
assertThat(action.changelog()).isNotEmpty();
assertThat(action.params())
.extracting(WebService.Param::key, WebService.Param::isRequired)
.containsExactlyInAnyOrder(
tuple("id", false),
tuple("organization", false),
tuple("name", false));
}

@Test
public void set_default() {
OrganizationDto organization = db.organizations().insert();
userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization);
QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("name"));

ws.newRequest()
.setParam("name", "name")
.setParam("organization", organization.getKey())
.execute();

assertThat(db.getDbClient().organizationDao().selectByKey(db.getSession(), organization.getKey()).get().getDefaultQualityGateUuid()).isEqualTo(qualityGate.getUuid());
}
}

Notiek ielāde…
Atcelt
Saglabāt