]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5264 Fix semantics of the _query_ parameter on api/qualitygates/search
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 13 May 2014 09:45:48 +0000 (11:45 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 13 May 2014 09:45:48 +0000 (11:45 +0200)
sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java
sonar-server/src/test/java/org/sonar/server/qualitygate/ws/QGatesWsTest.java

index d93285006d52d5173a53bf11d158bfc804647b08..35d1768348fdb6c832ee34060488c734b565f4a1 100644 (file)
@@ -51,7 +51,7 @@ public class QGatesSearchAction implements RequestHandler {
       .setExampleValue("1");
 
     action.createParam(QGatesWs.PARAM_QUERY)
-      .setDescription("To search for projects containing this string")
+      .setDescription("To search for projects containing this string. If this parameter is set, \"selected\" is set to \"all\".")
       .setExampleValue("abc");
 
     action.createParam(QGatesWs.PARAM_SELECTED)
@@ -74,7 +74,7 @@ public class QGatesSearchAction implements RequestHandler {
   public void handle(Request request, Response response) {
     QgateProjectFinder.Association associations = projectFinder.find(ProjectQgateAssociationQuery.builder()
       .gateId(request.mandatoryParam(QGatesWs.PARAM_GATE_ID))
-      .membership(request.param(QGatesWs.PARAM_SELECTED))
+      .membership(request.param(QGatesWs.PARAM_QUERY) == null ? request.param(QGatesWs.PARAM_SELECTED) : ProjectQgateAssociationQuery.ANY)
       .projectSearch(request.param(QGatesWs.PARAM_QUERY))
       .pageIndex(request.paramAsInt(QGatesWs.PARAM_PAGE))
       .pageSize(request.paramAsInt(QGatesWs.PARAM_PAGE_SIZE))
index 373d2d90b0ee818fd50065e798f0fa111bc9ebfc..e57f5ebfaedf62012a83e9e54236da9434bb08c6 100644 (file)
@@ -24,6 +24,7 @@ import org.elasticsearch.common.collect.Lists;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.sonar.api.i18n.I18n;
@@ -44,7 +45,9 @@ import java.util.List;
 
 import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 // TODO split testcases in action tests
 @RunWith(MockitoJUnitRunner.class)
@@ -376,7 +379,7 @@ public class QGatesWsTest {
   }
 
   @Test
-  public void search_nominal() throws Exception {
+  public void search_with_query() throws Exception {
     long gateId = 12345L;
     Association assoc = mock(Association.class);
     when(assoc.hasMoreResults()).thenReturn(true);
@@ -386,13 +389,42 @@ public class QGatesWsTest {
     );
     when(assoc.projects()).thenReturn(projects);
     when(projectFinder.find(any(ProjectQgateAssociationQuery.class))).thenReturn(assoc);
+
     tester.newGetRequest("api/qualitygates", "search")
       .setParam("gateId", Long.toString(gateId))
+      .setParam("query", "Project")
       .execute()
       .assertJson("{'more':true,'results':["
         + "{'id':42,'name':'Project One','selected':false},"
         + "{'id':24,'name':'Project Two','selected':true}"
         + "]}");
+    ArgumentCaptor<ProjectQgateAssociationQuery> queryCaptor = ArgumentCaptor.forClass(ProjectQgateAssociationQuery.class);
+    verify(projectFinder).find(queryCaptor.capture());
+    ProjectQgateAssociationQuery query = queryCaptor.getValue();
+    assertThat(query.membership()).isEqualTo(ProjectQgateAssociationQuery.ANY);
+  }
+
+  @Test
+  public void search_nominal() throws Exception {
+    long gateId = 12345L;
+    Association assoc = mock(Association.class);
+    when(assoc.hasMoreResults()).thenReturn(true);
+    List<ProjectQgateAssociation> projects = ImmutableList.of(
+      new ProjectQgateAssociation().setId(24L).setName("Project Two").setMember(true)
+    );
+    when(assoc.projects()).thenReturn(projects);
+    when(projectFinder.find(any(ProjectQgateAssociationQuery.class))).thenReturn(assoc);
+
+    tester.newGetRequest("api/qualitygates", "search")
+      .setParam("gateId", Long.toString(gateId))
+      .execute()
+      .assertJson("{'more':true,'results':["
+        + "{'id':24,'name':'Project Two','selected':true}"
+        + "]}");
+    ArgumentCaptor<ProjectQgateAssociationQuery> queryCaptor = ArgumentCaptor.forClass(ProjectQgateAssociationQuery.class);
+    verify(projectFinder).find(queryCaptor.capture());
+    ProjectQgateAssociationQuery query = queryCaptor.getValue();
+    assertThat(query.membership()).isEqualTo(ProjectQgateAssociationQuery.IN);
   }
 
   @Test