* remove componentId, uuid params and associated documentation * remove deprecated params from api/components/search_projects * remove deprecated params from api/components/show * remove request parameters: key, componentId, id * remove deprecated params from api/components/suggestions * remove deprecated params from api/components/tree * remove deprecated request parameters: baseComponentKey, componentId, baseComponentId * remove `id` field response from api/components/search, api/components/search_projects * fix description in api/components/showtags/8.0
@@ -31,9 +31,6 @@ import org.sonar.db.component.ComponentDto; | |||
import org.sonar.server.component.ComponentFinder; | |||
import org.sonar.server.user.UserSession; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; | |||
import static org.sonar.server.component.ComponentFinder.ParamNames.COMPONENT_ID_AND_COMPONENT; | |||
import static org.sonar.server.component.ws.MeasuresWsParameters.PARAM_BRANCH; | |||
import static org.sonar.server.component.ws.MeasuresWsParameters.PARAM_PULL_REQUEST; | |||
import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001; | |||
@@ -41,8 +38,7 @@ import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; | |||
import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001; | |||
public class AppAction implements ComponentsWsAction { | |||
private static final String PARAM_COMPONENT_ID = "componentId"; | |||
private static final String PARAM_COMPONENT = "component"; | |||
static final String PARAM_COMPONENT = "component"; | |||
private final DbClient dbClient; | |||
@@ -61,6 +57,7 @@ public class AppAction implements ComponentsWsAction { | |||
public void define(WebService.NewController controller) { | |||
WebService.NewAction action = controller.createAction("app") | |||
.setDescription("Coverage data required for rendering the component viewer.<br>" + | |||
"Either branch or pull request can be provided, not both<br>" + | |||
"Requires the following permission: 'Browse'.") | |||
.setResponseExample(getClass().getResource("app-example.json")) | |||
.setSince("4.4") | |||
@@ -68,16 +65,10 @@ public class AppAction implements ComponentsWsAction { | |||
.setInternal(true) | |||
.setHandler(this); | |||
action | |||
.createParam(PARAM_COMPONENT_ID) | |||
.setDescription("Component ID") | |||
.setDeprecatedSince("6.4") | |||
.setDeprecatedKey("uuid", "6.4") | |||
.setExampleValue(UUID_EXAMPLE_01); | |||
action.createParam(PARAM_COMPONENT) | |||
.setDescription("Component key") | |||
.setExampleValue(KEY_PROJECT_EXAMPLE_001) | |||
.setRequired(true) | |||
.setSince("6.4"); | |||
action.createParam(PARAM_BRANCH) | |||
@@ -98,27 +89,26 @@ public class AppAction implements ComponentsWsAction { | |||
try (DbSession session = dbClient.openSession(false)) { | |||
ComponentDto component = loadComponent(session, request); | |||
userSession.checkComponentPermission(UserRole.USER, component); | |||
JsonWriter json = response.newJsonWriter(); | |||
json.beginObject(); | |||
componentViewerJsonWriter.writeComponent(json, component, userSession, session); | |||
appendPermissions(json, userSession); | |||
componentViewerJsonWriter.writeMeasures(json, component, session); | |||
json.endObject(); | |||
json.close(); | |||
writeJsonResponse(response, session, component); | |||
} | |||
} | |||
private ComponentDto loadComponent(DbSession dbSession, Request request) { | |||
String componentUuid = request.param(PARAM_COMPONENT_ID); | |||
String branch = request.param(PARAM_BRANCH); | |||
String pullRequest = request.param(PARAM_PULL_REQUEST); | |||
checkArgument(componentUuid == null || (branch == null && pullRequest == null), "Parameter '%s' cannot be used at the same time as '%s' or '%s'", PARAM_COMPONENT_ID, | |||
PARAM_BRANCH, PARAM_PULL_REQUEST); | |||
if (branch == null && pullRequest == null) { | |||
return componentFinder.getByUuidOrKey(dbSession, componentUuid, request.param(PARAM_COMPONENT), COMPONENT_ID_AND_COMPONENT); | |||
String componentKey = request.mandatoryParam(PARAM_COMPONENT); | |||
return componentFinder.getByKeyAndOptionalBranchOrPullRequest(dbSession, componentKey, branch, pullRequest); | |||
} | |||
private void writeJsonResponse(Response response, DbSession session, ComponentDto component) { | |||
try (JsonWriter json = response.newJsonWriter()) { | |||
json.beginObject(); | |||
componentViewerJsonWriter.writeComponent(json, component, userSession, session); | |||
appendPermissions(json, userSession); | |||
componentViewerJsonWriter.writeMeasures(json, component, session); | |||
json.endObject(); | |||
} | |||
return componentFinder.getByKeyAndOptionalBranchOrPullRequest(dbSession, request.mandatoryParam(PARAM_COMPONENT), branch, pullRequest); | |||
} | |||
private static void appendPermissions(JsonWriter json, UserSession userSession) { |
@@ -57,7 +57,6 @@ class ComponentDtoToWsComponent { | |||
private static Components.Component.Builder componentDtoToWsComponent(ComponentDto dto, String organizationDtoKey, Optional<SnapshotDto> lastAnalysis) { | |||
Components.Component.Builder wsComponent = Components.Component.newBuilder() | |||
.setOrganization(organizationDtoKey) | |||
.setId(dto.uuid()) | |||
.setKey(dto.getKey()) | |||
.setName(dto.name()) | |||
.setQualifier(dto.qualifier()); |
@@ -88,7 +88,10 @@ public class SearchAction implements ComponentsWsAction { | |||
.setSince("6.3") | |||
.setDescription("Search for components") | |||
.addPagingParams(100, MAX_LIMIT) | |||
.setChangelog(new Change("7.6", String.format("The use of 'BRC' as value for parameter '%s' is deprecated", PARAM_QUALIFIERS))) | |||
.setChangelog( | |||
new Change("7.6", String.format("The use of 'BRC' as value for parameter '%s' is deprecated", PARAM_QUALIFIERS)), | |||
new Change("8.0", "Field 'id' from response has been removed") | |||
) | |||
.setResponseExample(getClass().getResource("search-components-example.json")) | |||
.setHandler(this); | |||
@@ -198,7 +201,6 @@ public class SearchAction implements ComponentsWsAction { | |||
Components.Component.Builder builder = Components.Component.newBuilder() | |||
.setOrganization(organization.getKey()) | |||
.setId(dto.uuid()) | |||
.setKey(dto.getDbKey()) | |||
.setProject(projectKey) | |||
.setName(dto.name()) |
@@ -89,6 +89,7 @@ import static org.sonar.server.ws.WsUtils.writeProtobuf; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.ACTION_SEARCH_PROJECTS; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_FILTER; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_QUALIFIERS; | |||
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES; | |||
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_TAGS; | |||
@@ -121,13 +122,10 @@ public class SearchProjectsAction implements ComponentsWsAction { | |||
.setDescription("Search for projects") | |||
.addPagingParams(DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE) | |||
.setInternal(true) | |||
.setResponseExample(getClass().getResource("search_projects-example.json")) | |||
.setChangelog( | |||
new Change("6.4", format("The '%s' parameter accepts '%s' to filter by language", FILTER_LANGUAGES, PARAM_FILTER)), | |||
new Change("6.4", "The 'visibility' field is added"), | |||
new Change("6.5", "The 'filter' parameter now allows 'NO_DATA' as value for numeric metrics"), | |||
new Change("6.5", "Added the option 'analysisDate' for the 'sort' parameter"), | |||
new Change("6.5", format("Value '%s' is added to parameter '%s'", LEAK_PERIOD_DATE, FIELDS))) | |||
new Change("8.0", "Field 'id' from response has been removed") | |||
) | |||
.setResponseExample(getClass().getResource("search_projects-example.json")) | |||
.setHandler(this); | |||
action.createFieldsParam(POSSIBLE_FIELDS) | |||
@@ -456,7 +454,6 @@ public class SearchProjectsAction implements ComponentsWsAction { | |||
wsComponent | |||
.clear() | |||
.setOrganization(organizationDto.getKey()) | |||
.setId(dbComponent.uuid()) | |||
.setKey(dbComponent.getDbKey()) | |||
.setName(dbComponent.name()) | |||
.setVisibility(Visibility.getLabel(dbComponent.isPrivate())); |
@@ -37,21 +37,15 @@ import org.sonar.server.component.ComponentFinder; | |||
import org.sonar.server.user.UserSession; | |||
import org.sonarqube.ws.Components.ShowWsResponse; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static java.lang.String.format; | |||
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; | |||
import static org.sonar.server.component.ComponentFinder.ParamNames.COMPONENT_ID_AND_COMPONENT; | |||
import static org.sonar.server.component.ws.ComponentDtoToWsComponent.componentDtoToWsComponent; | |||
import static org.sonar.server.component.ws.MeasuresWsParameters.PARAM_BRANCH; | |||
import static org.sonar.server.component.ws.MeasuresWsParameters.PARAM_PULL_REQUEST; | |||
import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001; | |||
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; | |||
import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001; | |||
import static org.sonar.server.ws.WsUtils.checkRequest; | |||
import static org.sonar.server.ws.WsUtils.writeProtobuf; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.ACTION_SHOW; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT_ID; | |||
public class ShowAction implements ComponentsWsAction { | |||
private final UserSession userSession; | |||
@@ -67,32 +61,18 @@ public class ShowAction implements ComponentsWsAction { | |||
@Override | |||
public void define(WebService.NewController context) { | |||
WebService.NewAction action = context.createAction(ACTION_SHOW) | |||
.setDescription(format("Returns a component (file, directory, project, view…) and its ancestors. " + | |||
.setDescription("Returns a component (file, directory, project, portfolio…) and its ancestors. " + | |||
"The ancestors are ordered from the parent to the root project. " + | |||
"The '%s' or '%s' parameter must be provided.<br>" + | |||
"Requires the following permission: 'Browse' on the project of the specified component.", | |||
PARAM_COMPONENT_ID, PARAM_COMPONENT)) | |||
"Requires the following permission: 'Browse' on the project of the specified component.") | |||
.setResponseExample(getClass().getResource("show-example.json")) | |||
.setSince("5.4") | |||
.setChangelog( | |||
new Change("6.4", "Analysis date has been added to the response"), | |||
new Change("6.4", "The field 'id' is deprecated in the response"), | |||
new Change("6.4", "The 'visibility' field is added to the response"), | |||
new Change("6.5", "Leak period date is added to the response"), | |||
new Change("6.6", "'branch' is added to the response"), | |||
new Change("6.6", "'version' is added to the response"), | |||
new Change("7.6", String.format("The use of module keys in parameter '%s' is deprecated", PARAM_COMPONENT))) | |||
.setHandler(this); | |||
action.createParam(PARAM_COMPONENT_ID) | |||
.setDescription("Component id") | |||
.setDeprecatedKey("id", "6.4") | |||
.setDeprecatedSince("6.4") | |||
.setExampleValue(UUID_EXAMPLE_01); | |||
action.createParam(PARAM_COMPONENT) | |||
.setDescription("Component key") | |||
.setDeprecatedKey("key", "6.4") | |||
.setRequired(true) | |||
.setExampleValue(KEY_PROJECT_EXAMPLE_001); | |||
action.createParam(PARAM_BRANCH) | |||
@@ -128,16 +108,10 @@ public class ShowAction implements ComponentsWsAction { | |||
} | |||
private ComponentDto loadComponent(DbSession dbSession, Request request) { | |||
String componentId = request.getId(); | |||
String componentKey = request.getKey(); | |||
String componentKey = request.getComponentKey(); | |||
String branch = request.getBranch(); | |||
String pullRequest = request.getPullRequest(); | |||
checkArgument(componentId == null || (branch == null && pullRequest == null), "Parameter '%s' cannot be used at the same time as '%s' or '%s'", PARAM_COMPONENT_ID, | |||
PARAM_BRANCH, PARAM_PULL_REQUEST); | |||
if (branch == null && pullRequest == null) { | |||
return componentFinder.getByUuidOrKey(dbSession, componentId, componentKey, COMPONENT_ID_AND_COMPONENT); | |||
} | |||
checkRequest(componentKey != null, "The '%s' parameter is missing", PARAM_COMPONENT); | |||
return componentFinder.getByKeyAndOptionalBranchOrPullRequest(dbSession, componentKey, branch, pullRequest); | |||
} | |||
@@ -154,35 +128,22 @@ public class ShowAction implements ComponentsWsAction { | |||
private static Request toShowWsRequest(org.sonar.api.server.ws.Request request) { | |||
return new Request() | |||
.setId(request.param(PARAM_COMPONENT_ID)) | |||
.setKey(request.param(PARAM_COMPONENT)) | |||
.setComponentKey(request.mandatoryParam(PARAM_COMPONENT)) | |||
.setBranch(request.param(PARAM_BRANCH)) | |||
.setPullRequest(request.param(PARAM_PULL_REQUEST)); | |||
} | |||
private static class Request { | |||
private String id; | |||
private String key; | |||
private String componentKey; | |||
private String branch; | |||
private String pullRequest; | |||
@CheckForNull | |||
public String getId() { | |||
return id; | |||
} | |||
public Request setId(@Nullable String id) { | |||
this.id = id; | |||
return this; | |||
} | |||
@CheckForNull | |||
public String getKey() { | |||
return key; | |||
public String getComponentKey() { | |||
return componentKey; | |||
} | |||
public Request setKey(@Nullable String key) { | |||
this.key = key; | |||
public Request setComponentKey(String componentKey) { | |||
this.componentKey = componentKey; | |||
return this; | |||
} | |||
@@ -119,8 +119,7 @@ public class SuggestionsAction implements ComponentsWsAction { | |||
.setHandler(this) | |||
.setResponseExample(Resources.getResource(this.getClass(), "suggestions-example.json")) | |||
.setChangelog( | |||
new Change("7.6", String.format("The use of 'BRC' as value for parameter '%s' is deprecated", PARAM_MORE)), | |||
new Change("6.4", "Parameter 's' is optional")); | |||
new Change("7.6", String.format("The use of 'BRC' as value for parameter '%s' is deprecated", PARAM_MORE))); | |||
action.createParam(PARAM_QUERY) | |||
.setRequired(false) |
@@ -53,28 +53,23 @@ import org.sonar.server.user.UserSession; | |||
import org.sonarqube.ws.Components; | |||
import org.sonarqube.ws.Components.TreeWsResponse; | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static java.lang.String.CASE_INSENSITIVE_ORDER; | |||
import static java.lang.String.format; | |||
import static java.util.Collections.emptyMap; | |||
import static org.sonar.api.utils.Paging.offset; | |||
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_02; | |||
import static org.sonar.core.util.stream.MoreCollectors.toList; | |||
import static org.sonar.db.component.ComponentTreeQuery.Strategy.CHILDREN; | |||
import static org.sonar.db.component.ComponentTreeQuery.Strategy.LEAVES; | |||
import static org.sonar.server.component.ComponentFinder.ParamNames.COMPONENT_ID_AND_COMPONENT; | |||
import static org.sonar.server.component.ws.ComponentDtoToWsComponent.componentDtoToWsComponent; | |||
import static org.sonar.server.ws.KeyExamples.KEY_BRANCH_EXAMPLE_001; | |||
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; | |||
import static org.sonar.server.ws.KeyExamples.KEY_PULL_REQUEST_EXAMPLE_001; | |||
import static org.sonar.server.ws.WsParameterBuilder.createQualifiersParameter; | |||
import static org.sonar.server.ws.WsParameterBuilder.QualifierParameterContext.newQualifierParameterContext; | |||
import static org.sonar.server.ws.WsUtils.checkRequest; | |||
import static org.sonar.server.ws.WsUtils.writeProtobuf; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.ACTION_TREE; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_BRANCH; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT_ID; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_PULL_REQUEST; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_QUALIFIERS; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_STRATEGY; | |||
@@ -113,28 +108,21 @@ public class TreeAction implements ComponentsWsAction { | |||
@Override | |||
public void define(WebService.NewController context) { | |||
WebService.NewAction action = context.createAction(ACTION_TREE) | |||
.setDescription(format("Navigate through components based on the chosen strategy. The %s or the %s parameter must be provided.<br>" + | |||
.setDescription(format("Navigate through components based on the chosen strategy.<br>" + | |||
"Requires the following permission: 'Browse' on the specified project.<br>" + | |||
"When limiting search with the %s parameter, directories are not returned.", | |||
PARAM_COMPONENT_ID, PARAM_COMPONENT, Param.TEXT_QUERY)) | |||
Param.TEXT_QUERY)) | |||
.setSince("5.4") | |||
.setResponseExample(getClass().getResource("tree-example.json")) | |||
.setChangelog( | |||
new Change("7.6", String.format("The use of 'BRC' as value for parameter '%s' is deprecated", PARAM_QUALIFIERS)), | |||
new Change("7.6", String.format("The use of module keys in parameter '%s' is deprecated", PARAM_COMPONENT)), | |||
new Change("6.4", "The field 'id' is deprecated in the response")) | |||
new Change("7.6", String.format("The use of module keys in parameter '%s' is deprecated", PARAM_COMPONENT))) | |||
.setHandler(this) | |||
.addPagingParams(100, MAX_SIZE); | |||
action.createParam(PARAM_COMPONENT_ID) | |||
.setDescription("Base component id. The search is based on this component.") | |||
.setDeprecatedKey("baseComponentId", "6.4") | |||
.setDeprecatedSince("6.4") | |||
.setExampleValue(UUID_EXAMPLE_02); | |||
action.createParam(PARAM_COMPONENT) | |||
.setDescription("Base component key. The search is based on this component.") | |||
.setDeprecatedKey("baseComponentKey", "6.4") | |||
.setRequired(true) | |||
.setExampleValue(KEY_PROJECT_EXAMPLE_001); | |||
action.createParam(PARAM_BRANCH) | |||
@@ -200,16 +188,9 @@ public class TreeAction implements ComponentsWsAction { | |||
} | |||
private ComponentDto loadComponent(DbSession dbSession, Request request) { | |||
String componentId = request.getBaseComponentId(); | |||
String componentKey = request.getComponent(); | |||
String branch = request.getBranch(); | |||
String pullRequest = request.getPullRequest(); | |||
checkArgument(componentId == null || (branch == null && pullRequest == null), "Parameter '%s' cannot be used at the same time as '%s' or '%s'", PARAM_COMPONENT_ID, | |||
PARAM_BRANCH, PARAM_PULL_REQUEST); | |||
if (branch == null && pullRequest == null) { | |||
return componentFinder.getByUuidOrKey(dbSession, componentId, componentKey, COMPONENT_ID_AND_COMPONENT); | |||
} | |||
checkRequest(componentKey != null, "The '%s' parameter is missing", PARAM_COMPONENT); | |||
return componentFinder.getByKeyAndOptionalBranchOrPullRequest(dbSession, componentKey, branch, pullRequest); | |||
} | |||
@@ -299,8 +280,7 @@ public class TreeAction implements ComponentsWsAction { | |||
private static Request toTreeWsRequest(org.sonar.api.server.ws.Request request) { | |||
return new Request() | |||
.setBaseComponentId(request.param(PARAM_COMPONENT_ID)) | |||
.setComponent(request.param(PARAM_COMPONENT)) | |||
.setComponent(request.mandatoryParam(PARAM_COMPONENT)) | |||
.setBranch(request.param(PARAM_BRANCH)) | |||
.setPullRequest(request.param(PARAM_PULL_REQUEST)) | |||
.setStrategy(request.mandatoryParam(PARAM_STRATEGY)) | |||
@@ -350,7 +330,6 @@ public class TreeAction implements ComponentsWsAction { | |||
} | |||
private static class Request { | |||
private String baseComponentId; | |||
private String component; | |||
private String branch; | |||
private String pullRequest; | |||
@@ -362,25 +341,7 @@ public class TreeAction implements ComponentsWsAction { | |||
private Integer page; | |||
private Integer pageSize; | |||
/** | |||
* @deprecated since 6.4, please use {@link #getComponent()} instead | |||
*/ | |||
@Deprecated | |||
@CheckForNull | |||
private String getBaseComponentId() { | |||
return baseComponentId; | |||
} | |||
/** | |||
* @deprecated since 6.4, please use {@link #setComponent(String)} instead | |||
*/ | |||
@Deprecated | |||
private Request setBaseComponentId(@Nullable String baseComponentId) { | |||
this.baseComponentId = baseComponentId; | |||
return this; | |||
} | |||
public Request setComponent(@Nullable String component) { | |||
public Request setComponent(String component) { | |||
this.component = component; | |||
return this; | |||
} |
@@ -7,7 +7,6 @@ | |||
"components": [ | |||
{ | |||
"organization": "my-org-1", | |||
"id": "directory-uuid", | |||
"key": "directory-key", | |||
"qualifier": "DIR", | |||
"name": "Directory Name", | |||
@@ -15,7 +14,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-1", | |||
"id": "file-uuid", | |||
"key": "file-key", | |||
"qualifier": "FIL", | |||
"name": "File Name", | |||
@@ -24,7 +22,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-1", | |||
"id": "project-uuid", | |||
"key": "project-key", | |||
"qualifier": "TRK", | |||
"name": "Project Name", |
@@ -17,7 +17,6 @@ | |||
"components": [ | |||
{ | |||
"organization": "my-org-key-1", | |||
"id": "AU-Tpxb--iU5OvuD2FLy", | |||
"key": "my_project", | |||
"name": "My Project 1", | |||
"isFavorite": true, | |||
@@ -29,7 +28,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-key-1", | |||
"id": "AU-TpxcA-iU5OvuD2FLz", | |||
"key": "another_project", | |||
"name": "My Project 2", | |||
"isFavorite": false, | |||
@@ -38,7 +36,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-key-2", | |||
"id": "AU-TpxcA-iU5OvuD2FL0", | |||
"key": "third_project", | |||
"name": "My Project 3", | |||
"isFavorite": false, |
@@ -1,7 +1,6 @@ | |||
{ | |||
"component": { | |||
"organization": "my-org-1", | |||
"id": "AVIF-FffA3Ax6PH2efPD", | |||
"key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl/Rule.java", | |||
"name": "Rule.java", | |||
"qualifier": "FIL", | |||
@@ -14,7 +13,6 @@ | |||
"ancestors": [ | |||
{ | |||
"organization": "my-org-1", | |||
"id": "AVIF-FfgA3Ax6PH2efPF", | |||
"key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl", | |||
"name": "src/main/java/com/sonarsource/markdown/impl", | |||
"qualifier": "DIR", | |||
@@ -24,7 +22,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-1", | |||
"id": "AVIF98jgA3Ax6PH2efOW", | |||
"key": "com.sonarsource:java-markdown", | |||
"name": "Java Markdown", | |||
"description": "Java Markdown Project", |
@@ -6,15 +6,15 @@ | |||
}, | |||
"baseComponent": { | |||
"organization": "my-org-1", | |||
"id": "MY_PROJECT_ID", | |||
"key": "MY_PROJECT_KEY", | |||
"name": "Project Name", | |||
"qualifier": "TRK" | |||
"description": "DESCRIPTION_MY_PROJECT_ID", | |||
"qualifier": "TRK", | |||
"tags": [], | |||
"visibility": "private" | |||
}, | |||
"components": [ | |||
{ | |||
"organization": "my-org-1", | |||
"id": "AVHE6Jo2EplJjXTo0Rzw", | |||
"key": "com.sonarsource:java-markdown:src/test/java/com/sonarsource/markdown/BasicMarkdownParser.java", | |||
"name": "BasicMarkdownParser.java", | |||
"qualifier": "UTS", | |||
@@ -23,7 +23,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-1", | |||
"id": "AVHE6Jo3EplJjXTo0Rzx", | |||
"key": "com.sonarsource:java-markdown:src/test/java/com/sonarsource/markdown/BasicMarkdownParserTest.java", | |||
"name": "BasicMarkdownParserTest.java", | |||
"qualifier": "UTS", | |||
@@ -32,7 +31,6 @@ | |||
}, | |||
{ | |||
"organization": "my-org-1", | |||
"id": "AVHE6Jo1EplJjXTo0Rzj", | |||
"key": "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown", | |||
"name": "src/main/java/com/sonarsource/markdown", | |||
"qualifier": "DIR", |
@@ -169,7 +169,7 @@ public class AppActionTest { | |||
} | |||
@Test | |||
public void get_by_uuid() { | |||
public void get_by_component() { | |||
ComponentDto project = db.components().insertPrivateProject(); | |||
ComponentDto file = db.components().insertComponent(newFileDto(project, project)); | |||
MetricDto coverage = db.measures().insertMetric(m -> m.setKey(COVERAGE_KEY)); | |||
@@ -177,7 +177,7 @@ public class AppActionTest { | |||
userSession.logIn("john").addProjectPermission(USER, project); | |||
String result = ws.newRequest() | |||
.setParam("uuid", file.uuid()) | |||
.setParam("component", file.getDbKey()) | |||
.execute() | |||
.getInput(); | |||
@@ -291,39 +291,85 @@ public class AppActionTest { | |||
@Test | |||
public void fail_if_no_parameter_provided() { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Either 'componentId' or 'component' must be provided"); | |||
expectedException.expectMessage("The 'component' parameter is missing"); | |||
ws.newRequest().execute(); | |||
} | |||
@Test | |||
public void fail_if_both_componentId_and_branch_parameters_provided() { | |||
public void component_and_branch_parameters_provided() { | |||
ComponentDto project = db.components().insertMainBranch(); | |||
userSession.logIn("john").addProjectPermission(USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project); | |||
ComponentDto file = db.components().insertComponent(newFileDto(branch)); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Parameter 'componentId' cannot be used at the same time as 'branch' or 'pullRequest'"); | |||
ws.newRequest() | |||
.setParam("uuid", file.uuid()) | |||
String result = ws.newRequest() | |||
.setParam("component", file.getDbKey()) | |||
.setParam("branch", file.getBranch()) | |||
.execute(); | |||
.execute() | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"key\": \"" + file.getKey() + "\",\n" + | |||
" \"branch\": \"" + file.getBranch() + "\",\n" + | |||
" \"uuid\": \"" + file.uuid() + "\",\n" + | |||
" \"path\": \"" + file.path() + "\",\n" + | |||
" \"name\": \"" + file.name() + "\",\n" + | |||
" \"longName\": \"" + file.longName() + "\",\n" + | |||
" \"q\": \"" + file.qualifier() + "\",\n" + | |||
" \"project\": \"" + project.getKey() + "\",\n" + | |||
" \"projectName\": \"" + project.longName() + "\",\n" + | |||
" \"fav\": false,\n" + | |||
" \"canMarkAsFavorite\": true,\n" + | |||
" \"measures\": {}\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
public void component_and_pull_request_parameters_provided() { | |||
ComponentDto project = db.components().insertMainBranch(); | |||
userSession.logIn("john").addProjectPermission(USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setBranchType(PULL_REQUEST)); | |||
ComponentDto file = db.components().insertComponent(newFileDto(branch)); | |||
String result = ws.newRequest() | |||
.setParam("component", file.getDbKey()) | |||
.setParam("pullRequest", file.getPullRequest()) | |||
.execute() | |||
.getInput(); | |||
assertJson(result).isSimilarTo("{\n" + | |||
" \"key\": \"" + file.getKey() + "\",\n" + | |||
" \"uuid\": \"" + file.uuid() + "\",\n" + | |||
" \"path\": \"" + file.path() + "\",\n" + | |||
" \"name\": \"" + file.name() + "\",\n" + | |||
" \"longName\": \"" + file.longName() + "\",\n" + | |||
" \"q\": \"" + file.qualifier() + "\",\n" + | |||
" \"project\": \"" + project.getKey() + "\",\n" + | |||
" \"projectName\": \"" + project.longName() + "\",\n" + | |||
" \"pullRequest\": \"" + file.getPullRequest() + "\",\n" + | |||
" \"fav\": false,\n" + | |||
" \"canMarkAsFavorite\": true,\n" + | |||
" \"measures\": {}\n" + | |||
"}\n"); | |||
} | |||
@Test | |||
public void fail_if_both_componentId_and_pull_request_parameters_provided() { | |||
public void fail_if_component_and_pull_request_and_branch_parameters_provided() { | |||
ComponentDto project = db.components().insertMainBranch(); | |||
userSession.logIn("john").addProjectPermission(USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setBranchType(PULL_REQUEST)); | |||
ComponentDto file = db.components().insertComponent(newFileDto(branch)); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Parameter 'componentId' cannot be used at the same time as 'branch' or 'pullRequest'"); | |||
expectedException.expectMessage("Either branch or pull request can be provided, not both"); | |||
ws.newRequest() | |||
.setParam("uuid", file.uuid()) | |||
.setParam("pullRequest", file.getPullRequest()) | |||
.execute(); | |||
.setParam("component", file.getDbKey()) | |||
.setParam("branch", "unknown_branch") | |||
.setParam("pullRequest", "unknown_component") | |||
.execute() | |||
.getInput(); | |||
} | |||
@Test | |||
@@ -371,7 +417,21 @@ public class AppActionTest { | |||
assertThat(action.isInternal()).isTrue(); | |||
assertThat(action.isPost()).isFalse(); | |||
assertThat(action.handler()).isNotNull(); | |||
assertThat(action.params()).hasSize(4); | |||
assertThat(action.responseExampleAsString()).isNotNull(); | |||
assertThat(action.params()).hasSize(3); | |||
WebService.Param paramComponent = action.param(AppAction.PARAM_COMPONENT); | |||
assertThat(paramComponent).isNotNull(); | |||
assertThat(paramComponent.isRequired()).isTrue(); | |||
WebService.Param paramBranch = action.param(MeasuresWsParameters.PARAM_BRANCH); | |||
assertThat(paramBranch).isNotNull(); | |||
assertThat(paramBranch.isRequired()).isFalse(); | |||
WebService.Param paramPullRequest = action.param(MeasuresWsParameters.PARAM_PULL_REQUEST); | |||
assertThat(paramPullRequest).isNotNull(); | |||
assertThat(paramPullRequest.isRequired()).isFalse(); | |||
} | |||
} |
@@ -117,8 +117,11 @@ public class SearchActionTest { | |||
assertThat(action.since()).isEqualTo("6.3"); | |||
assertThat(action.isPost()).isFalse(); | |||
assertThat(action.isInternal()).isFalse(); | |||
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( | |||
tuple("7.6", "The use of 'BRC' as value for parameter 'qualifiers' is deprecated")); | |||
assertThat(action.changelog()) | |||
.extracting(Change::getVersion, Change::getDescription) | |||
.containsExactlyInAnyOrder( | |||
tuple("7.6", "The use of 'BRC' as value for parameter 'qualifiers' is deprecated"), | |||
tuple("8.0", "Field 'id' from response has been removed")); | |||
assertThat(action.responseExampleAsString()).isNotEmpty(); | |||
assertThat(action.params()).hasSize(6); |
@@ -35,7 +35,6 @@ import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.junit.runner.RunWith; | |||
import org.sonar.api.measures.Metric; | |||
import org.sonar.api.server.ws.Change; | |||
import org.sonar.api.server.ws.WebService; | |||
import org.sonar.api.server.ws.WebService.Param; | |||
import org.sonar.api.utils.System2; | |||
@@ -153,12 +152,7 @@ public class SearchProjectsActionTest { | |||
assertThat(def.isPost()).isFalse(); | |||
assertThat(def.responseExampleAsString()).isNotEmpty(); | |||
assertThat(def.params().stream().map(Param::key).collect(toList())).containsOnly("organization", "filter", "facets", "s", "asc", "ps", "p", "f"); | |||
assertThat(def.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( | |||
tuple("6.4", "The 'languages' parameter accepts 'filter' to filter by language"), | |||
tuple("6.4", "The 'visibility' field is added"), | |||
tuple("6.5", "The 'filter' parameter now allows 'NO_DATA' as value for numeric metrics"), | |||
tuple("6.5", "Added the option 'analysisDate' for the 'sort' parameter"), | |||
tuple("6.5", "Value 'leakPeriodDate' is added to parameter 'f'")); | |||
assertThat(def.changelog()).hasSize(1); | |||
Param organization = def.param("organization"); | |||
assertThat(organization.isRequired()).isFalse(); | |||
@@ -235,8 +229,8 @@ public class SearchProjectsActionTest { | |||
.setParam(FACETS, COVERAGE) | |||
.executeProtobuf(SearchProjectsWsResponse.class); | |||
assertThat(protobufResult.getComponentsList()).extracting(Component::getId) | |||
.containsExactly(project1.uuid(), project2.uuid(), project3.uuid()); | |||
assertThat(protobufResult.getComponentsList()).extracting(Component::getKey) | |||
.containsExactly(project1.getDbKey(), project2.getDbKey(), project3.getDbKey()); | |||
} | |||
@Test |
@@ -55,7 +55,6 @@ import static org.sonar.db.component.SnapshotTesting.newAnalysis; | |||
import static org.sonar.test.JsonAssert.assertJson; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_BRANCH; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT_ID; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_PULL_REQUEST; | |||
public class ShowActionTest { | |||
@@ -76,29 +75,13 @@ public class ShowActionTest { | |||
assertThat(action.description()).isNotNull(); | |||
assertThat(action.responseExample()).isNotNull(); | |||
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( | |||
tuple("6.4", "Analysis date has been added to the response"), | |||
tuple("6.4", "The field 'id' is deprecated in the response"), | |||
tuple("6.4", "The 'visibility' field is added to the response"), | |||
tuple("6.5", "Leak period date is added to the response"), | |||
tuple("6.6", "'branch' is added to the response"), | |||
tuple("6.6", "'version' is added to the response"), | |||
tuple("7.6", "The use of module keys in parameter 'component' is deprecated")); | |||
assertThat(action.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("component", "componentId", "branch", "pullRequest"); | |||
WebService.Param componentId = action.param(PARAM_COMPONENT_ID); | |||
assertThat(componentId.isRequired()).isFalse(); | |||
assertThat(componentId.description()).isNotNull(); | |||
assertThat(componentId.exampleValue()).isNotNull(); | |||
assertThat(componentId.deprecatedSince()).isEqualTo("6.4"); | |||
assertThat(componentId.deprecatedKey()).isEqualTo("id"); | |||
assertThat(componentId.deprecatedKeySince()).isEqualTo("6.4"); | |||
assertThat(action.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("component", "branch", "pullRequest"); | |||
WebService.Param component = action.param(PARAM_COMPONENT); | |||
assertThat(component.isRequired()).isFalse(); | |||
assertThat(component.isRequired()).isTrue(); | |||
assertThat(component.description()).isNotNull(); | |||
assertThat(component.exampleValue()).isNotNull(); | |||
assertThat(component.deprecatedKey()).isEqualTo("key"); | |||
assertThat(component.deprecatedKeySince()).isEqualTo("6.4"); | |||
WebService.Param branch = action.param(PARAM_BRANCH); | |||
assertThat(branch.isInternal()).isTrue(); | |||
@@ -117,7 +100,7 @@ public class ShowActionTest { | |||
insertJsonExampleComponentsAndSnapshots(); | |||
String response = ws.newRequest() | |||
.setParam("id", "AVIF-FffA3Ax6PH2efPD") | |||
.setParam("component", "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl/Rule.java") | |||
.execute() | |||
.getInput(); | |||
@@ -130,7 +113,7 @@ public class ShowActionTest { | |||
insertJsonExampleComponentsAndSnapshots(); | |||
String response = ws.newRequest() | |||
.setParam("id", "AVIF-FffA3Ax6PH2efPD") | |||
.setParam(PARAM_COMPONENT, "com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl/Rule.java") | |||
.execute() | |||
.getInput(); | |||
@@ -143,21 +126,9 @@ public class ShowActionTest { | |||
db.components().insertProjectAndSnapshot(project); | |||
userSession.logIn().addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest("project-uuid", null); | |||
assertThat(response.getComponent().getId()).isEqualTo("project-uuid"); | |||
} | |||
@Test | |||
public void show_provided_project() { | |||
userSession.logIn().setRoot(); | |||
db.components().insertComponent(newPrivateProjectDto(db.organizations().insert(), "project-uuid")); | |||
ShowWsResponse response = newRequest(project.getDbKey()); | |||
ShowWsResponse response = newRequest("project-uuid", null); | |||
assertThat(response.getComponent().getId()).isEqualTo("project-uuid"); | |||
assertThat(response.getComponent().hasAnalysisDate()).isFalse(); | |||
assertThat(response.getComponent().hasLeakPeriodDate()).isFalse(); | |||
assertThat(response.getComponent().getKey()).isEqualTo(project.getDbKey()); | |||
} | |||
@Test | |||
@@ -168,7 +139,7 @@ public class ShowActionTest { | |||
ComponentDto file = db.components().insertComponent(newFileDto(directory)); | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, file.getDbKey()); | |||
ShowWsResponse response = newRequest(file.getDbKey()); | |||
assertThat(response.getComponent().getKey()).isEqualTo(file.getDbKey()); | |||
assertThat(response.getAncestorsList()).extracting(Component::getKey).containsOnly(directory.getDbKey(), module.getDbKey(), project.getDbKey()); | |||
@@ -180,7 +151,7 @@ public class ShowActionTest { | |||
db.components().insertComponent(newModuleDto(project)); | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, project.getDbKey()); | |||
ShowWsResponse response = newRequest(project.getDbKey()); | |||
assertThat(response.getComponent().getKey()).isEqualTo(project.getDbKey()); | |||
assertThat(response.getAncestorsList()).isEmpty(); | |||
@@ -195,7 +166,7 @@ public class ShowActionTest { | |||
newAnalysis(project).setCreatedAt(3_000_000_000L).setLast(true)); | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, project.getDbKey()); | |||
ShowWsResponse response = newRequest(project.getDbKey()); | |||
assertThat(response.getComponent().getAnalysisDate()).isNotEmpty().isEqualTo(formatDateTime(new Date(3_000_000_000L))); | |||
} | |||
@@ -210,7 +181,7 @@ public class ShowActionTest { | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, project.getDbKey()); | |||
ShowWsResponse response = newRequest(project.getDbKey()); | |||
assertThat(response.getComponent().getLeakPeriodDate()).isNotEmpty().isEqualTo(formatDateTime(new Date(3_000_000_000L))); | |||
} | |||
@@ -224,7 +195,7 @@ public class ShowActionTest { | |||
ComponentDto file = db.components().insertComponent(newFileDto(directory)); | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, file.getDbKey()); | |||
ShowWsResponse response = newRequest(file.getDbKey()); | |||
String expectedDate = formatDateTime(new Date(3_000_000_000L)); | |||
assertThat(response.getAncestorsList()).extracting(Component::getAnalysisDate) | |||
@@ -236,7 +207,7 @@ public class ShowActionTest { | |||
userSession.logIn().setRoot(); | |||
ComponentDto privateProject = db.components().insertPrivateProject(); | |||
ShowWsResponse result = newRequest(null, privateProject.getDbKey()); | |||
ShowWsResponse result = newRequest(privateProject.getDbKey()); | |||
assertThat(result.getComponent().hasVisibility()).isTrue(); | |||
assertThat(result.getComponent().getVisibility()).isEqualTo("private"); | |||
} | |||
@@ -246,7 +217,7 @@ public class ShowActionTest { | |||
userSession.logIn().setRoot(); | |||
ComponentDto publicProject = db.components().insertPublicProject(); | |||
ShowWsResponse result = newRequest(null, publicProject.getDbKey()); | |||
ShowWsResponse result = newRequest(publicProject.getDbKey()); | |||
assertThat(result.getComponent().hasVisibility()).isTrue(); | |||
assertThat(result.getComponent().getVisibility()).isEqualTo("public"); | |||
} | |||
@@ -256,7 +227,7 @@ public class ShowActionTest { | |||
userSession.logIn().setRoot(); | |||
ComponentDto view = db.components().insertView(); | |||
ShowWsResponse result = newRequest(null, view.getDbKey()); | |||
ShowWsResponse result = newRequest(view.getDbKey()); | |||
assertThat(result.getComponent().hasVisibility()).isTrue(); | |||
} | |||
@@ -266,7 +237,7 @@ public class ShowActionTest { | |||
ComponentDto privateProject = db.components().insertPrivateProject(); | |||
ComponentDto module = db.components().insertComponent(newModuleDto(privateProject)); | |||
ShowWsResponse result = newRequest(null, module.getDbKey()); | |||
ShowWsResponse result = newRequest(module.getDbKey()); | |||
assertThat(result.getComponent().hasVisibility()).isFalse(); | |||
} | |||
@@ -279,7 +250,7 @@ public class ShowActionTest { | |||
db.components().insertSnapshot(project, s -> s.setProjectVersion("1.1")); | |||
userSession.addProjectPermission(USER, project); | |||
ShowWsResponse response = newRequest(null, file.getDbKey()); | |||
ShowWsResponse response = newRequest(file.getDbKey()); | |||
assertThat(response.getComponent().getVersion()).isEqualTo("1.1"); | |||
assertThat(response.getAncestorsList()) | |||
@@ -344,17 +315,18 @@ public class ShowActionTest { | |||
userSession.logIn(); | |||
expectedException.expect(ForbiddenException.class); | |||
db.components().insertProjectAndSnapshot(newPrivateProjectDto(db.organizations().insert(), "project-uuid")); | |||
ComponentDto componentDto = newPrivateProjectDto(db.organizations().insert(), "project-uuid"); | |||
db.components().insertProjectAndSnapshot(componentDto); | |||
newRequest("project-uuid", null); | |||
newRequest(componentDto.getDbKey()); | |||
} | |||
@Test | |||
public void fail_if_component_does_not_exist() { | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage("Component id 'unknown-uuid' not found"); | |||
expectedException.expectMessage("Component key 'unknown-key' not found"); | |||
newRequest("unknown-uuid", null); | |||
newRequest("unknown-key"); | |||
} | |||
@Test | |||
@@ -366,22 +338,7 @@ public class ShowActionTest { | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage("Component key 'file-key' not found"); | |||
newRequest(null, "file-key"); | |||
} | |||
@Test | |||
public void fail_when_componentId_and_branch_params_are_used_together() { | |||
ComponentDto project = db.components().insertPrivateProject(); | |||
userSession.addProjectPermission(UserRole.USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch")); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Parameter 'componentId' cannot be used at the same time as 'branch' or 'pullRequest'"); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, branch.uuid()) | |||
.setParam(PARAM_BRANCH, "my_branch") | |||
.execute(); | |||
newRequest("file-key"); | |||
} | |||
@Test | |||
@@ -414,25 +371,8 @@ public class ShowActionTest { | |||
.executeProtobuf(ShowWsResponse.class); | |||
} | |||
@Test | |||
public void fail_when_using_branch_uuid() { | |||
ComponentDto project = db.components().insertMainBranch(); | |||
userSession.addProjectPermission(UserRole.USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project); | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage(String.format("Component id '%s' not found", branch.uuid())); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, branch.uuid()) | |||
.executeProtobuf(ShowWsResponse.class); | |||
} | |||
private ShowWsResponse newRequest(@Nullable String uuid, @Nullable String key) { | |||
private ShowWsResponse newRequest(@Nullable String key) { | |||
TestRequest request = ws.newRequest(); | |||
if (uuid != null) { | |||
request.setParam(PARAM_COMPONENT_ID, uuid); | |||
} | |||
if (key != null) { | |||
request.setParam(PARAM_COMPONENT, key); | |||
} |
@@ -120,8 +120,7 @@ public class SuggestionsActionTest { | |||
PARAM_QUERY, | |||
PARAM_RECENTLY_BROWSED); | |||
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( | |||
tuple("7.6", "The use of 'BRC' as value for parameter 'more' is deprecated"), | |||
tuple("6.4", "Parameter 's' is optional")); | |||
tuple("7.6", "The use of 'BRC' as value for parameter 'more' is deprecated")); | |||
WebService.Param recentlyBrowsed = action.param(PARAM_RECENTLY_BROWSED); | |||
assertThat(recentlyBrowsed.since()).isEqualTo("6.4"); |
@@ -72,7 +72,6 @@ import static org.sonar.db.component.ComponentTesting.newSubView; | |||
import static org.sonar.db.component.ComponentTesting.newView; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_BRANCH; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_COMPONENT_ID; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_PULL_REQUEST; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_QUALIFIERS; | |||
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_STRATEGY; | |||
@@ -101,25 +100,14 @@ public class TreeActionTest { | |||
assertThat(action.responseExample()).isNotNull(); | |||
assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( | |||
tuple("7.6", "The use of 'BRC' as value for parameter 'qualifiers' is deprecated"), | |||
tuple("7.6", "The use of module keys in parameter 'component' is deprecated"), | |||
tuple("6.4", "The field 'id' is deprecated in the response")); | |||
assertThat(action.params()).extracting(Param::key).containsExactlyInAnyOrder("component", "componentId", "branch", "pullRequest", "qualifiers", "strategy", | |||
tuple("7.6", "The use of module keys in parameter 'component' is deprecated")); | |||
assertThat(action.params()).extracting(Param::key).containsExactlyInAnyOrder("component", "branch", "pullRequest", "qualifiers", "strategy", | |||
"q", "s", "p", "asc", "ps"); | |||
Param componentId = action.param(PARAM_COMPONENT_ID); | |||
assertThat(componentId.isRequired()).isFalse(); | |||
assertThat(componentId.description()).isNotNull(); | |||
assertThat(componentId.exampleValue()).isNotNull(); | |||
assertThat(componentId.deprecatedSince()).isEqualTo("6.4"); | |||
assertThat(componentId.deprecatedKey()).isEqualTo("baseComponentId"); | |||
assertThat(componentId.deprecatedKeySince()).isEqualTo("6.4"); | |||
Param component = action.param(PARAM_COMPONENT); | |||
assertThat(component.isRequired()).isFalse(); | |||
assertThat(component.isRequired()).isTrue(); | |||
assertThat(component.description()).isNotNull(); | |||
assertThat(component.exampleValue()).isNotNull(); | |||
assertThat(component.deprecatedKey()).isEqualTo("baseComponentKey"); | |||
assertThat(component.deprecatedKeySince()).isEqualTo("6.4"); | |||
Param branch = action.param(PARAM_BRANCH); | |||
assertThat(branch.isInternal()).isTrue(); | |||
@@ -133,8 +121,9 @@ public class TreeActionTest { | |||
logInWithBrowsePermission(project); | |||
String response = ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, project.uuid()) | |||
.execute().getInput(); | |||
.setParam(PARAM_COMPONENT, project.getDbKey()) | |||
.execute() | |||
.getInput(); | |||
JsonAssert.assertJson(response) | |||
.withStrictArrayOrder() | |||
@@ -159,7 +148,7 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "children") | |||
.setParam(PARAM_COMPONENT_ID, "module-uuid-1") | |||
.setParam(PARAM_COMPONENT, module.getDbKey()) | |||
.setParam(Param.PAGE, "2") | |||
.setParam(Param.PAGE_SIZE, "3") | |||
.setParam(Param.TEXT_QUERY, "file-name") | |||
@@ -168,7 +157,7 @@ public class TreeActionTest { | |||
assertThat(response.getComponentsCount()).isEqualTo(3); | |||
assertThat(response.getPaging().getTotal()).isEqualTo(8); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("file-uuid-6", "file-uuid-5", "file-uuid-4"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("file-key-6", "file-key-5", "file-key-4"); | |||
} | |||
@Test | |||
@@ -189,7 +178,7 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "all") | |||
.setParam(PARAM_COMPONENT_ID, "module-uuid-1") | |||
.setParam(PARAM_COMPONENT, module.getDbKey()) | |||
.setParam(Param.PAGE, "2") | |||
.setParam(Param.PAGE_SIZE, "3") | |||
.setParam(Param.TEXT_QUERY, "file-name") | |||
@@ -198,7 +187,7 @@ public class TreeActionTest { | |||
assertThat(response.getComponentsCount()).isEqualTo(3); | |||
assertThat(response.getPaging().getTotal()).isEqualTo(9); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("file-uuid-4", "file-uuid-5", "file-uuid-6"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("file-key-4", "file-key-5", "file-key-6"); | |||
} | |||
@Test | |||
@@ -214,9 +203,9 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "all") | |||
.setParam(PARAM_QUALIFIERS, FILE) | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid").executeProtobuf(TreeWsResponse.class); | |||
.setParam(PARAM_COMPONENT, project.getDbKey()).executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("file-uuid-1", "file-uuid-2"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("file-key-1", "file-key-2"); | |||
} | |||
@Test | |||
@@ -235,12 +224,12 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "leaves") | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, project.getDbKey()) | |||
.setParam(PARAM_QUALIFIERS, FILE).executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getComponentsCount()).isEqualTo(3); | |||
assertThat(response.getPaging().getTotal()).isEqualTo(3); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("file-uuid-1", "file-uuid-2", "file-uuid-3"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("file-key-1", "file-key-2", "file-key-3"); | |||
} | |||
@Test | |||
@@ -258,9 +247,9 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "all") | |||
.setParam(Param.SORT, "qualifier, name") | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid").executeProtobuf(TreeWsResponse.class); | |||
.setParam(PARAM_COMPONENT, project.getDbKey()).executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("module-uuid-1", "path/directory/", "file-uuid-1", "file-uuid-2"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("MODULE_KEY_module-uuid-1", "KEY_project-uuid:directory-uuid-1", "file-key-1", "file-key-2"); | |||
} | |||
@Test | |||
@@ -278,10 +267,10 @@ public class TreeActionTest { | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_STRATEGY, "children") | |||
.setParam(PARAM_COMPONENT_ID, "view-uuid") | |||
.setParam(PARAM_COMPONENT, view.getDbKey()) | |||
.setParam(Param.TEXT_QUERY, "name").executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getComponentsList()).extracting("id").containsExactly("project-uuid-1-copy", "sub-view-uuid"); | |||
assertThat(response.getComponentsList()).extracting("key").containsExactly("KEY_view-uuidproject-key-1", "sub-view-key"); | |||
assertThat(response.getComponentsList()).extracting("refId").containsExactly("project-uuid-1", ""); | |||
assertThat(response.getComponentsList()).extracting("refKey").containsExactly("project-key-1", ""); | |||
} | |||
@@ -315,9 +304,9 @@ public class TreeActionTest { | |||
logInWithBrowsePermission(project); | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid").executeProtobuf(TreeWsResponse.class); | |||
.setParam(PARAM_COMPONENT, project.getDbKey()).executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getBaseComponent().getId()).isEqualTo("project-uuid"); | |||
assertThat(response.getBaseComponent().getKey()).isEqualTo(project.getDbKey()); | |||
assertThat(response.getComponentsList()).isEmpty(); | |||
assertThat(response.getPaging().getTotal()).isEqualTo(0); | |||
assertThat(response.getPaging().getPageSize()).isEqualTo(100); | |||
@@ -330,16 +319,18 @@ public class TreeActionTest { | |||
db.components().insertProjectAndSnapshot(project); | |||
ComponentDto view = newView(db.getDefaultOrganization(), "view-uuid"); | |||
db.components().insertViewAndSnapshot(view); | |||
db.components().insertComponent(newProjectCopy("project-copy-uuid", project, view)); | |||
ComponentDto projectCopy = db.components().insertComponent(newProjectCopy("project-copy-uuid", project, view)); | |||
userSession.logIn() | |||
.registerComponents(project, view); | |||
TreeWsResponse response = ws.newRequest().setParam(PARAM_COMPONENT_ID, view.uuid()).executeProtobuf(TreeWsResponse.class); | |||
TreeWsResponse response = ws.newRequest() | |||
.setParam(PARAM_COMPONENT, view.getDbKey()) | |||
.executeProtobuf(TreeWsResponse.class); | |||
assertThat(response.getBaseComponent().getId()).isEqualTo(view.uuid()); | |||
assertThat(response.getBaseComponent().getKey()).isEqualTo(view.getDbKey()); | |||
assertThat(response.getComponentsCount()).isEqualTo(1); | |||
assertThat(response.getComponents(0).getId()).isEqualTo("project-copy-uuid"); | |||
assertThat(response.getComponents(0).getRefId()).isEqualTo("project-uuid"); | |||
assertThat(response.getComponents(0).getKey()).isEqualTo(projectCopy.getDbKey()); | |||
assertThat(response.getComponents(0).getRefKey()).isEqualTo(project.getDbKey()); | |||
} | |||
@Test | |||
@@ -403,16 +394,16 @@ public class TreeActionTest { | |||
} | |||
@Test | |||
public void fail_when_using_branch_uuid() { | |||
public void fail_when_using_branch_key() { | |||
ComponentDto project = db.components().insertMainBranch(); | |||
userSession.addProjectPermission(UserRole.USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project); | |||
expectedException.expect(NotFoundException.class); | |||
expectedException.expectMessage(String.format("Component id '%s' not found", branch.uuid())); | |||
expectedException.expectMessage(String.format("Component key '%s' not found", branch.getDbKey())); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, branch.uuid()) | |||
.setParam(PARAM_COMPONENT, branch.getDbKey()) | |||
.executeProtobuf(Components.ShowWsResponse.class); | |||
} | |||
@@ -426,7 +417,7 @@ public class TreeActionTest { | |||
expectedException.expect(ForbiddenException.class); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, project.getDbKey()) | |||
.execute(); | |||
} | |||
@@ -434,11 +425,11 @@ public class TreeActionTest { | |||
public void fail_when_page_size_above_500() { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("'ps' value (501) must be less than 500"); | |||
db.components().insertComponent(newPrivateProjectDto(db.getDefaultOrganization(), "project-uuid")); | |||
ComponentDto project = db.components().insertComponent(newPrivateProjectDto(db.getDefaultOrganization(), "project-uuid")); | |||
db.commit(); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, project.getDbKey()) | |||
.setParam(Param.PAGE_SIZE, "501") | |||
.execute(); | |||
} | |||
@@ -447,11 +438,11 @@ public class TreeActionTest { | |||
public void fail_when_search_query_has_less_than_3_characters() { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("'q' length (2) is shorter than the minimum authorized (3)"); | |||
db.components().insertComponent(newPrivateProjectDto(db.organizations().insert(), "project-uuid")); | |||
ComponentDto project = db.components().insertComponent(newPrivateProjectDto(db.organizations().insert(), "project-uuid")); | |||
db.commit(); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, project.getDbKey()) | |||
.setParam(Param.TEXT_QUERY, "fi") | |||
.execute(); | |||
} | |||
@@ -463,7 +454,7 @@ public class TreeActionTest { | |||
db.commit(); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, "project-key") | |||
.setParam(Param.SORT, "unknown-sort") | |||
.execute(); | |||
} | |||
@@ -475,7 +466,7 @@ public class TreeActionTest { | |||
db.commit(); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, "project-key") | |||
.setParam(PARAM_STRATEGY, "unknown-strategy") | |||
.execute(); | |||
} | |||
@@ -485,7 +476,7 @@ public class TreeActionTest { | |||
expectedException.expect(NotFoundException.class); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, "project-uuid") | |||
.setParam(PARAM_COMPONENT, "project-key") | |||
.execute(); | |||
} | |||
@@ -506,26 +497,11 @@ public class TreeActionTest { | |||
@Test | |||
public void fail_when_no_base_component_parameter() { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Either 'componentId' or 'component' must be provided"); | |||
expectedException.expectMessage("The 'component' parameter is missing"); | |||
ws.newRequest().execute(); | |||
} | |||
@Test | |||
public void fail_when_componentId_and_branch_params_are_used_together() { | |||
ComponentDto project = db.components().insertPrivateProject(); | |||
userSession.addProjectPermission(UserRole.USER, project); | |||
ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch")); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("Parameter 'componentId' cannot be used at the same time as 'branch' or 'pullRequest'"); | |||
ws.newRequest() | |||
.setParam(PARAM_COMPONENT_ID, branch.uuid()) | |||
.setParam(PARAM_BRANCH, "my_branch") | |||
.execute(); | |||
} | |||
@Test | |||
public void fail_if_branch_does_not_exist() { | |||
ComponentDto project = db.components().insertPrivateProject(); | |||
@@ -562,9 +538,10 @@ public class TreeActionTest { | |||
JsonParser jsonParser = new JsonParser(); | |||
JsonElement jsonTree = jsonParser.parse(IOUtils.toString(getClass().getResource("tree-example.json"), UTF_8)); | |||
JsonArray components = jsonTree.getAsJsonObject().getAsJsonArray("components"); | |||
for (JsonElement componentAsJsonElement : components) { | |||
for (int i = 0; i < components.size(); i++) { | |||
JsonElement componentAsJsonElement = components.get(i); | |||
JsonObject componentAsJsonObject = componentAsJsonElement.getAsJsonObject(); | |||
String uuid = getJsonField(componentAsJsonObject, "id"); | |||
String uuid = String.format("child-component-uuid-%d", i); | |||
db.components().insertComponent(newChildComponent(uuid, project, project) | |||
.setDbKey(getJsonField(componentAsJsonObject, "key")) | |||
.setName(getJsonField(componentAsJsonObject, "name")) |
@@ -671,7 +671,7 @@ public class SearchActionTest { | |||
indexIssues(); | |||
TestResponse response = ws.newRequest() | |||
.setParam("sort", IssueQuery.SORT_BY_UPDATE_DATE) | |||
.setParam("s", IssueQuery.SORT_BY_UPDATE_DATE) | |||
.setParam("asc", "false") | |||
.execute(); | |||
@@ -470,7 +470,6 @@ public interface WebService extends Definable<WebService.Context> { | |||
return createParam(Param.SORT) | |||
.setDescription("Sort field") | |||
.setDeprecatedKey("sort", "5.4") | |||
.setDefaultValue(defaultValue) | |||
.setPossibleValues(possibleValues); | |||
} |
@@ -36,7 +36,6 @@ public class ComponentsWsParameters { | |||
public static final String PARAM_LANGUAGE = "language"; | |||
public static final String PARAM_STRATEGY = "strategy"; | |||
public static final String PARAM_FILTER = "filter"; | |||
public static final String PARAM_COMPONENT_ID = "componentId"; | |||
public static final String PARAM_COMPONENT = "component"; | |||
public static final String PARAM_BRANCH = "branch"; | |||
public static final String PARAM_PULL_REQUEST = "pullRequest"; |
@@ -99,7 +99,6 @@ message ProvisionedWsResponse { | |||
message Component { | |||
optional string organization = 12; | |||
optional string id = 1; | |||
optional string key = 2; | |||
optional string refId = 3; | |||
optional string refKey = 4; |