]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10718 add field "edition" to WS api/navigation/global
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 31 May 2018 20:21:36 +0000 (22:21 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 12 Jun 2018 18:21:00 +0000 (20:21 +0200)
server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalAction.java
server/sonar-server/src/main/resources/org/sonar/server/ui/ws/global-example.json
server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java

index 1b5edecc03f23ab5136fe66d2ec7ce2e4923481a..8a41bff21107585cf81efa517d2b3f03d3757f30 100644 (file)
@@ -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();
     }
index ec18d44b485a471aa952a5099e2bd471dbd34614..97dd61de33f30ac9d894a5e1a6316e68584b3b73 100644 (file)
@@ -29,5 +29,6 @@
   "branchesEnabled": false,
   "defaultOrganization": "key_foo",
   "canAdmin": false,
-  "standalone": true
+  "standalone": true,
+  "edition": "community"
 }
index 264155932787a936cd595b10a925cd8b675597a6..6f1b4b532021c2b0e320f7eafb62911bbd31a78f 100644 (file)
@@ -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();
   }