From 26c54237c1c3eb870b19c0a38176229a24c2cfe1 Mon Sep 17 00:00:00 2001 From: Klaudio Sinani Date: Thu, 5 May 2022 15:46:31 +0200 Subject: [PATCH] SONAR-16316 Add new `regulatoryReportFeatureEnabled` feature flag --- .../org/sonar/server/ui/ws/GlobalAction.java | 20 +++++++++++++--- .../sonar/server/ui/ws/global-example.json | 1 + .../sonar/server/ui/ws/GlobalActionTest.java | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/GlobalAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/GlobalAction.java index 456c2500b05..a5b145d8d41 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/GlobalAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/GlobalAction.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; import org.sonar.api.Startable; import org.sonar.api.config.Configuration; import org.sonar.api.platform.Server; @@ -35,7 +36,6 @@ 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.core.platform.PlatformEditionProvider; import org.sonar.db.DbClient; import org.sonar.db.DbSession; @@ -56,6 +56,7 @@ import static org.sonar.core.config.WebConstants.SONAR_LF_ENABLE_GRAVATAR; import static org.sonar.core.config.WebConstants.SONAR_LF_GRAVATAR_SERVER_URL; import static org.sonar.core.config.WebConstants.SONAR_LF_LOGO_URL; import static org.sonar.core.config.WebConstants.SONAR_LF_LOGO_WIDTH_PX; +import static org.sonar.core.platform.EditionProvider.Edition; import static org.sonar.core.platform.EditionProvider.Edition.DATACENTER; import static org.sonar.core.platform.EditionProvider.Edition.ENTERPRISE; import static org.sonar.process.ProcessProperties.Property.SONARCLOUD_ENABLED; @@ -74,6 +75,8 @@ public class GlobalAction implements NavigationWsAction, Startable { RATING_GRID, DEVELOPER_AGGREGATED_INFO_DISABLED); + private static final String REGULATORY_REPORT_FEATURE_ENABLED_FLAG = "regulatoryReportFeatureEnabled"; + private final Map systemSettingValuesByKey; private final PageRepository pageRepository; @@ -151,6 +154,7 @@ public class GlobalAction implements NavigationWsAction, Startable { writeInstanceUsesDefaultAdminCredentials(json); writeMultipleAlmEnabled(json); writeProjectImportFeature(json); + writeRegulatoryReportFeature(json); editionProvider.get().ifPresent(e -> json.prop("edition", e.name().toLowerCase(Locale.ENGLISH))); writeNeedIssueSync(json); json.prop("standalone", webServer.isStandalone()); @@ -218,8 +222,8 @@ public class GlobalAction implements NavigationWsAction, Startable { } private void writeProjectImportFeature(JsonWriter json) { - EditionProvider.Edition edition = editionProvider.get().orElse(null); - boolean isEnabled = Arrays.asList(ENTERPRISE, DATACENTER).contains(edition); + Edition edition = editionProvider.get().orElse(null); + boolean isEnabled = isEditionEEorDCE(edition); json.prop("projectImportFeatureEnabled", isEnabled); } @@ -232,4 +236,14 @@ public class GlobalAction implements NavigationWsAction, Startable { private void writeWebAnalytics(JsonWriter json) { webAnalyticsLoader.getUrlPathToJs().ifPresent(p -> json.prop("webAnalyticsJsPath", p)); } + + private void writeRegulatoryReportFeature(JsonWriter json) { + Edition edition = editionProvider.get().orElse(null); + boolean isEnabled = isEditionEEorDCE(edition); + json.prop(REGULATORY_REPORT_FEATURE_ENABLED_FLAG, isEnabled); + } + + private static boolean isEditionEEorDCE(@Nullable Edition edition) { + return Arrays.asList(ENTERPRISE, DATACENTER).contains(edition); + } } diff --git a/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/ui/ws/global-example.json b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/ui/ws/global-example.json index 7a110f13d78..a9779b55d41 100644 --- a/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/ui/ws/global-example.json +++ b/server/sonar-webserver-webapi/src/main/resources/org/sonar/server/ui/ws/global-example.json @@ -27,6 +27,7 @@ "productionDatabase": true, "branchesEnabled": false, "projectImportFeatureEnabled": false, + "regulatoryReportFeatureEnabled": false, "canAdmin": false, "standalone": true, "edition": "community" diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java index 135663c706c..cd3263e4f5b 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java @@ -278,6 +278,7 @@ public class GlobalActionTest { assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":false}"); } + @Test public void return_need_issue_sync() { init(); @@ -296,6 +297,29 @@ public class GlobalActionTest { assertJson(call()).isSimilarTo("{\"canAdmin\":true}"); } + @Test + public void regulatory_report_feature_enabled_ee_dce() { + init(); + when(editionProvider.get()).thenReturn(Optional.of(ENTERPRISE)); + assertJson(call()).isSimilarTo("{\"regulatoryReportFeatureEnabled\":true}"); + + when(editionProvider.get()).thenReturn(Optional.of(DATACENTER)); + assertJson(call()).isSimilarTo("{\"regulatoryReportFeatureEnabled\":true}"); + } + + @Test + public void regulatory_report_feature_disabled_ce_de() { + init(); + when(editionProvider.get()).thenReturn(Optional.of(COMMUNITY)); + assertJson(call()).isSimilarTo("{\"regulatoryReportFeatureEnabled\":false}"); + + when(editionProvider.get()).thenReturn(Optional.of(DEVELOPER)); + assertJson(call()).isSimilarTo("{\"regulatoryReportFeatureEnabled\":false}"); + + when(editionProvider.get()).thenReturn(Optional.empty()); + assertJson(call()).isSimilarTo("{\"regulatoryReportFeatureEnabled\":false}"); + } + @Test public void instance_uses_default_admin_credentials() { init(); -- 2.39.5