aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-01-10 11:50:57 +0100
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2017-01-13 17:58:12 +0100
commitf0e22159e7792c0a864f7a395de065e006f553f1 (patch)
tree2a653736f59dfac345c28bc9f1fd05385ef896cd
parentfc86449cbfcb3693ac266bd1fc5103f940c61054 (diff)
downloadsonarqube-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.java23
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsActionTest.java78
-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"
}
]