aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorstanislavh <stanislav.honcharov@sonarsource.com>2024-01-30 18:15:29 +0100
committersonartech <sonartech@sonarsource.com>2024-01-31 20:03:37 +0000
commit68cdc84139405f39dac06d55ad37f636e12e6a7f (patch)
treec16a4b35ab906c6405a81ce3d6aa48b726c3dfb7 /server
parentd2cca0a99b38a2b0068a104f5c3cf068927bac73 (diff)
downloadsonarqube-68cdc84139405f39dac06d55ad37f636e12e6a7f.tar.gz
sonarqube-68cdc84139405f39dac06d55ad37f636e12e6a7f.zip
SONAR-21455 Adjust logic of showing application warning
Diffstat (limited to 'server')
-rw-r--r--server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx84
-rw-r--r--server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx18
2 files changed, 60 insertions, 42 deletions
diff --git a/server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx b/server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx
index 1a6e477c88b..1c8eefaafaa 100644
--- a/server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx
@@ -98,18 +98,17 @@ export default function BranchOverviewRenderer(props: BranchOverviewRendererProp
});
const intl = useIntl();
- // Check if any potentially missing uncomputed measure is not present
- const isMissingMeasures = [
- MetricKey.new_accepted_issues,
- MetricKey.security_issues,
- MetricKey.maintainability_issues,
- MetricKey.reliability_issues,
- ].some((key) => !measures.find((measure) => measure.metric.key === key));
-
const leakPeriod = component.qualifier === ComponentQualifier.Application ? appLeak : period;
const isNewCodeTab = tab === MeasuresTabs.New;
const hasNewCodeMeasures = measures.some((m) => isDiffMetric(m.metric.key));
+ // Check if any potentially missing uncomputed measure is not present
+ const isMissingMeasures = (
+ isNewCodeTab
+ ? [MetricKey.new_accepted_issues]
+ : [MetricKey.security_issues, MetricKey.maintainability_issues, MetricKey.reliability_issues]
+ ).some((key) => !measures.find((measure) => measure.metric.key === key));
+
React.useEffect(() => {
// Open Overall tab by default if there are no new measures.
if (loadingStatus === false && !hasNewCodeMeasures && isNewCodeTab) {
@@ -120,6 +119,15 @@ export default function BranchOverviewRenderer(props: BranchOverviewRendererProp
/* eslint-disable-next-line react-hooks/exhaustive-deps */
}, [loadingStatus, hasNewCodeMeasures]);
+ const appReanalysisWarning =
+ isMissingMeasures && isApplication(component.qualifier) ? (
+ <FlagMessage variant="warning" className="sw-my-4">
+ {intl.formatMessage({
+ id: 'overview.missing_project_data.APP',
+ })}
+ </FlagMessage>
+ ) : null;
+
return (
<>
<FirstAnalysisNextStepsNotif
@@ -171,40 +179,38 @@ export default function BranchOverviewRenderer(props: BranchOverviewRendererProp
isNewCode={isNewCodeTab}
onTabSelect={selectTab}
>
- {hasNewCodeMeasures &&
- isMissingMeasures &&
- isApplication(component.qualifier) && (
- <FlagMessage variant="warning" className="sw-my-4">
- {intl.formatMessage({
- id: 'overview.missing_project_data.APP',
- })}
- </FlagMessage>
- )}
-
- {isNewCodeTab && !hasNewCodeMeasures && (
- <MeasuresPanelNoNewCode
- branch={branch}
- component={component}
- period={period}
- />
- )}
-
- {isNewCodeTab && hasNewCodeMeasures && (
- <NewCodeMeasuresPanel
- qgStatuses={qgStatuses}
- branch={branch}
- component={component}
- measures={measures}
- />
+ {isNewCodeTab && (
+ <>
+ {hasNewCodeMeasures ? (
+ <>
+ {appReanalysisWarning}
+ <NewCodeMeasuresPanel
+ qgStatuses={qgStatuses}
+ branch={branch}
+ component={component}
+ measures={measures}
+ />
+ </>
+ ) : (
+ <MeasuresPanelNoNewCode
+ branch={branch}
+ component={component}
+ period={period}
+ />
+ )}
+ </>
)}
{!isNewCodeTab && (
- <OverallCodeMeasuresPanel
- branch={branch}
- qgStatuses={qgStatuses}
- component={component}
- measures={measures}
- />
+ <>
+ {appReanalysisWarning}
+ <OverallCodeMeasuresPanel
+ branch={branch}
+ qgStatuses={qgStatuses}
+ component={component}
+ measures={measures}
+ />
+ </>
)}
</TabsPanel>
diff --git a/server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx b/server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx
index a761cf832c1..ef86a352004 100644
--- a/server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx
@@ -473,17 +473,29 @@ describe('application overview', () => {
expect(await screen.findByText('portfolio.app.empty')).toBeInTheDocument();
});
+ it.each([['new_accepted_issues', MetricKey.new_accepted_issues]])(
+ 'should ask to reanalyze all projects if a project is not computed for %s',
+ async (missingMetricKey) => {
+ measuresHandler.deleteComponentMeasure('foo', missingMetricKey as MetricKey);
+
+ renderBranchOverview({ component });
+
+ expect(await screen.findByText('overview.missing_project_data.APP')).toBeInTheDocument();
+ },
+ );
+
it.each([
- ['new_accepted_issues', MetricKey.new_accepted_issues],
['security_issues', MetricKey.security_issues],
['reliability_issues', MetricKey.reliability_issues],
['maintainability_issues', MetricKey.maintainability_issues],
])(
- 'should ask to reanalyze all projects if a project is not computed',
+ 'should ask to reanalyze all projects if a project is not computed for %s',
async (missingMetricKey) => {
- measuresHandler.deleteComponentMeasure('foo', missingMetricKey as MetricKey);
+ const { ui, user } = getPageObjects();
+ measuresHandler.deleteComponentMeasure('foo', missingMetricKey as MetricKey);
renderBranchOverview({ component });
+ await user.click(await ui.overallCodeButton.find());
expect(await screen.findByText('overview.missing_project_data.APP')).toBeInTheDocument();
},