diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2017-08-31 16:44:59 +0200 |
---|---|---|
committer | Stas Vilchik <stas.vilchik@sonarsource.com> | 2017-09-11 11:28:29 +0200 |
commit | 513356269ca36067d24db28cfda79630130e8bf1 (patch) | |
tree | 195f45813ed029b3c83c3fe2ce5fa6ad1e3027d7 /server/sonar-server | |
parent | c8f7d461d30b6a0bcba6c25c553208f7c39b441d (diff) | |
download | sonarqube-513356269ca36067d24db28cfda79630130e8bf1.tar.gz sonarqube-513356269ca36067d24db28cfda79630130e8bf1.zip |
SONAR-8640 WS api/projects/search query on key does partial match and is case insensitive
Diffstat (limited to 'server/sonar-server')
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/project/ws/SearchAction.java | 8 | ||||
-rw-r--r-- | server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java | 9 |
2 files changed, 11 insertions, 6 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/project/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/project/ws/SearchAction.java index 015bf3740b7..562a136c070 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/project/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/project/ws/SearchAction.java @@ -92,7 +92,7 @@ public class SearchAction implements ProjectsWsAction { action.createParam(Param.TEXT_QUERY) .setDescription("Limit search to: <ul>" + "<li>component names that contain the supplied string</li>" + - "<li>component keys that are exactly the same as the supplied string</li>" + + "<li>component keys that contain the supplied string</li>" + "</ul>") .setExampleValue("sonar"); @@ -153,9 +153,13 @@ public class SearchAction implements ProjectsWsAction { private static ComponentQuery buildQuery(SearchWsRequest request) { List<String> qualifiers = request.getQualifiers(); ComponentQuery.Builder query = ComponentQuery.builder() - .setNameOrKeyQuery(request.getQuery()) .setQualifiers(qualifiers.toArray(new String[qualifiers.size()])); + setNullable(request.getQuery(), q -> { + query.setNameOrKeyQuery(q); + query.setPartialMatchOnKey(true); + return query; + }); setNullable(request.getVisibility(), v -> query.setPrivate(Visibility.isPrivate(v))); setNullable(request.getAnalyzedBefore(), d -> query.setAnalyzedBefore(parseDateOrDateTime(d).getTime())); diff --git a/server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java index 439d4d10f2f..c4fbc6a0bf6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java @@ -92,15 +92,16 @@ public class SearchActionTest { new SearchAction(db.getDbClient(), userSession, defaultOrganizationProvider, new ProjectsWsSupport(db.getDbClient(), mock(BillingValidationsProxy.class)))); @Test - public void search_by_key_query() throws IOException { + public void search_by_key_query_with_partial_match_case_insensitive() throws IOException { userSession.addPermission(ADMINISTER, db.getDefaultOrganization()); db.components().insertComponents( ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()).setDbKey("project-_%-key"), + ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()).setDbKey("PROJECT-_%-KEY"), ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()).setDbKey("project-key-without-escaped-characters")); - SearchWsResponse response = call(SearchWsRequest.builder().setQuery("project-_%-key").build()); + SearchWsResponse response = call(SearchWsRequest.builder().setQuery("JeCt-_%-k").build()); - assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly("project-_%-key"); + assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly("project-_%-key", "PROJECT-_%-KEY"); } @Test @@ -288,7 +289,7 @@ public class SearchActionTest { assertThat(qParam.description()).isEqualTo("Limit search to: " + "<ul>" + "<li>component names that contain the supplied string</li>" + - "<li>component keys that are exactly the same as the supplied string</li>" + + "<li>component keys that contain the supplied string</li>" + "</ul>"); WebService.Param qualifierParam = action.param("qualifiers"); |