aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatteo Mara <matteo.mara@sonarsource.com>2022-09-23 15:53:13 +0200
committersonartech <sonartech@sonarsource.com>2022-09-26 20:03:17 +0000
commitbb479f8716776ab8a68a9fd24ddabc578f889dc9 (patch)
tree9d7cba2ab17295daca347e39600ac0576ba17bf3
parentba965061cb213d8897a8575c95d2ad944671d2eb (diff)
downloadsonarqube-bb479f8716776ab8a68a9fd24ddabc578f889dc9.tar.gz
sonarqube-bb479f8716776ab8a68a9fd24ddabc578f889dc9.zip
SONAR-17117 migrate project import feature trigger to /api/features/list endpoint
-rw-r--r--server/sonar-web/src/main/js/apps/projectDump/ProjectDumpApp.tsx22
-rw-r--r--server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/types/appstate.ts1
-rw-r--r--server/sonar-web/src/main/js/types/features.ts3
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/ui/ws/GlobalAction.java7
-rw-r--r--server/sonar-webserver-webapi/src/main/resources/org/sonar/server/ui/ws/global-example.json1
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/GlobalActionTest.java25
7 files changed, 14 insertions, 51 deletions
diff --git a/server/sonar-web/src/main/js/apps/projectDump/ProjectDumpApp.tsx b/server/sonar-web/src/main/js/apps/projectDump/ProjectDumpApp.tsx
index 471e6f22599..0e9dd698d05 100644
--- a/server/sonar-web/src/main/js/apps/projectDump/ProjectDumpApp.tsx
+++ b/server/sonar-web/src/main/js/apps/projectDump/ProjectDumpApp.tsx
@@ -20,11 +20,13 @@
import * as React from 'react';
import { getActivity } from '../../api/ce';
import { getStatus } from '../../api/project-dump';
-import withAppStateContext from '../../app/components/app-state/withAppStateContext';
+import withAvailableFeatures, {
+ WithAvailableFeaturesProps
+} from '../../app/components/available-features/withAvailableFeatures';
import withComponentContext from '../../app/components/componentContext/withComponentContext';
import { throwGlobalError } from '../../helpers/error';
import { translate } from '../../helpers/l10n';
-import { AppState } from '../../types/appstate';
+import { Feature } from '../../types/features';
import { DumpStatus, DumpTask } from '../../types/project-dump';
import { ActivityRequestParameters, TaskStatuses, TaskTypes } from '../../types/tasks';
import { Component } from '../../types/types';
@@ -34,8 +36,7 @@ import './styles.css';
const POLL_INTERNAL = 5000;
-interface Props {
- appState: AppState;
+interface Props extends WithAvailableFeaturesProps {
component: Component;
}
@@ -84,10 +85,7 @@ export class ProjectDumpApp extends React.Component<Props, State> {
}
getLastTaskOfEachType(componentKey: string) {
- const {
- appState: { projectImportFeatureEnabled }
- } = this.props;
-
+ const projectImportFeatureEnabled = this.props.hasFeature(Feature.ProjectImport);
const all = projectImportFeatureEnabled
? [
this.getLastTask(componentKey, TaskTypes.ProjectExport),
@@ -154,10 +152,8 @@ export class ProjectDumpApp extends React.Component<Props, State> {
};
render() {
- const {
- component,
- appState: { projectImportFeatureEnabled }
- } = this.props;
+ const { component } = this.props;
+ const projectImportFeatureEnabled = this.props.hasFeature(Feature.ProjectImport);
const { lastAnalysisTask, lastExportTask, lastImportTask, status } = this.state;
return (
@@ -200,4 +196,4 @@ export class ProjectDumpApp extends React.Component<Props, State> {
}
}
-export default withComponentContext(withAppStateContext(ProjectDumpApp));
+export default withComponentContext(withAvailableFeatures(ProjectDumpApp));
diff --git a/server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-test.tsx b/server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-test.tsx
index 928cf3dd6ff..255e926dca1 100644
--- a/server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projectDump/__tests__/ProjectDumpApp-test.tsx
@@ -22,7 +22,7 @@ import * as React from 'react';
import { getActivity } from '../../../api/ce';
import { getStatus } from '../../../api/project-dump';
import { mockComponent } from '../../../helpers/mocks/component';
-import { mockAppState, mockDumpStatus, mockDumpTask } from '../../../helpers/testMocks';
+import { mockDumpStatus, mockDumpTask } from '../../../helpers/testMocks';
import { waitAndUpdate } from '../../../helpers/testUtils';
import { TaskStatuses } from '../../../types/tasks';
import { ProjectDumpApp } from '../ProjectDumpApp';
@@ -58,7 +58,7 @@ it('should render correctly', async () => {
expect(wrapper).toMatchSnapshot('loaded');
- wrapper = shallowRender({ appState: mockAppState({ projectImportFeatureEnabled: false }) });
+ wrapper = shallowRender({ hasFeature: jest.fn().mockReturnValue(false) });
await waitAndUpdate(wrapper);
expect(wrapper).toMatchSnapshot('loaded without import');
});
@@ -91,7 +91,7 @@ it('should poll for task status update', async () => {
function shallowRender(overrides: Partial<ProjectDumpApp['props']> = {}) {
return shallow<ProjectDumpApp>(
<ProjectDumpApp
- appState={mockAppState({ projectImportFeatureEnabled: true })}
+ hasFeature={jest.fn().mockReturnValue(true)}
component={mockComponent()}
{...overrides}
/>
diff --git a/server/sonar-web/src/main/js/types/appstate.ts b/server/sonar-web/src/main/js/types/appstate.ts
index 62555148764..8124f143bb1 100644
--- a/server/sonar-web/src/main/js/types/appstate.ts
+++ b/server/sonar-web/src/main/js/types/appstate.ts
@@ -29,7 +29,6 @@ export interface AppState {
canAdmin?: boolean;
edition?: EditionKey;
globalPages?: Extension[];
- projectImportFeatureEnabled?: boolean;
instanceUsesDefaultAdminCredentials?: boolean;
multipleAlmEnabled?: boolean;
needIssueSync?: boolean;
diff --git a/server/sonar-web/src/main/js/types/features.ts b/server/sonar-web/src/main/js/types/features.ts
index cb4210542bc..87363ff5c2f 100644
--- a/server/sonar-web/src/main/js/types/features.ts
+++ b/server/sonar-web/src/main/js/types/features.ts
@@ -20,5 +20,6 @@
export enum Feature {
MonoRepositoryPullRequestDecoration = 'monorepo',
- RegulatoryReport = 'regulatory-reports'
+ RegulatoryReport = 'regulatory-reports',
+ ProjectImport = 'project-import'
}
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 e08588d7149..0eaf0ec4ac5 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
@@ -140,7 +140,6 @@ public class GlobalAction implements NavigationWsAction, Startable {
writeBranchSupport(json);
writeInstanceUsesDefaultAdminCredentials(json);
writeMultipleAlmEnabled(json);
- writeProjectImportFeature(json);
editionProvider.get().ifPresent(e -> json.prop("edition", e.name().toLowerCase(Locale.ENGLISH)));
writeNeedIssueSync(json);
json.prop("standalone", webServer.isStandalone());
@@ -207,12 +206,6 @@ public class GlobalAction implements NavigationWsAction, Startable {
json.prop("multipleAlmEnabled", multipleAlmFeatureProvider.enabled());
}
- private void writeProjectImportFeature(JsonWriter json) {
- Edition edition = editionProvider.get().orElse(null);
- boolean isEnabled = isEditionEEorDCE(edition);
- json.prop("projectImportFeatureEnabled", isEnabled);
- }
-
private void writeNeedIssueSync(JsonWriter json) {
try (DbSession dbSession = dbClient.openSession(false)) {
json.prop("needIssueSync", issueIndexSyncChecker.isIssueSyncInProgress(dbSession));
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..700eee264bc 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
@@ -26,7 +26,6 @@
"version": "6.2",
"productionDatabase": true,
"branchesEnabled": false,
- "projectImportFeatureEnabled": 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 b37184ad49b..efa3d9568ec 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
@@ -52,7 +52,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.sonar.core.platform.EditionProvider.Edition.*;
import static org.sonar.test.JsonAssert.assertJson;
public class GlobalActionTest {
@@ -239,30 +238,6 @@ public class GlobalActionTest {
}
@Test
- public void project_import_feature_enabled_ee_dce() {
- init();
- when(editionProvider.get()).thenReturn(Optional.of(ENTERPRISE));
- assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":true}");
-
- when(editionProvider.get()).thenReturn(Optional.of(DATACENTER));
- assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":true}");
- }
-
- @Test
- public void project_import_feature_disabled_ce_de() {
- init();
- when(editionProvider.get()).thenReturn(Optional.of(COMMUNITY));
- assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":false}");
-
- when(editionProvider.get()).thenReturn(Optional.of(DEVELOPER));
- assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":false}");
-
- when(editionProvider.get()).thenReturn(Optional.empty());
- assertJson(call()).isSimilarTo("{\"projectImportFeatureEnabled\":false}");
- }
-
-
- @Test
public void return_need_issue_sync() {
init();
when(indexSyncProgressChecker.isIssueSyncInProgress(any())).thenReturn(true);