]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-13098 Don't show issue data on rule details if type is hotspot
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Mon, 17 Feb 2020 13:04:40 +0000 (14:04 +0100)
committerSonarTech <sonartech@sonarsource.com>
Fri, 21 Feb 2020 19:46:16 +0000 (20:46 +0100)
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsIssues.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/RuleDetailsIssues-test.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/__snapshots__/RuleDetailsIssues-test.tsx.snap

index c9d3bb09341af9ad03fe32529e2ca0d9538436d9..10e5f8729d2c1efb1cd73719b91fdb05a019b8ba 100644 (file)
@@ -258,7 +258,7 @@ export default class RuleDetails extends React.PureComponent<Props, State> {
             />
           )}
 
-          {!ruleDetails.isTemplate && (
+          {!ruleDetails.isTemplate && ruleDetails.type !== 'SECURITY_HOTSPOT' && (
             <RuleDetailsIssues organization={organization} ruleDetails={ruleDetails} />
           )}
         </DeferredSpinner>
index 1e0f7e79365395b67d46696e05114f75cc94ec0a..58b549ec6437767985a5d3f8d016e70d71896c26 100644 (file)
@@ -47,7 +47,7 @@ interface State {
 
 export class RuleDetailsIssues extends React.PureComponent<Props, State> {
   mounted = false;
-  state: State = { loading: true };
+  state: State = { loading: false };
 
   componentDidMount() {
     this.mounted = true;
@@ -64,19 +64,19 @@ export class RuleDetailsIssues extends React.PureComponent<Props, State> {
     this.mounted = false;
   }
 
-  getBaseIssuesQuery = () => ({
-    resolved: 'false',
-    rules: this.props.ruleDetails.key,
-    types:
-      this.props.ruleDetails.type === 'SECURITY_HOTSPOT'
-        ? ['VULNERABILITY', 'SECURITY_HOTSPOT'].join()
-        : undefined
-  });
-
   fetchIssues = () => {
+    const {
+      ruleDetails: { key },
+      organization
+    } = this.props;
+
     this.setState({ loading: true });
     getFacet(
-      { ...this.getBaseIssuesQuery(), organization: this.props.organization },
+      {
+        resolved: 'false',
+        rules: key,
+        organization
+      },
       'projects'
     ).then(
       ({ facet, response }) => {
@@ -101,11 +101,16 @@ export class RuleDetailsIssues extends React.PureComponent<Props, State> {
   };
 
   renderTotal = () => {
+    const {
+      ruleDetails: { key },
+      organization
+    } = this.props;
+
     const { total } = this.state;
     if (total === undefined) {
       return null;
     }
-    const path = getIssuesUrl(this.getBaseIssuesQuery(), this.props.organization);
+    const path = getIssuesUrl({ resolved: 'false', rules: key }, organization);
 
     const totalItem = (
       <span className="little-spacer-left">
@@ -125,9 +130,14 @@ export class RuleDetailsIssues extends React.PureComponent<Props, State> {
   };
 
   renderProject = (project: Project) => {
+    const {
+      ruleDetails: { key },
+      organization
+    } = this.props;
+
     const path = getIssuesUrl(
-      { ...this.getBaseIssuesQuery(), projects: project.key },
-      this.props.organization
+      { resolved: 'false', rules: key, projects: project.key },
+      organization
     );
     return (
       <tr key={project.key}>
index 75f01fab7927b9f4971509127086ebe8376d2ef3..2f5a411e1eb58cbf8715fe1fd078d8cd2535e7cb 100644 (file)
@@ -44,30 +44,26 @@ beforeEach(() => {
 });
 
 it('should fetch issues and render', async () => {
-  await check('BUG', undefined);
-});
-
-it('should handle hotspot rules', async () => {
-  await check('SECURITY_HOTSPOT', ['VULNERABILITY', 'SECURITY_HOTSPOT']);
-});
-
-async function check(ruleType: T.RuleType, requestedTypes: T.RuleType[] | undefined) {
-  const wrapper = shallow(
-    <RuleDetailsIssues
-      appState={{ branchesEnabled: false }}
-      organization="org"
-      ruleDetails={{ key: 'foo', type: ruleType }}
-    />
-  );
+  const wrapper = shallowRender();
   await waitAndUpdate(wrapper);
   expect(wrapper).toMatchSnapshot();
   expect(getFacet).toBeCalledWith(
     {
       organization: 'org',
       resolved: 'false',
-      rules: 'foo',
-      types: requestedTypes && requestedTypes.join()
+      rules: 'foo'
     },
     'projects'
   );
+});
+
+function shallowRender(props: Partial<RuleDetailsIssues['props']> = {}) {
+  return shallow(
+    <RuleDetailsIssues
+      appState={{ branchesEnabled: false }}
+      organization="org"
+      ruleDetails={{ key: 'foo', type: 'BUG' }}
+      {...props}
+    />
+  );
 }
index a3b6fbe185ab2f559f951a6043ae123f994abcd9..0ae5deeb761a0e153c7f1a4997f99bed7915099b 100644 (file)
@@ -28,7 +28,6 @@ exports[`should fetch issues and render 1`] = `
               "query": Object {
                 "resolved": "false",
                 "rules": "foo",
-                "types": undefined,
               },
             }
           }
@@ -71,7 +70,6 @@ exports[`should fetch issues and render 1`] = `
                     "projects": "sample-key",
                     "resolved": "false",
                     "rules": "foo",
-                    "types": undefined,
                   },
                 }
               }
@@ -101,123 +99,6 @@ exports[`should fetch issues and render 1`] = `
                     "projects": "example-key",
                     "resolved": "false",
                     "rules": "foo",
-                    "types": undefined,
-                  },
-                }
-              }
-            >
-              5
-            </Link>
-          </td>
-        </tr>
-      </tbody>
-    </table>
-  </DeferredSpinner>
-</div>
-`;
-
-exports[`should handle hotspot rules 1`] = `
-<div
-  className="js-rule-issues coding-rule-section"
->
-  <div
-    className="coding-rule-section-separator"
-  />
-  <DeferredSpinner
-    loading={false}
-    timeout={100}
-  >
-    <h3
-      className="coding-rules-detail-title"
-    >
-      coding_rules.issues
-      <span
-        className="little-spacer-left"
-      >
-        (
-        <Link
-          onlyActiveOnIndex={false}
-          style={Object {}}
-          to={
-            Object {
-              "pathname": "/organizations/org/issues",
-              "query": Object {
-                "resolved": "false",
-                "rules": "foo",
-                "types": "VULNERABILITY,SECURITY_HOTSPOT",
-              },
-            }
-          }
-        >
-          18
-        </Link>
-        )
-      </span>
-    </h3>
-    <table
-      className="coding-rules-detail-list coding-rules-most-violated-projects"
-    >
-      <tbody>
-        <tr>
-          <td
-            className="coding-rules-detail-list-name"
-            colSpan={2}
-          >
-            coding_rules.most_violating_projects
-          </td>
-        </tr>
-        <tr
-          key="sample-key"
-        >
-          <td
-            className="coding-rules-detail-list-name"
-          >
-            Sample
-          </td>
-          <td
-            className="coding-rules-detail-list-parameters"
-          >
-            <Link
-              onlyActiveOnIndex={false}
-              style={Object {}}
-              to={
-                Object {
-                  "pathname": "/organizations/org/issues",
-                  "query": Object {
-                    "projects": "sample-key",
-                    "resolved": "false",
-                    "rules": "foo",
-                    "types": "VULNERABILITY,SECURITY_HOTSPOT",
-                  },
-                }
-              }
-            >
-              13
-            </Link>
-          </td>
-        </tr>
-        <tr
-          key="example-key"
-        >
-          <td
-            className="coding-rules-detail-list-name"
-          >
-            Example
-          </td>
-          <td
-            className="coding-rules-detail-list-parameters"
-          >
-            <Link
-              onlyActiveOnIndex={false}
-              style={Object {}}
-              to={
-                Object {
-                  "pathname": "/organizations/org/issues",
-                  "query": Object {
-                    "projects": "example-key",
-                    "resolved": "false",
-                    "rules": "foo",
-                    "types": "VULNERABILITY,SECURITY_HOTSPOT",
                   },
                 }
               }