});
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) {
/* 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
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>
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();
},