]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10452 Empty "On new code" sections on Measures page (#3119)
authorPascal Mugnier <pascal.mugnier@sonarsource.com>
Wed, 7 Mar 2018 10:48:11 +0000 (11:48 +0100)
committerGitHub <noreply@github.com>
Wed, 7 Mar 2018 10:48:11 +0000 (11:48 +0100)
server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.js
server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/DomainFacet-test.js
server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap

index 6ea4bc1afd1b33e541e30f1fd0a20b8b894fd203..47338d7ac0dbfd43bf6e952e397c8a5620dbec1b 100644 (file)
@@ -67,9 +67,10 @@ export default class DomainFacet extends React.PureComponent {
     const { domain, selected } = this.props;
     const measureSelected = domain.measures.find(measure => measure.metric.key === selected);
     const overviewSelected = domain.name === selected && hasBubbleChart(domain.name);
-    return measureSelected
-      ? [getLocalizedMetricName(measureSelected.metric)]
-      : overviewSelected ? [translate('component_measures.domain_overview')] : [];
+    if (measureSelected) {
+      return [getLocalizedMetricName(measureSelected.metric)];
+    }
+    return overviewSelected ? [translate('component_measures.domain_overview')] : [];
   };
 
   renderItemFacetStat = (item /*: MeasureEnhanced */) =>
@@ -80,11 +81,19 @@ export default class DomainFacet extends React.PureComponent {
     const items = addMeasureCategories(domain.name, filterMeasures(domain.measures));
     const hasCategories = items.some(item => typeof item === 'string');
     const translateMetric = hasCategories ? getLocalizedCategoryMetricName : getLocalizedMetricName;
-    const sortedItems = sortMeasures(domain.name, items);
+    let sortedItems = sortMeasures(domain.name, items);
+
+    sortedItems = sortedItems.filter((item, index) => {
+      return (
+        typeof item !== 'string' ||
+        (index + 1 !== sortedItems.length && typeof sortedItems[index + 1] !== 'string')
+      );
+    });
+
     return sortedItems.map(
       item =>
         typeof item === 'string' ? (
-          <span key={item} className="facet search-navigator-facet facet-category">
+          <span className="facet search-navigator-facet facet-category" key={item}>
             <span className="facet-name">
               {translate('component_measures.facet_category', item)}
             </span>
index a33095b87f67e88f3eae53020fbf8fe10feb3e68..551d11831e8fcdc211d8f86ff734c20348f3a673 100644 (file)
@@ -69,3 +69,51 @@ it('should render closed', () => {
   const wrapper = shallow(<DomainFacet {...PROPS} open={false} />);
   expect(wrapper.find('FacetItemsList')).toHaveLength(0);
 });
+
+it('should not display subtitles of new measures if there is none', () => {
+  const domain = {
+    name: 'Reliability',
+    measures: [
+      {
+        metric: { key: 'bugs', type: 'INT', name: 'Bugs', domain: 'Reliability' },
+        value: '5'
+      }
+    ]
+  };
+
+  expect(
+    shallow(
+      <DomainFacet
+        domain={domain}
+        onChange={() => {}}
+        onToggle={() => {}}
+        open={true}
+        selected={'foo'}
+      />
+    )
+  ).toMatchSnapshot();
+});
+
+it('should not display subtitles of new measures if there is none, even on last line', () => {
+  const domain = {
+    name: 'Reliability',
+    measures: [
+      {
+        metric: { key: 'new_bugs', type: 'INT', name: 'New Bugs', domain: 'Reliability' },
+        value: '5'
+      }
+    ]
+  };
+
+  expect(
+    shallow(
+      <DomainFacet
+        domain={domain}
+        onChange={() => {}}
+        onToggle={() => {}}
+        open={true}
+        selected={'foo'}
+      />
+    )
+  ).toMatchSnapshot();
+});
index 864073e6026f780e9afaf8388800ea8a81f955b5..aad1591cb6766a4ff9bfc01a3bd27445b24b6585 100644 (file)
@@ -263,3 +263,155 @@ exports[`should display facet item list with bugs selected 1`] = `
   </FacetItemsList>
 </FacetBox>
 `;
+
+exports[`should not display subtitles of new measures if there is none 1`] = `
+<FacetBox
+  property="Reliability"
+>
+  <FacetHeader
+    name="Reliability"
+    onClick={[Function]}
+    open={true}
+    values={Array []}
+  />
+  <FacetItemsList>
+    <FacetItem
+      active={false}
+      disabled={false}
+      halfWidth={false}
+      key="Reliability"
+      name={
+        <span
+          id="measure-overview-Reliability-name"
+        >
+          component_measures.domain_overview
+        </span>
+      }
+      onClick={[Function]}
+      stat={
+        <BubblesIcon
+          size={14}
+        />
+      }
+      value="Reliability"
+    />
+    <span
+      className="facet search-navigator-facet facet-category"
+      key="overall_category"
+    >
+      <span
+        className="facet-name"
+      >
+        component_measures.facet_category.overall_category
+      </span>
+    </span>
+    <FacetItem
+      active={false}
+      disabled={false}
+      halfWidth={false}
+      key="bugs"
+      name={
+        <span
+          className="big-spacer-left"
+          id="measure-bugs-name"
+        >
+          Bugs
+        </span>
+      }
+      onClick={[Function]}
+      stat={
+        <FacetMeasureValue
+          measure={
+            Object {
+              "metric": Object {
+                "domain": "Reliability",
+                "key": "bugs",
+                "name": "Bugs",
+                "type": "INT",
+              },
+              "value": "5",
+            }
+          }
+        />
+      }
+      value="bugs"
+    />
+  </FacetItemsList>
+</FacetBox>
+`;
+
+exports[`should not display subtitles of new measures if there is none, even on last line 1`] = `
+<FacetBox
+  property="Reliability"
+>
+  <FacetHeader
+    name="Reliability"
+    onClick={[Function]}
+    open={true}
+    values={Array []}
+  />
+  <FacetItemsList>
+    <FacetItem
+      active={false}
+      disabled={false}
+      halfWidth={false}
+      key="Reliability"
+      name={
+        <span
+          id="measure-overview-Reliability-name"
+        >
+          component_measures.domain_overview
+        </span>
+      }
+      onClick={[Function]}
+      stat={
+        <BubblesIcon
+          size={14}
+        />
+      }
+      value="Reliability"
+    />
+    <span
+      className="facet search-navigator-facet facet-category"
+      key="new_code_category"
+    >
+      <span
+        className="facet-name"
+      >
+        component_measures.facet_category.new_code_category
+      </span>
+    </span>
+    <FacetItem
+      active={false}
+      disabled={false}
+      halfWidth={false}
+      key="new_bugs"
+      name={
+        <span
+          className="big-spacer-left"
+          id="measure-new_bugs-name"
+        >
+          New Bugs
+        </span>
+      }
+      onClick={[Function]}
+      stat={
+        <FacetMeasureValue
+          measure={
+            Object {
+              "metric": Object {
+                "domain": "Reliability",
+                "key": "new_bugs",
+                "name": "New Bugs",
+                "type": "INT",
+              },
+              "value": "5",
+            }
+          }
+        />
+      }
+      value="new_bugs"
+    />
+  </FacetItemsList>
+</FacetBox>
+`;