From c75946789badf57684c87b1547366e71e39c03e1 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Thu, 31 May 2018 22:21:36 +0200 Subject: [PATCH] SONAR-10718 add field "edition" to WS api/navigation/global --- .../org/sonar/server/ui/ws/GlobalAction.java | 7 ++++- .../sonar/server/ui/ws/global-example.json | 3 ++- .../sonar/server/ui/ws/GlobalActionTest.java | 27 ++++++++++++++++--- 3 files changed, 32 insertions(+), 5 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 1b5edecc03f..8a41bff2110 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 @@ -21,6 +21,7 @@ package org.sonar.server.ui.ws; import com.google.common.collect.ImmutableSet; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Set; import org.sonar.api.Startable; @@ -33,6 +34,7 @@ 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.page.Page; +import org.sonar.core.platform.EditionProvider; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.dialect.H2; @@ -72,10 +74,11 @@ public class GlobalAction implements NavigationWsAction, Startable { private final DefaultOrganizationProvider defaultOrganizationProvider; private final BranchFeatureProxy branchFeature; private final UserSession userSession; + private final EditionProvider editionProvider; public GlobalAction(PageRepository pageRepository, Configuration config, ResourceTypes resourceTypes, Server server, WebServer webServer, DbClient dbClient, OrganizationFlags organizationFlags, - DefaultOrganizationProvider defaultOrganizationProvider, BranchFeatureProxy branchFeature, UserSession userSession) { + DefaultOrganizationProvider defaultOrganizationProvider, BranchFeatureProxy branchFeature, UserSession userSession, EditionProvider editionProvider) { this.pageRepository = pageRepository; this.config = config; this.resourceTypes = resourceTypes; @@ -86,6 +89,7 @@ public class GlobalAction implements NavigationWsAction, Startable { this.defaultOrganizationProvider = defaultOrganizationProvider; this.branchFeature = branchFeature; this.userSession = userSession; + this.editionProvider = editionProvider; this.systemSettingValuesByKey = new HashMap<>(); } @@ -122,6 +126,7 @@ public class GlobalAction implements NavigationWsAction, Startable { writeDatabaseProduction(json); writeOrganizationSupport(json); writeBranchSupport(json); + editionProvider.get().ifPresent(e -> json.prop("edition", e.name().toLowerCase(Locale.ENGLISH))); json.prop("standalone", webServer.isStandalone()); json.endObject(); } 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 ec18d44b485..97dd61de33f 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 @@ -29,5 +29,6 @@ "branchesEnabled": false, "defaultOrganization": "key_foo", "canAdmin": false, - "standalone": true + "standalone": true, + "edition": "community" } 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 26415593278..6f1b4b53202 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 @@ -19,6 +19,7 @@ */ package org.sonar.server.ui.ws; +import java.util.Optional; import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.internal.MapSettings; @@ -28,13 +29,14 @@ import org.sonar.api.resources.ResourceTypeTree; import org.sonar.api.resources.ResourceTypes; import org.sonar.api.web.page.Page; import org.sonar.api.web.page.PageDefinition; +import org.sonar.core.extension.CoreExtensionRepository; +import org.sonar.core.platform.EditionProvider; import org.sonar.core.platform.PluginInfo; import org.sonar.core.platform.PluginRepository; import org.sonar.db.DbClient; import org.sonar.db.dialect.H2; import org.sonar.db.dialect.MySql; import org.sonar.server.branch.BranchFeatureRule; -import org.sonar.core.extension.CoreExtensionRepository; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.organization.TestOrganizationFlags; @@ -61,10 +63,10 @@ public class GlobalActionTest { private Server server = mock(Server.class); private WebServer webServer = mock(WebServer.class); private DbClient dbClient = mock(DbClient.class, RETURNS_DEEP_STUBS); - private TestOrganizationFlags organizationFlags = TestOrganizationFlags.standalone(); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.fromUuid("foo"); private BranchFeatureRule branchFeature = new BranchFeatureRule(); + private EditionProvider editionProvider = mock(EditionProvider.class); private WsActionTester ws; @@ -269,11 +271,30 @@ public class GlobalActionTest { when(server.getVersion()).thenReturn("6.2"); when(dbClient.getDatabase().getDialect()).thenReturn(new MySql()); when(webServer.isStandalone()).thenReturn(true); + when(editionProvider.get()).thenReturn(Optional.of(EditionProvider.Edition.COMMUNITY)); String result = call(); assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString()); } + @Test + public void edition_is_not_returned_if_not_defined() { + init(); + when(editionProvider.get()).thenReturn(Optional.empty()); + + String json = call(); + assertThat(json).doesNotContain("edition"); + } + + @Test + public void edition_is_returned_if_defined() { + init(); + when(editionProvider.get()).thenReturn(Optional.of(EditionProvider.Edition.DEVELOPER)); + + String json = call(); + assertJson(json).isSimilarTo("{\"edition\":\"developer\"}"); + } + private void init() { init(new org.sonar.api.web.page.Page[] {}, new ResourceTypeTree[] {}); } @@ -293,7 +314,7 @@ public class GlobalActionTest { }}); pageRepository.start(); GlobalAction wsAction = new GlobalAction(pageRepository, settings.asConfig(), new ResourceTypes(resourceTypeTrees), server, - webServer, dbClient, organizationFlags, defaultOrganizationProvider, branchFeature, userSession); + webServer, dbClient, organizationFlags, defaultOrganizationProvider, branchFeature, userSession, editionProvider); ws = new WsActionTester(wsAction); wsAction.start(); } -- 2.39.5