Browse Source

Generate client for api/rules

tags/7.0-RC1
Simon Brandhof 6 years ago
parent
commit
683a197994
21 changed files with 142 additions and 848 deletions
  1. 5
    5
      server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java
  2. 24
    24
      server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapper.java
  3. 16
    16
      server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java
  4. 1
    1
      server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java
  5. 39
    39
      server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java
  6. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java
  7. 16
    16
      server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java
  8. 5
    5
      server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java
  9. 1
    2
      server/sonar-server/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java
  10. 1
    1
      sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java
  11. 1
    1
      sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java
  12. 0
    131
      sonar-ws/src/main/java/org/sonarqube/ws/client/rule/CreateWsRequest.java
  13. 0
    99
      sonar-ws/src/main/java/org/sonarqube/ws/client/rule/RulesService.java
  14. 0
    269
      sonar-ws/src/main/java/org/sonarqube/ws/client/rule/SearchWsRequest.java
  15. 0
    24
      sonar-ws/src/main/java/org/sonarqube/ws/client/rule/package-info.java
  16. 0
    184
      sonar-ws/src/test/java/org/sonarqube/ws/client/rule/RulesServiceTest.java
  17. 3
    2
      tests/src/test/java/org/sonarqube/tests/organization/OrganizationTest.java
  18. 2
    2
      tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java
  19. 7
    8
      tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java
  20. 14
    12
      tests/src/test/java/org/sonarqube/tests/rule/RuleTagsTest.java
  21. 5
    5
      tests/src/test/java/org/sonarqube/tests/rule/RulesWsTest.java

+ 5
- 5
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java View File

@@ -33,7 +33,7 @@ import org.sonarqube.ws.client.qualityprofile.ActivateRuleWsRequest;
import org.sonarqube.ws.client.qualityprofile.AddProjectRequest;
import org.sonarqube.ws.client.qualityprofile.CreateRequest;
import org.sonarqube.ws.client.qualityprofile.QualityProfilesService;
import org.sonarqube.ws.client.rule.SearchWsRequest;
import org.sonarqube.ws.client.rules.SearchRequest;

import static java.util.Arrays.asList;
import static java.util.Arrays.stream;
@@ -97,11 +97,11 @@ public class QProfileTester {
public QProfileTester assertThatNumberOfActiveRulesEqualsTo(String profileKey, int expectedActiveRules) {
try {
List<String> facetIds = asList("active_severities", "repositories", "languages", "severities", "statuses", "types");
SearchWsRequest request = new SearchWsRequest()
.setQProfile(profileKey)
.setActivation(true)
SearchRequest request = new SearchRequest()
.setQprofile(profileKey)
.setActivation("true")
.setFacets(facetIds)
.setFields(singletonList("actives"));
.setF(singletonList("actives"));
Rules.SearchResponse response = session.wsClient().rules().search(request);

// assume that expectedActiveRules fits in first page of results

+ 24
- 24
server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapper.java View File

@@ -41,30 +41,30 @@ import org.sonarqube.ws.Rules;

import static java.lang.String.format;
import static org.sonar.api.utils.DateUtils.formatDateTime;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_CREATED_AT;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_DEBT_OVERLOADED;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_DEBT_REM_FUNCTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_DEFAULT_DEBT_REM_FUNCTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_DEFAULT_REM_FUNCTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_EFFORT_TO_FIX_DESCRIPTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_GAP_DESCRIPTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_HTML_DESCRIPTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_INTERNAL_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_LANGUAGE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_LANGUAGE_NAME;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_MARKDOWN_DESCRIPTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_NAME;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_NOTE_LOGIN;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_PARAMS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_REM_FUNCTION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_REM_FUNCTION_OVERLOADED;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_REPO;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_SEVERITY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_STATUS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_SYSTEM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.FIELD_TEMPLATE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_CREATED_AT;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEBT_OVERLOADED;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEBT_REM_FUNCTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEFAULT_DEBT_REM_FUNCTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEFAULT_REM_FUNCTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_EFFORT_TO_FIX_DESCRIPTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_GAP_DESCRIPTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_HTML_DESCRIPTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_INTERNAL_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_IS_TEMPLATE;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_LANGUAGE;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_LANGUAGE_NAME;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_MARKDOWN_DESCRIPTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_NAME;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_NOTE_LOGIN;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_PARAMS;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_REM_FUNCTION;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_REM_FUNCTION_OVERLOADED;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_REPO;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_SEVERITY;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_STATUS;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_SYSTEM_TAGS;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_TAGS;
import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_TEMPLATE_KEY;

/**
* Conversion of {@link org.sonar.db.rule.RuleDto} to {@link org.sonarqube.ws.Rules.Rule}

+ 16
- 16
server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java View File

@@ -37,22 +37,22 @@ import static java.lang.String.format;
import static org.sonar.server.util.EnumUtils.toEnums;
import static org.sonar.server.ws.WsUtils.checkFound;
import static org.sonar.server.ws.WsUtils.checkFoundWithOptional;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_STATUSES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TYPES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_STATUSES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TAGS;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TYPES;

@ServerSide
public class RuleQueryFactory {

sonar-ws/src/main/java/org/sonarqube/ws/client/rule/RulesWsParameters.java → server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java View File

@@ -17,7 +17,7 @@
* 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.sonarqube.ws.client.rule;
package org.sonar.server.rule.ws;

import com.google.common.collect.ImmutableSet;
import java.util.Set;

+ 39
- 39
server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java View File

@@ -58,7 +58,7 @@ import org.sonar.server.rule.index.RuleIndexDefinition;
import org.sonar.server.rule.index.RuleQuery;
import org.sonarqube.ws.Common;
import org.sonarqube.ws.Rules.SearchResponse;
import org.sonarqube.ws.client.rule.SearchWsRequest;
import org.sonarqube.ws.client.rules.SearchRequest;

import static java.lang.String.format;
import static org.sonar.api.server.ws.WebService.Param.ASCENDING;
@@ -80,24 +80,24 @@ import static org.sonar.server.rule.index.RuleIndex.FACET_SEVERITIES;
import static org.sonar.server.rule.index.RuleIndex.FACET_STATUSES;
import static org.sonar.server.rule.index.RuleIndex.FACET_TAGS;
import static org.sonar.server.rule.index.RuleIndex.FACET_TYPES;
import static org.sonar.server.rule.ws.RulesWsParameters.OPTIONAL_FIELDS;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_STATUSES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TAGS;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TYPES;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
import static org.sonarqube.ws.client.rule.RulesWsParameters.OPTIONAL_FIELDS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_STATUSES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TYPES;

public class SearchAction implements RulesWsAction {
public static final String ACTION = "search";
@@ -156,7 +156,7 @@ public class SearchAction implements RulesWsAction {
@Override
public void handle(Request request, Response response) throws Exception {
try (DbSession dbSession = dbClient.openSession(false)) {
SearchWsRequest searchWsRequest = toSearchWsRequest(request);
SearchRequest searchWsRequest = toSearchWsRequest(request);
SearchOptions context = buildSearchOptions(searchWsRequest);
RuleQuery query = ruleQueryFactory.createRuleQuery(dbSession, request);
SearchResult searchResult = doSearch(dbSession, query, context);
@@ -165,7 +165,7 @@ public class SearchAction implements RulesWsAction {
}
}

private SearchResponse buildResponse(DbSession dbSession, SearchWsRequest request, SearchOptions context, SearchResult result, RuleQuery query) {
private SearchResponse buildResponse(DbSession dbSession, SearchRequest request, SearchOptions context, SearchResult result, RuleQuery query) {
SearchResponse.Builder responseBuilder = SearchResponse.newBuilder();
writeStatistics(responseBuilder, result, context);
doContextResponse(dbSession, request, result, responseBuilder, query);
@@ -321,7 +321,7 @@ public class SearchAction implements RulesWsAction {
}
}

private static SearchOptions buildSearchOptions(SearchWsRequest request) {
private static SearchOptions buildSearchOptions(SearchRequest request) {
SearchOptions context = loadCommonContext(request);
SearchOptions searchOptions = new SearchOptions()
.setLimit(context.getLimit())
@@ -334,16 +334,16 @@ public class SearchAction implements RulesWsAction {
return searchOptions;
}

private static SearchOptions loadCommonContext(SearchWsRequest request) {
int pageSize = request.getPageSize();
SearchOptions context = new SearchOptions().addFields(request.getFields());
private static SearchOptions loadCommonContext(SearchRequest request) {
int pageSize = Integer.parseInt(request.getPs());
SearchOptions context = new SearchOptions().addFields(request.getF());
if (request.getFacets() != null) {
context.addFacets(request.getFacets());
}
if (pageSize < 1) {
context.setPage(request.getPage(), 0).setLimit(MAX_LIMIT);
context.setPage(Integer.parseInt(request.getP()), 0).setLimit(MAX_LIMIT);
} else {
context.setPage(request.getPage(), pageSize);
context.setPage(Integer.parseInt(request.getP()), pageSize);
}
return context;
}
@@ -376,7 +376,7 @@ public class SearchAction implements RulesWsAction {
.setTotal(result.getTotal());
}

private void doContextResponse(DbSession dbSession, SearchWsRequest request, SearchResult result, SearchResponse.Builder response, RuleQuery query) {
private void doContextResponse(DbSession dbSession, SearchRequest request, SearchResult result, SearchResponse.Builder response, RuleQuery query) {
SearchOptions contextForResponse = loadCommonContext(request);
writeRules(response, result, contextForResponse);
if (contextForResponse.getFields().contains("actives")) {
@@ -384,7 +384,7 @@ public class SearchAction implements RulesWsAction {
}
}

private static void writeFacets(SearchResponse.Builder response, SearchWsRequest request, SearchOptions context, SearchResult results) {
private static void writeFacets(SearchResponse.Builder response, SearchRequest request, SearchOptions context, SearchResult results) {
addMandatoryFacetValues(results, FACET_LANGUAGES, request.getLanguages());
addMandatoryFacetValues(results, FACET_REPOSITORIES, request.getRepositories());
addMandatoryFacetValues(results, FACET_STATUSES, ALL_STATUSES_EXCEPT_REMOVED);
@@ -447,24 +447,24 @@ public class SearchAction implements RulesWsAction {
}
}

private static SearchWsRequest toSearchWsRequest(Request request) {
return new SearchWsRequest()
.setActivation(request.paramAsBoolean(PARAM_ACTIVATION))
private static SearchRequest toSearchWsRequest(Request request) {
return new SearchRequest()
.setActivation("" + request.paramAsBoolean(PARAM_ACTIVATION))
.setActiveSeverities(request.paramAsStrings(PARAM_ACTIVE_SEVERITIES))
.setAsc(request.mandatoryParamAsBoolean(ASCENDING))
.setAsc("" + request.mandatoryParamAsBoolean(ASCENDING))
.setAvailableSince(request.param(PARAM_AVAILABLE_SINCE))
.setFields(request.paramAsStrings(FIELDS))
.setF(request.paramAsStrings(FIELDS))
.setFacets(request.paramAsStrings(FACETS))
.setInheritance(request.paramAsStrings(PARAM_INHERITANCE))
.setIsTemplate(request.paramAsBoolean(PARAM_IS_TEMPLATE))
.setIsTemplate("" + request.paramAsBoolean(PARAM_IS_TEMPLATE))
.setLanguages(request.paramAsStrings(PARAM_LANGUAGES))
.setPage(request.mandatoryParamAsInt(PAGE))
.setPageSize(request.mandatoryParamAsInt(PAGE_SIZE))
.setQuery(request.param(TEXT_QUERY))
.setQProfile(request.param(PARAM_QPROFILE))
.setP("" + request.mandatoryParamAsInt(PAGE))
.setPs("" + request.mandatoryParamAsInt(PAGE_SIZE))
.setQ(request.param(TEXT_QUERY))
.setQprofile(request.param(PARAM_QPROFILE))
.setRepositories(request.paramAsStrings(PARAM_REPOSITORIES))
.setRuleKey(request.param(PARAM_RULE_KEY))
.setSort(request.param(SORT))
.setS(request.param(SORT))
.setSeverities(request.paramAsStrings(PARAM_SEVERITIES))
.setStatuses(request.paramAsStrings(PARAM_STATUSES))
.setTags(request.paramAsStrings(PARAM_TAGS))

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java View File

@@ -69,8 +69,8 @@ import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_SEVERITY;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_KEY;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_SEVERITY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;

public class QProfilesWsMediumTest {


+ 16
- 16
server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java View File

@@ -52,22 +52,22 @@ import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY;
import static org.sonar.db.qualityprofile.ActiveRuleDto.INHERITED;
import static org.sonar.db.qualityprofile.ActiveRuleDto.OVERRIDES;
import static org.sonar.server.rule.ws.SearchAction.defineRuleSearchParameters;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_STATUSES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TYPES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_STATUSES;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TAGS;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TYPES;

public class RuleQueryFactoryTest {


+ 5
- 5
server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java View File

@@ -84,11 +84,11 @@ import static org.mockito.Mockito.mock;
import static org.sonar.api.rule.Severity.BLOCKER;
import static org.sonar.db.rule.RuleTesting.setSystemTags;
import static org.sonar.db.rule.RuleTesting.setTags;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE;
import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_RULE_KEY;

public class SearchActionTest {


+ 1
- 2
server/sonar-server/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java View File

@@ -28,7 +28,6 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Encryption;
import org.sonar.api.config.Settings;
import org.sonar.api.config.internal.MapSettings;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.exceptions.BadRequestException;
@@ -39,8 +38,8 @@ import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Settings.EncryptWsResponse;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.server.setting.ws.SettingsWsParameters.PARAM_VALUE;
import static org.sonar.test.JsonAssert.assertJson;
import static org.sonarqube.ws.client.settings.SettingsWsParameters.PARAM_VALUE;

public class EncryptActionTest {
@Rule

+ 1
- 1
sonar-ws/src/main/java/org/sonarqube/ws/client/DefaultWsClient.java View File

@@ -34,7 +34,7 @@ import org.sonarqube.ws.client.projectlinks.ProjectLinksService;
import org.sonarqube.ws.client.qualitygates.QualitygatesService;
import org.sonarqube.ws.client.qualityprofile.QualityProfilesService;
import org.sonarqube.ws.client.roots.RootsService;
import org.sonarqube.ws.client.rule.RulesService;
import org.sonarqube.ws.client.rules.RulesService;
import org.sonarqube.ws.client.settings.SettingsService;
import org.sonarqube.ws.client.system.SystemService;
import org.sonarqube.ws.client.user.UsersService;

+ 1
- 1
sonar-ws/src/main/java/org/sonarqube/ws/client/WsClient.java View File

@@ -34,7 +34,7 @@ import org.sonarqube.ws.client.projectlinks.ProjectLinksService;
import org.sonarqube.ws.client.qualitygates.QualitygatesService;
import org.sonarqube.ws.client.qualityprofile.QualityProfilesService;
import org.sonarqube.ws.client.roots.RootsService;
import org.sonarqube.ws.client.rule.RulesService;
import org.sonarqube.ws.client.rules.RulesService;
import org.sonarqube.ws.client.settings.SettingsService;
import org.sonarqube.ws.client.system.SystemService;
import org.sonarqube.ws.client.user.UsersService;

+ 0
- 131
sonar-ws/src/main/java/org/sonarqube/ws/client/rule/CreateWsRequest.java View File

@@ -1,131 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2017 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.sonarqube.ws.client.rule;

public class CreateWsRequest {

private String customKey;
private String markdownDescription;
private String name;
private String params;
private Boolean preventReactivation;
private String severity;
private String status;
private String templateKey;

private CreateWsRequest(Builder builder) {
this.customKey = builder.customKey;
this.markdownDescription = builder.markdownDescription;
this.name = builder.name;
this.params = builder.params;
this.preventReactivation = builder.preventReactivation;
this.severity = builder.severity;
this.status = builder.status;
this.templateKey = builder.templateKey;
}

public String getCustomKey() {
return customKey;
}

public String getMarkdownDescription() {
return markdownDescription;
}

public String getName() {
return name;
}

public String getParams() {
return params;
}

public Boolean getPreventReactivation() {
return preventReactivation;
}

public String getSeverity() {
return severity;
}

public String getStatus() {
return status;
}

public String getTemplateKey() {
return templateKey;
}

public static class Builder {
private String customKey;
private String markdownDescription;
private String name;
private String params;
private Boolean preventReactivation;
private String severity;
private String status;
private String templateKey;

public Builder setCustomKey(String customKey) {
this.customKey = customKey;
return this;
}

public Builder setMarkdownDescription(String markdownDescription) {
this.markdownDescription = markdownDescription;
return this;
}

public Builder setName(String name) {
this.name = name;
return this;
}

public Builder setParams(String params) {
this.params = params;
return this;
}

public Builder setPreventReactivation(Boolean preventReactivation) {
this.preventReactivation = preventReactivation;
return this;
}

public Builder setSeverity(String severity) {
this.severity = severity;
return this;
}

public Builder setStatus(String status) {
this.status = status;
return this;
}

public Builder setTemplateKey(String templateKey) {
this.templateKey = templateKey;
return this;
}

public CreateWsRequest build() {
return new CreateWsRequest(this);
}
}

}

+ 0
- 99
sonar-ws/src/main/java/org/sonarqube/ws/client/rule/RulesService.java View File

@@ -1,99 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2017 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.sonarqube.ws.client.rule;

import javax.annotation.Nullable;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.Rules.SearchResponse;
import org.sonarqube.ws.client.BaseService;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.PostRequest;
import org.sonarqube.ws.client.WsConnector;

import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_STATUSES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TYPES;

public class RulesService extends BaseService {

public RulesService(WsConnector wsConnector) {
super(wsConnector, "api/rules");
}

public SearchResponse search(SearchWsRequest request) {
return call(
new GetRequest(path("search"))
.setParam(PARAM_ACTIVATION, request.getActivation())
.setParam(PARAM_ACTIVE_SEVERITIES, inlineMultipleParamValue(request.getActiveSeverities()))
.setParam("asc", request.getAsc())
.setParam(PARAM_AVAILABLE_SINCE, request.getAvailableSince())
.setParam("f", inlineMultipleParamValue(request.getFields()))
.setParam("facets", inlineMultipleParamValue(request.getFacets()))
.setParam(PARAM_INHERITANCE, inlineMultipleParamValue(request.getInheritance()))
.setParam(PARAM_IS_TEMPLATE, request.getIsTemplate())
.setParam(PARAM_LANGUAGES, inlineMultipleParamValue(request.getLanguages()))
.setParam("p", request.getPage())
.setParam("ps", request.getPageSize())
.setParam("q", request.getQuery())
.setParam(PARAM_QPROFILE, request.getQProfile())
.setParam(PARAM_COMPARE_TO_PROFILE, request.getCompareToProfile())
.setParam(PARAM_REPOSITORIES, inlineMultipleParamValue(request.getRepositories()))
.setParam(PARAM_RULE_KEY, request.getRuleKey())
.setParam("s", request.getSort())
.setParam(PARAM_SEVERITIES, inlineMultipleParamValue(request.getSeverities()))
.setParam(PARAM_STATUSES, inlineMultipleParamValue(request.getStatuses()))
.setParam(PARAM_TAGS, inlineMultipleParamValue(request.getTags()))
.setParam(PARAM_TEMPLATE_KEY, request.getTemplateKey())
.setParam(PARAM_TYPES, inlineMultipleParamValue(request.getTypes())),
SearchResponse.parser());
}

public Rules.ShowResponse show(@Nullable String organization, String key) {
GetRequest request = new GetRequest(path("show"))
.setParam("organization", organization)
.setParam("key", key);
return call(request, Rules.ShowResponse.parser());
}

public void create(CreateWsRequest request) {
PostRequest httpRequest = new PostRequest(path("create"));
httpRequest.setParam("custom_key", request.getCustomKey());
httpRequest.setParam("markdown_description", request.getMarkdownDescription());
httpRequest.setParam("name", request.getName());
httpRequest.setParam("params", request.getParams());
httpRequest.setParam("prevent_reactivation", request.getPreventReactivation());
httpRequest.setParam("severity", request.getSeverity());
httpRequest.setParam("status", request.getStatus());
httpRequest.setParam("template_key", request.getTemplateKey());
call(httpRequest);
}
}

+ 0
- 269
sonar-ws/src/main/java/org/sonarqube/ws/client/rule/SearchWsRequest.java View File

@@ -1,269 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2017 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.sonarqube.ws.client.rule;

import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

public class SearchWsRequest {
private Boolean activation;
private List<String> activeSeverities;
private Boolean asc;
private String availableSince;
private List<String> fields;
private List<String> facets;
private List<String> inheritance;
private Boolean isTemplate;
private List<String> languages;
private Integer page;
private Integer pageSize;
private String query;
private String qProfile;
private String compareToProfile;
private List<String> repositories;
private String ruleKey;
private String sort;
private List<String> severities;
private List<String> statuses;
private List<String> tags;
private String templateKey;
private List<String> types;

@CheckForNull
public Boolean getActivation() {
return activation;
}

public SearchWsRequest setActivation(@Nullable Boolean activation) {
this.activation = activation;
return this;
}

@CheckForNull
public List<String> getActiveSeverities() {
return activeSeverities;
}

public SearchWsRequest setActiveSeverities(@Nullable List<String> activeSeverities) {
this.activeSeverities = activeSeverities;
return this;
}

@CheckForNull
public Boolean getAsc() {
return asc;
}

public SearchWsRequest setAsc(Boolean asc) {
this.asc = asc;
return this;
}

@CheckForNull
public String getAvailableSince() {
return availableSince;
}

public SearchWsRequest setAvailableSince(@Nullable String availableSince) {
this.availableSince = availableSince;
return this;
}

@CheckForNull
public List<String> getFields() {
return fields;
}

public SearchWsRequest setFields(@Nullable List<String> fields) {
this.fields = fields;
return this;
}

@CheckForNull
public List<String> getFacets() {
return facets;
}

public SearchWsRequest setFacets(@Nullable List<String> facets) {
this.facets = facets;
return this;
}

@CheckForNull
public List<String> getInheritance() {
return inheritance;
}

public SearchWsRequest setInheritance(@Nullable List<String> inheritance) {
this.inheritance = inheritance;
return this;
}

@CheckForNull
public Boolean getIsTemplate() {
return isTemplate;
}

public SearchWsRequest setIsTemplate(@Nullable Boolean isTemplate) {
this.isTemplate = isTemplate;
return this;
}

@CheckForNull
public List<String> getLanguages() {
return languages;
}

public SearchWsRequest setLanguages(@Nullable List<String> languages) {
this.languages = languages;
return this;
}

@CheckForNull
public Integer getPage() {
return page;
}

public SearchWsRequest setPage(@Nullable Integer page) {
this.page = page;
return this;
}

@CheckForNull
public Integer getPageSize() {
return pageSize;
}

public SearchWsRequest setPageSize(@Nullable Integer pageSize) {
this.pageSize = pageSize;
return this;
}

@CheckForNull
public String getQuery() {
return query;
}

public SearchWsRequest setQuery(@Nullable String query) {
this.query = query;
return this;
}

@CheckForNull
public String getQProfile() {
return qProfile;
}

public SearchWsRequest setQProfile(@Nullable String qProfile) {
this.qProfile = qProfile;
return this;
}

@CheckForNull
public String getCompareToProfile() {
return compareToProfile;
}

public SearchWsRequest setCompareToProfile(@Nullable String compareToProfile) {
this.compareToProfile = compareToProfile;
return this;
}

@CheckForNull
public List<String> getRepositories() {
return repositories;
}

public SearchWsRequest setRepositories(@Nullable List<String> repositories) {
this.repositories = repositories;
return this;
}

@CheckForNull
public String getRuleKey() {
return ruleKey;
}

public SearchWsRequest setRuleKey(@Nullable String ruleKey) {
this.ruleKey = ruleKey;
return this;
}

@CheckForNull
public String getSort() {
return sort;
}

public SearchWsRequest setSort(@Nullable String sort) {
this.sort = sort;
return this;
}

@CheckForNull
public List<String> getSeverities() {
return severities;
}

public SearchWsRequest setSeverities(@Nullable List<String> severities) {
this.severities = severities;
return this;
}

@CheckForNull
public List<String> getStatuses() {
return statuses;
}

public SearchWsRequest setStatuses(@Nullable List<String> statuses) {
this.statuses = statuses;
return this;
}

@CheckForNull
public List<String> getTags() {
return tags;
}

public SearchWsRequest setTags(@Nullable List<String> tags) {
this.tags = tags;
return this;
}

@CheckForNull
public String getTemplateKey() {
return templateKey;
}

public SearchWsRequest setTemplateKey(@Nullable String templateKey) {
this.templateKey = templateKey;
return this;
}

@CheckForNull
public List<String> getTypes() {
return types;
}

public SearchWsRequest setTypes(@Nullable List<String> types) {
this.types = types;
return this;
}
}

+ 0
- 24
sonar-ws/src/main/java/org/sonarqube/ws/client/rule/package-info.java View File

@@ -1,24 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2017 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.
*/
@ParametersAreNonnullByDefault
package org.sonarqube.ws.client.rule;

import javax.annotation.ParametersAreNonnullByDefault;


+ 0
- 184
sonar-ws/src/test/java/org/sonarqube/ws/client/rule/RulesServiceTest.java View File

@@ -1,184 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2017 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.sonarqube.ws.client.rule;

import com.google.common.collect.Lists;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.Rules.SearchResponse;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.PostRequest;
import org.sonarqube.ws.client.ServiceTester;
import org.sonarqube.ws.client.WsConnector;

import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVATION;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_ACTIVE_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_AVAILABLE_SINCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_COMPARE_TO_PROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_INHERITANCE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_IS_TEMPLATE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_LANGUAGES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_QPROFILE;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_REPOSITORIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_RULE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_SEVERITIES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_STATUSES;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TAGS;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TEMPLATE_KEY;
import static org.sonarqube.ws.client.rule.RulesWsParameters.PARAM_TYPES;

public class RulesServiceTest {
static final boolean ACTIVATION_VALUE = true;
static final List<String> ACTIVE_SEVERITIES_VALUE = Lists.newArrayList("CRITICAL", "BLOCKER");
static final String ACTIVE_SEVERITIES_VALUE_INLINED = "CRITICAL,BLOCKER";
static final boolean ASC_VALUE = false;
static final String AVAILABLE_SINCE_VALUE = "2015-06-22";
static final List<String> FIELDS_VALUE = newArrayList("repo", "name");
static final String FIELDS_VALUE_INLINED = "repo,name";
static final List<String> FACETS_VALUE = newArrayList("languages", "repositories");
static final String FACETS_VALUE_INLINED = "languages,repositories";
static final List<String> INHERITANCE_VALUE = newArrayList("INHERITED", "OVERRIDES");
static final String INHERITANCE_VALUE_INLINED = "INHERITED,OVERRIDES";
static final boolean IS_TEMPLATE_VALUE = true;
static final List<String> LANGUAGES_VALUE = newArrayList("java", "js");
static final String LANGUAGES_VALUE_INLINED = "java,js";
static final int PAGE_VALUE = 12;
static final int PAGE_SIZE_VALUE = 42;
static final String QUERY_VALUE = "query-value";
static final String QPROFILE_VALUE = "qprofile-key";
static final List<String> REPOSITORIES_VALUE = newArrayList("findbugs", "checkstyle");
static final String REPOSITORIES_VALUE_INLINED = "findbugs,checkstyle";
static final String RULE_KEY_VALUE = "rule-key-value";
static final String SORT_VALUE = "name";
static final List<String> SEVERITIES_VALUE = newArrayList("INFO", "MINOR");
static final String SEVERITIES_VALUE_INLINED = "INFO,MINOR";
static final List<String> STATUSES_VALUE = newArrayList("BETA", "DEPRECATED");
static final String STATUSES_VALUE_INLINED = "BETA,DEPRECATED";
static final List<String> TAGS_VALUE = newArrayList("clumsy", "java8");
static final String TAGS_VALUE_INLINED = "clumsy,java8";
static final String TEMPLATE_KEY_VALUE = "template-key-value";
static final List<String> TYPES_VALUE = newArrayList("CODE_SMELL", "BUG");
static final String TYPES_VALUE_INLINED = "CODE_SMELL,BUG";

@Rule
public ServiceTester<RulesService> serviceTester = new ServiceTester<>(new RulesService(mock(WsConnector.class)));

private RulesService underTest = serviceTester.getInstanceUnderTest();

@Test
public void test_search() {
underTest.search(new SearchWsRequest()
.setActivation(ACTIVATION_VALUE)
.setActiveSeverities(ACTIVE_SEVERITIES_VALUE)
.setAsc(ASC_VALUE)
.setAvailableSince(AVAILABLE_SINCE_VALUE)
.setFields(FIELDS_VALUE)
.setFacets(FACETS_VALUE)
.setInheritance(INHERITANCE_VALUE)
.setIsTemplate(IS_TEMPLATE_VALUE)
.setLanguages(LANGUAGES_VALUE)
.setPage(PAGE_VALUE)
.setPageSize(PAGE_SIZE_VALUE)
.setQuery(QUERY_VALUE)
.setQProfile(QPROFILE_VALUE)
.setCompareToProfile("CompareTo")
.setRepositories(REPOSITORIES_VALUE)
.setRuleKey(RULE_KEY_VALUE)
.setSort(SORT_VALUE)
.setSeverities(SEVERITIES_VALUE)
.setStatuses(STATUSES_VALUE)
.setTags(TAGS_VALUE)
.setTemplateKey(TEMPLATE_KEY_VALUE)
.setTypes(TYPES_VALUE));

assertThat(serviceTester.getGetParser()).isSameAs(SearchResponse.parser());
GetRequest getRequest = serviceTester.getGetRequest();
serviceTester.assertThat(getRequest)
.hasPath("search")
.hasParam(PARAM_ACTIVATION, ACTIVATION_VALUE)
.hasParam(PARAM_ACTIVE_SEVERITIES, ACTIVE_SEVERITIES_VALUE_INLINED)
.hasParam("asc", ASC_VALUE)
.hasParam(PARAM_AVAILABLE_SINCE, AVAILABLE_SINCE_VALUE)
.hasParam("f", FIELDS_VALUE_INLINED)
.hasParam("facets", FACETS_VALUE_INLINED)
.hasParam(PARAM_INHERITANCE, INHERITANCE_VALUE_INLINED)
.hasParam(PARAM_IS_TEMPLATE, IS_TEMPLATE_VALUE)
.hasParam("p", PAGE_VALUE)
.hasParam("ps", PAGE_SIZE_VALUE)
.hasParam("q", QUERY_VALUE)
.hasParam(PARAM_QPROFILE, QPROFILE_VALUE)
.hasParam(PARAM_COMPARE_TO_PROFILE, "CompareTo")
.hasParam(PARAM_REPOSITORIES, REPOSITORIES_VALUE_INLINED)
.hasParam(PARAM_RULE_KEY, RULE_KEY_VALUE)
.hasParam(PARAM_LANGUAGES, LANGUAGES_VALUE_INLINED)
.hasParam("s", SORT_VALUE)
.hasParam(PARAM_SEVERITIES, SEVERITIES_VALUE_INLINED)
.hasParam(PARAM_STATUSES, STATUSES_VALUE_INLINED)
.hasParam(PARAM_TAGS, TAGS_VALUE_INLINED)
.hasParam(PARAM_TEMPLATE_KEY, TEMPLATE_KEY_VALUE)
.hasParam(PARAM_TYPES, TYPES_VALUE_INLINED)
.andNoOtherParam();
}

@Test
public void test_show() {
underTest.show("the-org", "the-rule/key");

assertThat(serviceTester.getGetParser()).isSameAs(Rules.ShowResponse.parser());
GetRequest getRequest = serviceTester.getGetRequest();
serviceTester.assertThat(getRequest)
.hasPath("show")
.hasParam("organization", "the-org")
.hasParam("key", "the-rule/key")
.andNoOtherParam();
}

@Test
public void test_create() {
underTest.create(new CreateWsRequest.Builder()
.setTemplateKey("the-template-key")
.setCustomKey("the-custom-key")
.setSeverity("BLOCKER")
.setParams("the-params")
.setPreventReactivation(true)
.setMarkdownDescription("the-desc")
.setStatus("BETA")
.setName("the-name")
.build());

PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("create")
.hasParam("template_key", "the-template-key")
.hasParam("custom_key", "the-custom-key")
.hasParam("severity", "BLOCKER")
.hasParam("params", "the-params")
.hasParam("prevent_reactivation", "true")
.hasParam("markdown_description", "the-desc")
.hasParam("status", "BETA")
.hasParam("name", "the-name")
.andNoOtherParam();
}
}

+ 3
- 2
tests/src/test/java/org/sonarqube/tests/organization/OrganizationTest.java View File

@@ -314,7 +314,7 @@ public class OrganizationTest {
}

private void verifyOrganization(Organization createdOrganization, String name, String description, String url,
String avatarUrl) {
String avatarUrl) {
SearchWsRequest request = new SearchWsRequest.Builder().setOrganizations(createdOrganization.getKey()).build();
List<Organization> result = tester.organizations().service().search(request).getOrganizationsList();
assertThat(result).hasSize(1);
@@ -353,7 +353,8 @@ public class OrganizationTest {
} else {
assertThat(p.getActiveRuleCount()).isGreaterThan(0);
// that allows to check the Elasticsearch index of active rules
Rules.SearchResponse activeRulesResponse = tester.wsClient().rules().search(new org.sonarqube.ws.client.rule.SearchWsRequest().setActivation(true).setQProfile(p.getKey()));
Rules.SearchResponse activeRulesResponse = tester.wsClient().rules()
.search(new org.sonarqube.ws.client.rules.SearchRequest().setActivation("true").setQprofile(p.getKey()));
assertThat(activeRulesResponse.getTotal()).as("profile " + p.getName()).isEqualTo(p.getActiveRuleCount());
assertThat(activeRulesResponse.getRulesCount()).isEqualTo((int) p.getActiveRuleCount());
}

+ 2
- 2
tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java View File

@@ -33,7 +33,7 @@ import org.sonarqube.tests.Byteman;
import org.sonarqube.qa.util.Tester;
import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.Qualityprofiles;
import org.sonarqube.ws.client.rule.SearchWsRequest;
import org.sonarqube.ws.client.rules.SearchRequest;
import util.ItUtils;

import static org.assertj.core.api.Assertions.assertThat;
@@ -100,7 +100,7 @@ public class ActiveRuleEsResilienceTest {
}

private long searchActiveRules(Qualityprofiles.CreateWsResponse.QualityProfile profile) {
SearchWsRequest request = new SearchWsRequest().setActivation(true).setQProfile(profile.getKey());
SearchRequest request = new SearchRequest().setActivation("true").setQprofile(profile.getKey());
return tester.wsClient().rules().search(request).getRulesCount();
}
}

+ 7
- 8
tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java View File

@@ -29,10 +29,10 @@ import org.junit.Test;
import org.junit.rules.DisableOnDebug;
import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
import org.sonarqube.tests.Byteman;
import org.sonarqube.qa.util.Tester;
import org.sonarqube.ws.client.rule.CreateWsRequest;
import org.sonarqube.ws.client.rule.SearchWsRequest;
import org.sonarqube.tests.Byteman;
import org.sonarqube.ws.client.rules.CreateRequest;
import org.sonarqube.ws.client.rules.SearchRequest;
import util.ItUtils;

import static java.util.Collections.singletonList;
@@ -78,13 +78,12 @@ public class RuleEsResilienceTest {

@Test
public void creation_of_custom_rule_is_resilient_to_elasticsearch_errors() throws Exception {
CreateWsRequest request = new CreateWsRequest.Builder()
CreateRequest request = new CreateRequest()
.setCustomKey("my_custom_rule")
.setName("My custom rule")
.setTemplateKey("xoo:xoo-template")
.setMarkdownDescription("The *initial* rule")
.setSeverity("MAJOR")
.build();
.setSeverity("MAJOR");
tester.wsClient().rules().create(request);

// rule exists in db but is not indexed. Search returns no results.
@@ -100,8 +99,8 @@ public class RuleEsResilienceTest {
}

private boolean nameFoundInSearch(String query) {
SearchWsRequest request = new SearchWsRequest()
.setQuery(query)
SearchRequest request = new SearchRequest()
.setQ(query)
.setRepositories(singletonList("xoo"));
return tester.wsClient().rules().search(request).getRulesCount() > 0;
}

+ 14
- 12
tests/src/test/java/org/sonarqube/tests/rule/RuleTagsTest.java View File

@@ -20,7 +20,6 @@
package org.sonarqube.tests.rule;

import com.sonar.orchestrator.Orchestrator;
import org.sonarqube.tests.Category6Suite;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.ClassRule;
@@ -28,10 +27,14 @@ import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
import org.sonarqube.qa.util.Tester;
import org.sonarqube.tests.Category6Suite;
import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.client.PostRequest;
import org.sonarqube.ws.client.rules.ShowRequest;
import org.sonarqube.ws.client.rules.TagsRequest;
import org.sonarqube.ws.client.rules.UpdateRequest;
import util.ItUtils;

import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;

public class RuleTagsTest {
@@ -88,23 +91,22 @@ public class RuleTagsTest {
}

private List<String> listTags(Organizations.Organization organization) {
String json = orchestrator.getServer().newHttpCall("/api/rules/tags")
.setParam("organization", organization.getKey())
.execute()
.getBodyAsString();
String json = tester
.wsClient()
.rules()
.tags(new TagsRequest().setOrganization(organization.getKey()));
return (List<String>) ItUtils.jsonToMap(json).get("tags");
}

private List<String> showRuleTags(Organizations.Organization organization) {
return tester.wsClient().rules().show(organization.getKey(), "xoo:OneIssuePerFile")
return tester.wsClient().rules().show(new ShowRequest().setOrganization(organization.getKey()).setKey("xoo:OneIssuePerFile"))
.getRule().getTags().getTagsList();
}

private void updateTag(String tag, Organizations.Organization organization) {
tester.wsClient().wsConnector().call(new PostRequest("/api/rules/update")
.setParam("organization", organization.getKey())
.setParam("key", "xoo:OneIssuePerFile")
.setParam("tags", tag))
.failIfNotSuccessful();
tester.wsClient().rules().update(new UpdateRequest()
.setOrganization(organization.getKey())
.setKey("xoo:OneIssuePerFile")
.setTags(asList(tag)));
}
}

+ 5
- 5
tests/src/test/java/org/sonarqube/tests/rule/RulesWsTest.java View File

@@ -31,7 +31,7 @@ import org.sonarqube.ws.Organizations.Organization;
import org.sonarqube.ws.Qualityprofiles.CreateWsResponse;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.client.rule.SearchWsRequest;
import org.sonarqube.ws.client.rules.SearchRequest;

import static org.assertj.core.api.Assertions.assertThat;

@@ -55,7 +55,7 @@ public class RulesWsTest {
Organization org = tester.organizations().generate();
SearchWsResponse.QualityProfile sonarWay = getProfile(org, p -> PROFILE_SONAR_WAY.equals(p.getName()) && LANGUAGE_XOO.equals(p.getLanguage()) && p.getIsBuiltIn());

List<Rules.Rule> result = tester.wsClient().rules().search(new SearchWsRequest().setQProfile(sonarWay.getKey()).setActivation(true))
List<Rules.Rule> result = tester.wsClient().rules().search(new SearchRequest().setQprofile(sonarWay.getKey()).setActivation("true"))
.getRulesList();

assertThat(result)
@@ -71,9 +71,9 @@ public class RulesWsTest {
tester.qProfiles().activateRule(xooProfile, RULE_ONE_ISSUE_PER_LINE);
SearchWsResponse.QualityProfile sonarWay = getProfile(org, p -> PROFILE_SONAR_WAY.equals(p.getName()) && LANGUAGE_XOO.equals(p.getLanguage()) && p.getIsBuiltIn());

List<Rules.Rule> result = tester.wsClient().rules().search(new SearchWsRequest()
.setQProfile(xooProfile.getKey())
.setActivation(false)
List<Rules.Rule> result = tester.wsClient().rules().search(new SearchRequest()
.setQprofile(xooProfile.getKey())
.setActivation("false")
.setCompareToProfile(sonarWay.getKey()))
.getRulesList();


Loading…
Cancel
Save