]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9526 Fix cumulative facets calculation with NO_DATA
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Wed, 4 Oct 2017 15:42:36 +0000 (17:42 +0200)
committerGrégoire Aubert <gregoire.aubert@sonarsource.com>
Thu, 5 Oct 2017 08:40:08 +0000 (10:40 +0200)
server/sonar-web/src/main/js/apps/projects/__tests__/utils-test.ts
server/sonar-web/src/main/js/apps/projects/utils.ts

index d48601e76bac1903aa52e29764eb9cae51334d5a..e40971e373bc4e37514b2ca50a260c2e4d37292f 100644 (file)
@@ -38,3 +38,57 @@ describe('parseSorting', () => {
     expect(utils.parseSorting('-size')).toEqual({ sortDesc: true, sortValue: 'size' });
   });
 });
+
+describe('cumulativeMapFacetValues', () => {
+  it('should correctly cumulate facets', () => {
+    expect(
+      utils.cumulativeMapFacetValues([
+        { val: '1', count: 50 },
+        { val: '2', count: 1 },
+        { val: '3', count: 6 },
+        { val: '4', count: 2 },
+        { val: '5', count: 0 }
+      ])
+    ).toEqual({ '1': 50, '2': 9, '3': 8, '4': 2, '5': 0 });
+  });
+  it('should correctly cumulate facets with NO_DATA items', () => {
+    const expectedResult = {
+      '80.0-*': 59,
+      '70.0-80.0': 26,
+      '50.0-70.0': 15,
+      '30.0-50.0': 11,
+      '*-30.0': 7,
+      NO_DATA: 5
+    };
+    expect(
+      utils.cumulativeMapFacetValues([
+        { val: '80.0-*', count: 59 },
+        { val: '70.0-80.0', count: 11 },
+        { val: '50.0-70.0', count: 4 },
+        { val: '30.0-50.0', count: 4 },
+        { val: '*-30.0', count: 7 },
+        { val: 'NO_DATA', count: 5 }
+      ])
+    ).toEqual(expectedResult);
+    expect(
+      utils.cumulativeMapFacetValues([
+        { val: 'NO_DATA', count: 5 },
+        { val: '80.0-*', count: 59 },
+        { val: '70.0-80.0', count: 11 },
+        { val: '50.0-70.0', count: 4 },
+        { val: '30.0-50.0', count: 4 },
+        { val: '*-30.0', count: 7 }
+      ])
+    ).toEqual(expectedResult);
+    expect(
+      utils.cumulativeMapFacetValues([
+        { val: '80.0-*', count: 59 },
+        { val: '70.0-80.0', count: 11 },
+        { val: '50.0-70.0', count: 4 },
+        { val: 'NO_DATA', count: 5 },
+        { val: '30.0-50.0', count: 4 },
+        { val: '*-30.0', count: 7 }
+      ])
+    ).toEqual(expectedResult);
+  });
+});
index ab50c3fded693dd4f4e057ffaf875033dd1fc647..c8f99c27b56b37c3be3aa8855fb791a2102293f7 100644 (file)
@@ -281,13 +281,20 @@ function mapFacetValues(values: Array<{ val: string; count: number }>) {
   return map;
 }
 
-function cumulativeMapFacetValues(values: Array<{ val: string; count: number }>) {
+export function cumulativeMapFacetValues(values: Array<{ val: string; count: number }>) {
+  const noDataVal = values.find(value => value.val === 'NO_DATA');
+  const filteredValues = noDataVal ? values.filter(value => value.val !== 'NO_DATA') : values;
+
+  let sum = sumBy(filteredValues, value => value.count);
   const map: { [value: string]: number } = {};
-  let sum = sumBy(values, value => value.count);
-  values.forEach((value, index) => {
+  filteredValues.forEach((value, index) => {
     map[value.val] = index > 0 && index < values.length - 1 ? sum : value.count;
     sum -= value.count;
   });
+
+  if (noDataVal) {
+    map[noDataVal.val] = noDataVal.count;
+  }
   return map;
 }