From 5fc90d5d8a59460eef1776a5c6013912105c53b8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Mon, 5 May 2014 15:16:18 +0200 Subject: [PATCH] SONAR-5111 Split quality profiles WS into old style Rails description and new dedicated Java WS --- .../server/platform/ServerComponents.java | 4 +- .../ws/{QProfilesWs.java => ProfilesWs.java} | 11 +---- .../qualityprofile/ws/QualityProfilesWs.java | 41 +++++++++++++++++++ ...rofilesWsTest.java => ProfilesWsTest.java} | 32 +++++---------- .../ws/QProfileRestoreDefaultActionTest.java | 10 ++--- .../java/org/sonar/server/ws/WsTester.java | 9 ++++ .../internal/DefaultQProfileClient.java | 2 +- .../internal/DefaultQProfileClientTest.java | 2 +- 8 files changed, 71 insertions(+), 40 deletions(-) rename sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/{QProfilesWs.java => ProfilesWs.java} (91%) create mode 100644 sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QualityProfilesWs.java rename sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/{QProfilesWsTest.java => ProfilesWsTest.java} (72%) diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 614013342a3..392cc06c452 100644 --- a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -113,7 +113,7 @@ import org.sonar.server.qualitygate.RegisterQualityGates; import org.sonar.server.qualitygate.ws.*; import org.sonar.server.qualityprofile.*; import org.sonar.server.qualityprofile.ws.QProfileRestoreDefaultAction; -import org.sonar.server.qualityprofile.ws.QProfilesWs; +import org.sonar.server.qualityprofile.ws.ProfilesWs; import org.sonar.server.rule.*; import org.sonar.server.rule.ws.*; import org.sonar.server.rule2.RuleService; @@ -278,7 +278,7 @@ class ServerComponents { pico.addSingleton(DefaultProfilesCache.class); pico.addSingleton(ESActiveRule.class); pico.addSingleton(QProfileRestoreDefaultAction.class); - pico.addSingleton(QProfilesWs.class); + pico.addSingleton(ProfilesWs.class); // rule pico.addSingleton(AnnotationRuleParser.class); diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWs.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProfilesWs.java similarity index 91% rename from sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWs.java rename to sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProfilesWs.java index 42aa536fffd..c0b9920f83a 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWs.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProfilesWs.java @@ -24,20 +24,13 @@ import com.google.common.io.Resources; import org.sonar.api.server.ws.RailsHandler; import org.sonar.api.server.ws.WebService; -public class QProfilesWs implements WebService { - - private final QProfileRestoreDefaultAction qProfileRestoreDefaultAction; - - public QProfilesWs(QProfileRestoreDefaultAction qProfileRestoreDefaultAction) { - this.qProfileRestoreDefaultAction = qProfileRestoreDefaultAction; - } +public class ProfilesWs implements WebService { @Override public void define(Context context) { - NewController controller = context.createController("api/qprofiles") + NewController controller = context.createController("api/profiles") .setDescription("Quality profiles management"); - qProfileRestoreDefaultAction.define(controller); defineListAction(controller); defineBackupAction(controller); defineRestoreAction(controller); diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QualityProfilesWs.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QualityProfilesWs.java new file mode 100644 index 00000000000..e6d95603ec6 --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QualityProfilesWs.java @@ -0,0 +1,41 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.sonar.server.qualityprofile.ws; + +import org.sonar.api.server.ws.WebService; + +public class QualityProfilesWs implements WebService { + + private final QProfileRestoreDefaultAction qProfileRestoreDefaultAction; + + public QualityProfilesWs(QProfileRestoreDefaultAction qProfileRestoreDefaultAction) { + this.qProfileRestoreDefaultAction = qProfileRestoreDefaultAction; + } + + @Override + public void define(Context context) { + NewController controller = context.createController("api/qualityprofiles") + .setDescription("Quality profiles management"); + + qProfileRestoreDefaultAction.define(controller); + + controller.done(); + } +} diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProfilesWsTest.java similarity index 72% rename from sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java rename to sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProfilesWsTest.java index 664c0f1528f..34bb4606c5b 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProfilesWsTest.java @@ -26,44 +26,32 @@ import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.server.ws.RailsHandler; import org.sonar.api.server.ws.WebService; -import org.sonar.server.qualityprofile.QProfileBackup; import org.sonar.server.ws.WsTester; import static org.fest.assertions.Assertions.assertThat; -import static org.mockito.Mockito.mock; @RunWith(MockitoJUnitRunner.class) -public class QProfilesWsTest { +public class ProfilesWsTest { WsTester tester; @Before public void setUp() { - tester = new WsTester(new QProfilesWs(new QProfileRestoreDefaultAction(mock(QProfileBackup.class)))); + tester = new WsTester(new ProfilesWs()); } @Test public void define_controller() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); assertThat(controller).isNotNull(); - assertThat(controller.path()).isEqualTo("api/qprofiles"); + assertThat(controller.path()).isEqualTo("api/profiles"); assertThat(controller.description()).isNotEmpty(); - assertThat(controller.actions()).hasSize(6); - } - - @Test - public void define_restore_default_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); - - WebService.Action restoreProfiles = controller.action("restore_default"); - assertThat(restoreProfiles).isNotNull(); - assertThat(restoreProfiles.handler()).isNotNull(); - assertThat(restoreProfiles.params()).hasSize(1); + assertThat(controller.actions()).hasSize(5); } @Test public void define_list_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); WebService.Action restoreProfiles = controller.action("list"); assertThat(restoreProfiles).isNotNull(); @@ -74,7 +62,7 @@ public class QProfilesWsTest { @Test public void define_backup_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); WebService.Action restoreProfiles = controller.action("backup"); assertThat(restoreProfiles).isNotNull(); @@ -84,7 +72,7 @@ public class QProfilesWsTest { @Test public void define_restore_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); WebService.Action restoreProfiles = controller.action("restore"); assertThat(restoreProfiles).isNotNull(); @@ -94,7 +82,7 @@ public class QProfilesWsTest { @Test public void define_destroy_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); WebService.Action restoreProfiles = controller.action("destroy"); assertThat(restoreProfiles).isNotNull(); @@ -104,7 +92,7 @@ public class QProfilesWsTest { @Test public void define_set_as_default_action() throws Exception { - WebService.Controller controller = tester.controller("api/qprofiles"); + WebService.Controller controller = tester.controller("api/profiles"); WebService.Action restoreProfiles = controller.action("set_as_default"); assertThat(restoreProfiles).isNotNull(); diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreDefaultActionTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreDefaultActionTest.java index c09a49f35cc..5ac3bdab5eb 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreDefaultActionTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreDefaultActionTest.java @@ -42,14 +42,14 @@ public class QProfileRestoreDefaultActionTest { @Before public void setUp() throws Exception { - tester = new WsTester(new QProfilesWs(new QProfileRestoreDefaultAction(qProfileBackup))); + tester = new WsTester(new QualityProfilesWs(new QProfileRestoreDefaultAction(qProfileBackup))); } @Test public void return_empty_result_when_no_infos_or_warnings() throws Exception { when(qProfileBackup.restoreDefaultProfilesByLanguage("java")).thenReturn(new QProfileResult()); - WsTester.TestRequest request = tester.newPostRequest("api/qprofiles", "restore_default").setParam("language", "java"); + WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "restore_default").setParam("language", "java"); request.execute().assertNoContent(); } @@ -57,7 +57,7 @@ public class QProfileRestoreDefaultActionTest { public void show_infos() throws Exception { when(qProfileBackup.restoreDefaultProfilesByLanguage("java")).thenReturn(new QProfileResult().addInfos(newArrayList("Some info"))); - WsTester.TestRequest request = tester.newPostRequest("api/qprofiles", "restore_default").setParam("language", "java"); + WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "restore_default").setParam("language", "java"); request.execute().assertJson(getClass(), "show_infos.json"); } @@ -65,7 +65,7 @@ public class QProfileRestoreDefaultActionTest { public void show_warnings() throws Exception { when(qProfileBackup.restoreDefaultProfilesByLanguage("java")).thenReturn(new QProfileResult().addWarnings(newArrayList("Some warning"))); - WsTester.TestRequest request = tester.newPostRequest("api/qprofiles", "restore_default").setParam("language", "java"); + WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "restore_default").setParam("language", "java"); request.execute().assertJson(getClass(), "show_warnings.json"); } @@ -73,7 +73,7 @@ public class QProfileRestoreDefaultActionTest { public void show_infos_and_warnings() throws Exception { when(qProfileBackup.restoreDefaultProfilesByLanguage("java")).thenReturn(new QProfileResult().addInfos(newArrayList("Some info")).addWarnings(newArrayList("Some warning"))); - WsTester.TestRequest request = tester.newPostRequest("api/qprofiles", "restore_default").setParam("language", "java"); + WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "restore_default").setParam("language", "java"); request.execute().assertJson(getClass(), "show_infos_and_warnings.json"); } } diff --git a/sonar-server/src/test/java/org/sonar/server/ws/WsTester.java b/sonar-server/src/test/java/org/sonar/server/ws/WsTester.java index f3263d9b5ce..f809921a901 100644 --- a/sonar-server/src/test/java/org/sonar/server/ws/WsTester.java +++ b/sonar-server/src/test/java/org/sonar/server/ws/WsTester.java @@ -30,6 +30,7 @@ import org.sonar.api.utils.text.XmlWriter; import javax.annotation.CheckForNull; import javax.annotation.Nullable; + import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -217,7 +218,15 @@ public class WsTester { private TestRequest newRequest(String controllerKey, String actionKey, String method) { TestRequest request = new TestRequest(method); WebService.Controller controller = context.controller(controllerKey); + if (controller == null) { + throw new IllegalArgumentException( + String.format("Controller '%s' is unknown, did you forget to call NewController.done()?", controllerKey)); + } WebService.Action action = controller.action(actionKey); + if (action == null) { + throw new IllegalArgumentException( + String.format("Action '%s' not found on controller '%s'.", actionKey, controllerKey)); + } request.setAction(action); return request; } diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClient.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClient.java index f0ce08cd502..4948228eb03 100644 --- a/sonar-ws-client/src/main/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClient.java +++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClient.java @@ -38,7 +38,7 @@ public class DefaultQProfileClient implements QProfileClient { @Override public QProfileResult restoreDefault(String language) { - String json = requestFactory.post("/api/qprofiles/restore_default", Collections.singletonMap("language", (Object) language)); + String json = requestFactory.post("/api/qualityprofiles/restore_default", Collections.singletonMap("language", (Object) language)); Map jsonRoot = (Map) JSONValue.parse(json); return new DefaultQProfileResult(jsonRoot); } diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClientTest.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClientTest.java index cfd5bce80de..9ee9ed21d4a 100644 --- a/sonar-ws-client/src/test/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClientTest.java +++ b/sonar-ws-client/src/test/java/org/sonar/wsclient/qprofile/internal/DefaultQProfileClientTest.java @@ -43,7 +43,7 @@ public class DefaultQProfileClientTest { DefaultQProfileClient client = new DefaultQProfileClient(requestFactory); QProfileResult result = client.restoreDefault("java"); - assertThat(httpServer.requestedPath()).isEqualTo("/api/qprofiles/restore_default"); + assertThat(httpServer.requestedPath()).isEqualTo("/api/qualityprofiles/restore_default"); assertThat(httpServer.requestParams()).includes( entry("language", "java") ); -- 2.39.5