]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-21455 Adjust logic of showing application warning
authorstanislavh <stanislav.honcharov@sonarsource.com>
Tue, 30 Jan 2024 17:15:29 +0000 (18:15 +0100)
committersonartech <sonartech@sonarsource.com>
Wed, 31 Jan 2024 20:03:37 +0000 (20:03 +0000)
server/sonar-web/src/main/js/apps/overview/branches/BranchOverviewRenderer.tsx
server/sonar-web/src/main/js/apps/overview/branches/__tests__/BranchOverview-it.tsx

index 1a6e477c88bbc4596fc9958f9f37278fbf928829..1c8eefaafaa70642b9996e72902c502a6df82d07 100644 (file)
@@ -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>
 
index a761cf832c1e10ab006868b528355d72a7901680..ef86a35200461430174859a898f35956ca17ad53 100644 (file)
@@ -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();
     },