aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-01-10 11:39:14 +0100
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-01-13 17:58:12 +0100
commitfc86449cbfcb3693ac266bd1fc5103f940c61054 (patch)
tree6e8eacffbd16df7d29514ff302d01f01e1ec3d5e
parent4548ea68f791d63cf37ca6471113a22ad3d9c40c (diff)
downloadsonarqube-fc86449cbfcb3693ac266bd1fc5103f940c61054.tar.gz
sonarqube-fc86449cbfcb3693ac266bd1fc5103f940c61054.zip
SONAR-8581 WS api/navigation/global use the new PagesDefinition API
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java24
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java80
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_admin.json12
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_anonymous.json8
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ui/ws/GlobalActionTest/global_pages_for_user.json8
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> 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"
}
]
}