diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2017-01-10 11:50:57 +0100 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2017-01-13 17:58:12 +0100 |
commit | f0e22159e7792c0a864f7a395de065e006f553f1 (patch) | |
tree | 2a653736f59dfac345c28bc9f1fd05385ef896cd | |
parent | fc86449cbfcb3693ac266bd1fc5103f940c61054 (diff) | |
download | sonarqube-f0e22159e7792c0a864f7a395de065e006f553f1.tar.gz sonarqube-f0e22159e7792c0a864f7a395de065e006f553f1.zip |
SONAR-8581 WS api/navigation/settings use the new PagesDefinition API
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsAction.java | 23 | ||||
-rw-r--r-- | server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java | 78 | ||||
-rw-r--r-- | server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_pages.json (renamed from server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_views.json) | 4 |
3 files changed, 36 insertions, 69 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsAction.java index d866a735e55..0ce9f531ebf 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsAction.java @@ -17,34 +17,29 @@ * 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.ui.ws; -import java.util.Locale; import org.sonar.api.config.Settings; -import org.sonar.api.i18n.I18n; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService.NewController; import org.sonar.api.utils.text.JsonWriter; -import org.sonar.api.web.NavigationSection; -import org.sonar.api.web.Page; +import org.sonar.api.web.page.Page; import org.sonar.core.config.WebConstants; import org.sonar.core.permission.GlobalPermissions; -import org.sonar.server.ui.ViewProxy; -import org.sonar.server.ui.Views; +import org.sonar.server.ui.PageRepository; import org.sonar.server.user.UserSession; public class SettingsAction implements NavigationWsAction { + private final PageRepository pageRepository; private final Settings settings; - private final Views views; - private final I18n i18n; private final UserSession userSession; - public SettingsAction(Settings settings, Views views, I18n i18n, UserSession userSession) { - this.views = views; + public SettingsAction(PageRepository pageRepository, Settings settings, UserSession userSession) { + this.pageRepository = pageRepository; this.settings = settings; - this.i18n = i18n; this.userSession = userSession; } @@ -72,10 +67,10 @@ public class SettingsAction implements NavigationWsAction { json.name("extensions").beginArray(); if (isAdmin) { - for (ViewProxy<Page> page : views.getPages(NavigationSection.CONFIGURATION, null, null, null)) { + for (Page page : pageRepository.getGlobalPages(true)) { json.beginObject() - .prop("id", page.getId()) - .prop("name", i18n.message(Locale.ENGLISH, String.format("%s.page", page.getTitle()), page.getTitle())) + .prop("key", page.getKey()) + .prop("name", page.getName()) .endObject(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java index 647af7ad7d8..29e5168b890 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java @@ -17,29 +17,26 @@ * 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.ui.ws; -import java.util.Locale; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.MapSettings; import org.sonar.api.config.Settings; -import org.sonar.api.i18n.I18n; -import org.sonar.api.web.NavigationSection; -import org.sonar.api.web.Page; -import org.sonar.api.web.View; +import org.sonar.api.web.page.Page; +import org.sonar.api.web.page.PageDefinition; import org.sonar.core.config.WebConstants; import org.sonar.core.permission.GlobalPermissions; +import org.sonar.core.platform.PluginRepository; import org.sonar.server.tester.UserSessionRule; -import org.sonar.server.ui.Views; +import org.sonar.server.ui.PageRepository; import org.sonar.server.ws.WsActionTester; -import org.sonar.test.JsonAssert; -import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.sonar.test.JsonAssert.assertJson; public class SettingsActionTest { @@ -48,15 +45,8 @@ public class SettingsActionTest { private Settings settings = new MapSettings(); - private I18n i18n = mock(I18n.class); - private WsActionTester ws; - @Before - public void before() { - when(i18n.message(any(Locale.class), anyString(), anyString())).thenAnswer(invocation -> invocation.getArgumentAt(2, String.class)); - } - @Test public void empty() throws Exception { init(); @@ -74,11 +64,11 @@ public class SettingsActionTest { } @Test - public void with_views() throws Exception { - init(createViews()); + public void with_pages() throws Exception { + init(createPages()); userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - executeAndVerify("with_views.json"); + executeAndVerify("with_pages.json"); } @Test @@ -92,50 +82,32 @@ public class SettingsActionTest { @Test public void with_views_and_update_center_but_not_admin() throws Exception { - init(createViews()); + init(createPages()); settings.setProperty(WebConstants.SONAR_UPDATECENTER_ACTIVATE, true); executeAndVerify("empty.json"); } - private void init(View... views) { - ws = new WsActionTester(new SettingsAction(settings, new Views(userSessionRule, views), i18n, userSessionRule)); + private void init(Page... pages) { + PluginRepository pluginRepository = mock(PluginRepository.class); + when(pluginRepository.hasPlugin(anyString())).thenReturn(true); + PageRepository pageRepository = new PageRepository(pluginRepository, new PageDefinition[] {context -> { + for (Page page : pages) { + context.addPage(page); + } + }}); + ws = new WsActionTester(new SettingsAction(pageRepository, settings, userSessionRule)); + pageRepository.start(); } private void executeAndVerify(String json) { - JsonAssert.assertJson(ws.newRequest().execute().getInput()).isSimilarTo(getClass().getResource("SettingsActionTest/" + json)); + assertJson(ws.newRequest().execute().getInput()).isSimilarTo(getClass().getResource("SettingsActionTest/" + json)); } - private View[] createViews() { - - @NavigationSection(NavigationSection.CONFIGURATION) - class FirstPage implements Page { - @Override - public String getTitle() { - return "First Page"; - } - - @Override - public String getId() { - return "first_page"; - } - } - - @NavigationSection(NavigationSection.CONFIGURATION) - class SecondPage implements Page { - @Override - public String getTitle() { - return "Second Page"; - } - - @Override - public String getId() { - return "second_page"; - } - } + private Page[] createPages() { + Page firstPage = Page.builder("my_plugin/first_page").setName("First Page").setAdmin(true).build(); + Page secondPage = Page.builder("my_plugin/second_page").setName("Second Page").setAdmin(true).build(); - Page page = new FirstPage(); - Page controller = new SecondPage(); - return new View[] {page, controller}; + return new Page[] {firstPage, secondPage}; } } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_views.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_pages.json index 44d4bd3af97..6aea032e41b 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_views.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/SettingsActionTest/with_pages.json @@ -3,11 +3,11 @@ "showProvisioning": false, "extensions": [ { - "id": "first_page", + "key": "my_plugin/first_page", "name": "First Page" }, { - "id": "second_page", + "key": "my_plugin/second_page", "name": "Second Page" } ] |