From: Jean-Baptiste Lievremont Date: Tue, 13 May 2014 09:45:48 +0000 (+0200) Subject: SONAR-5264 Fix semantics of the _query_ parameter on api/qualitygates/search X-Git-Tag: 4.4-RC1~1109 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4de325e2394d44ea07ac2a2b58b5350f994e628c;p=sonarqube.git SONAR-5264 Fix semantics of the _query_ parameter on api/qualitygates/search --- diff --git a/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java b/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java index d93285006d5..35d1768348f 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QGatesSearchAction.java @@ -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)) diff --git a/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/QGatesWsTest.java b/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/QGatesWsTest.java index 373d2d90b0e..e57f5ebfaed 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/QGatesWsTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/QGatesWsTest.java @@ -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 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 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 queryCaptor = ArgumentCaptor.forClass(ProjectQgateAssociationQuery.class); + verify(projectFinder).find(queryCaptor.capture()); + ProjectQgateAssociationQuery query = queryCaptor.getValue(); + assertThat(query.membership()).isEqualTo(ProjectQgateAssociationQuery.IN); } @Test