From fc86449cbfcb3693ac266bd1fc5103f940c61054 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Tue, 10 Jan 2017 11:39:14 +0100 Subject: [PATCH] SONAR-8581 WS api/navigation/global use the new PagesDefinition API --- .../org/sonar/server/ui/ws/GlobalAction.java | 24 +++--- .../sonar/server/ui/ws/global-example.json | 8 +- .../sonar/server/ui/ws/GlobalActionTest.java | 80 +++++++------------ .../global_pages_for_admin.json | 12 +-- .../global_pages_for_anonymous.json | 8 +- .../global_pages_for_user.json | 8 +- 6 files changed, 54 insertions(+), 86 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java index 59ac7b15b57..5adf2b40e9c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java @@ -17,6 +17,7 @@ * 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 com.google.common.collect.ImmutableSet; @@ -29,12 +30,9 @@ 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.db.Database; import org.sonar.db.dialect.H2; -import org.sonar.server.ui.ViewProxy; -import org.sonar.server.ui.Views; +import org.sonar.server.ui.PageRepository; import static org.sonar.api.CoreProperties.CORE_ALLOW_USERS_TO_SIGNUP_PROPERTY; import static org.sonar.api.CoreProperties.HOURS_IN_DAY; @@ -57,14 +55,14 @@ public class GlobalAction implements NavigationWsAction { RATING_GRID, CORE_ALLOW_USERS_TO_SIGNUP_PROPERTY); - private final Views views; + private final PageRepository pageRepository; private final Settings settings; private final ResourceTypes resourceTypes; private final Server server; private final Database database; - public GlobalAction(Views views, Settings settings, ResourceTypes resourceTypes, Server server, Database database) { - this.views = views; + public GlobalAction(PageRepository pageRepository, Settings settings, ResourceTypes resourceTypes, Server server, Database database) { + this.pageRepository = pageRepository; this.settings = settings; this.resourceTypes = resourceTypes; this.server = server; @@ -95,13 +93,11 @@ public class GlobalAction implements NavigationWsAction { private void writePages(JsonWriter json) { json.name("globalPages").beginArray(); - for (ViewProxy page : views.getPages(NavigationSection.HOME)) { - if (page.isUserAuthorized()) { - json.beginObject() - .prop("id", page.getId()) - .prop("name", page.getTitle()) - .endObject(); - } + for (org.sonar.api.web.page.Page page : pageRepository.getGlobalPages(false)) { + json.beginObject() + .prop("key", page.getKey()) + .prop("name", page.getName()) + .endObject(); } json.endArray(); } diff --git a/server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json b/server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json index 79d5a430404..700e11d58c3 100644 --- a/server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json +++ b/server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json @@ -1,12 +1,12 @@ { "globalPages": [ { - "id": "my_plugin_page", - "name": "My Plugin Page" + "key": "another_plugin/page", + "name": "My Another Page" }, { - "id": "my_rails_app", - "name": "My Rails App" + "key": "my_plugin/page", + "name": "My Plugin Page" } ], "settings": { diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java index 61b13e58013..2a4535d197a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java @@ -17,6 +17,7 @@ * 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 org.junit.Rule; @@ -27,18 +28,18 @@ import org.sonar.api.platform.Server; import org.sonar.api.resources.ResourceType; import org.sonar.api.resources.ResourceTypeTree; import org.sonar.api.resources.ResourceTypes; -import org.sonar.api.web.NavigationSection; -import org.sonar.api.web.Page; -import org.sonar.api.web.UserRole; -import org.sonar.api.web.View; +import org.sonar.api.web.page.Page; +import org.sonar.api.web.page.PageDefinition; import org.sonar.core.permission.GlobalPermissions; +import org.sonar.core.platform.PluginRepository; import org.sonar.db.Database; import org.sonar.db.dialect.H2; import org.sonar.db.dialect.MySql; 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 static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.sonar.test.JsonAssert.assertJson; @@ -64,7 +65,7 @@ public class GlobalActionTest { @Test public void return_qualifiers() throws Exception { - init(new View[] {}, new ResourceTypeTree[] { + init(new Page[] {}, new ResourceTypeTree[] { ResourceTypeTree.builder() .addType(ResourceType.builder("POL").build()) .addType(ResourceType.builder("LOP").build()) @@ -108,22 +109,22 @@ public class GlobalActionTest { @Test public void return_global_pages_for_anonymous() throws Exception { - init(createViews(), new ResourceTypeTree[] {}); + init(createPages(), new ResourceTypeTree[] {}); executeAndVerify("global_pages_for_anonymous.json"); } @Test public void return_global_pages_for_user() throws Exception { - init(createViews(), new ResourceTypeTree[] {}); + init(createPages(), new ResourceTypeTree[] {}); userSessionRule.login("obiwan"); executeAndVerify("global_pages_for_user.json"); } @Test - public void return_global_pages_for_admin() throws Exception { - init(createViews(), new ResourceTypeTree[] {}); + public void return_global_pages_for_admin_user() throws Exception { + init(createPages(), new ResourceTypeTree[] {}); userSessionRule.login("obiwan").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); executeAndVerify("global_pages_for_admin.json"); @@ -147,7 +148,7 @@ public class GlobalActionTest { @Test public void test_example_response() throws Exception { - init(createViews(), new ResourceTypeTree[] { + init(createPages(), new ResourceTypeTree[] { ResourceTypeTree.builder() .addType(ResourceType.builder("POL").build()) .addType(ResourceType.builder("LOP").build()) @@ -175,56 +176,31 @@ public class GlobalActionTest { } private void init() { - init(new View[] {}, new ResourceTypeTree[] {}); + init(new org.sonar.api.web.page.Page[] {}, new ResourceTypeTree[] {}); } - private void init(View[] views, ResourceTypeTree[] resourceTypeTrees) { + private void init(org.sonar.api.web.page.Page[] pages, ResourceTypeTree[] resourceTypeTrees) { when(database.getDialect()).thenReturn(new H2()); - ws = new WsActionTester(new GlobalAction(new Views(userSessionRule, views), settings, new ResourceTypes(resourceTypeTrees), server, database)); + 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); + } + }}); + pageRepository.start(); + ws = new WsActionTester(new GlobalAction(pageRepository, settings, new ResourceTypes(resourceTypeTrees), server, database)); } private void executeAndVerify(String json) { assertJson(ws.newRequest().execute().getInput()).isSimilarTo(getClass().getResource(GlobalActionTest.class.getSimpleName() + "/" + json)); } - private View[] createViews() { - Page page = new Page() { - @Override - public String getTitle() { - return "My Plugin Page"; - } - - @Override - public String getId() { - return "my_plugin_page"; - } - }; + private Page[] createPages() { + Page page = Page.builder("my_plugin/page").setName("My Plugin Page").build(); + Page anotherPage = Page.builder("another_plugin/page").setName("My Another Page").build(); + Page adminPage = Page.builder("my_plugin/admin_page").setName("Admin Page").setAdmin(true).build(); - Page controller = new Page() { - @Override - public String getTitle() { - return "My Rails App"; - } - - @Override - public String getId() { - return "my_rails_app"; - } - }; - - @NavigationSection(NavigationSection.HOME) - @UserRole(GlobalPermissions.SYSTEM_ADMIN) - class AdminPage implements Page { - @Override - public String getTitle() { - return "Admin Page"; - } - - @Override - public String getId() { - return "admin_page"; - } - } - return new View[] {page, controller, new AdminPage()}; + return new Page[] {page, anotherPage, adminPage}; } } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_admin.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_admin.json index 664b1269852..014d6a56615 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_admin.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_admin.json @@ -1,16 +1,12 @@ { "globalPages": [ { - "id": "my_plugin_page", - "name": "My Plugin Page" - }, - { - "id": "my_rails_app", - "name": "My Rails App" + "key": "another_plugin/page", + "name": "My Another Page" }, { - "id": "admin_page", - "name": "Admin Page" + "key": "my_plugin/page", + "name": "My Plugin Page" } ] } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_anonymous.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_anonymous.json index ab7722b818d..014d6a56615 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_anonymous.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_anonymous.json @@ -1,12 +1,12 @@ { "globalPages": [ { - "id": "my_plugin_page", - "name": "My Plugin Page" + "key": "another_plugin/page", + "name": "My Another Page" }, { - "id": "my_rails_app", - "name": "My Rails App" + "key": "my_plugin/page", + "name": "My Plugin Page" } ] } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_user.json b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_user.json index ab7722b818d..014d6a56615 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_user.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_user.json @@ -1,12 +1,12 @@ { "globalPages": [ { - "id": "my_plugin_page", - "name": "My Plugin Page" + "key": "another_plugin/page", + "name": "My Another Page" }, { - "id": "my_rails_app", - "name": "My Rails App" + "key": "my_plugin/page", + "name": "My Plugin Page" } ] } -- 2.39.5