aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-08-31 16:44:59 +0200
committerStas Vilchik <stas.vilchik@sonarsource.com>2017-09-11 11:28:29 +0200
commit513356269ca36067d24db28cfda79630130e8bf1 (patch)
tree195f45813ed029b3c83c3fe2ce5fa6ad1e3027d7 /server/sonar-server
parentc8f7d461d30b6a0bcba6c25c553208f7c39b441d (diff)
downloadsonarqube-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.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/project/ws/SearchActionTest.java9
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");