Browse Source

fix(release-health): Empty grouped sessions response (#34886)

When there is a group by, but there is no data, the group array is empty
so we aren't generating a series for plotting (i.e. an empty array is
returned).

Co-authored-by: Shruthilaya <shruthilaya.jaganathan@sentry.io>
Nar Saynorath 2 years ago
parent
commit
c3dada1f8c

+ 13 - 0
static/app/views/dashboardsV2/widgetCard/transformSessionsResponseToSeries.tsx

@@ -1,3 +1,4 @@
+import {t} from 'sentry/locale';
 import {MetricsApiResponse, SessionApiResponse} from 'sentry/types';
 import {Series} from 'sentry/types/echarts';
 import {defined} from 'sentry/utils';
@@ -32,6 +33,18 @@ export function transformSessionsResponseToSeries(
 
   const results: Series[] = [];
 
+  if (!response.groups.length) {
+    return [
+      {
+        seriesName: `(${t('no results')})`,
+        data: response.intervals.map(interval => ({
+          name: interval,
+          value: 0,
+        })),
+      },
+    ];
+  }
+
   response.groups.forEach(group => {
     Object.keys(group.series).forEach(field => {
       // if `sum(session)` or `count_unique(user)` are not

+ 25 - 0
tests/fixtures/js-stubs/sessions.js

@@ -830,3 +830,28 @@ export function SessionUserCountByStatusByRelease() {
     ],
   };
 }
+
+export function SessionEmptyGroupedResponse() {
+  return {
+    start: '2022-01-15T00:00:00Z',
+    end: '2022-01-29T00:00:00Z',
+    query: '',
+    intervals: [
+      '2022-01-15T00:00:00Z',
+      '2022-01-16T00:00:00Z',
+      '2022-01-17T00:00:00Z',
+      '2022-01-18T00:00:00Z',
+      '2022-01-19T00:00:00Z',
+      '2022-01-20T00:00:00Z',
+      '2022-01-21T00:00:00Z',
+      '2022-01-22T00:00:00Z',
+      '2022-01-23T00:00:00Z',
+      '2022-01-24T00:00:00Z',
+      '2022-01-25T00:00:00Z',
+      '2022-01-26T00:00:00Z',
+      '2022-01-27T00:00:00Z',
+      '2022-01-28T00:00:00Z',
+    ],
+    groups: [],
+  };
+}

+ 1 - 0
tests/fixtures/js-stubs/types.tsx

@@ -103,6 +103,7 @@ type TestStubFixtures = {
   SentryAppToken: OverridableStub;
   SentryAppWebhookRequest: OverridableStub;
   ServiceIncident: OverridableStub;
+  SessionEmptyGroupedResponse: SimpleStub;
   SessionStatusCountByProjectInPeriod: SimpleStub;
   SessionStatusCountByReleaseInPeriod: SimpleStub;
   SessionTotalCountByProjectIn24h: SimpleStub;

+ 26 - 0
tests/js/spec/views/dashboardsV2/widgetCard/transformSessionsResponseToSeries.spec.tsx

@@ -1097,6 +1097,32 @@ describe('transformSessionsResponseToSeries', function () {
     ]);
   });
 
+  it('returns a single series with 0 as values when there are no groups returned', () => {
+    expect(
+      transformSessionsResponseToSeries(TestStubs.SessionEmptyGroupedResponse(), [], [])
+    ).toEqual([
+      {
+        seriesName: '(no results)',
+        data: [
+          {name: '2022-01-15T00:00:00Z', value: 0},
+          {name: '2022-01-16T00:00:00Z', value: 0},
+          {name: '2022-01-17T00:00:00Z', value: 0},
+          {name: '2022-01-18T00:00:00Z', value: 0},
+          {name: '2022-01-19T00:00:00Z', value: 0},
+          {name: '2022-01-20T00:00:00Z', value: 0},
+          {name: '2022-01-21T00:00:00Z', value: 0},
+          {name: '2022-01-22T00:00:00Z', value: 0},
+          {name: '2022-01-23T00:00:00Z', value: 0},
+          {name: '2022-01-24T00:00:00Z', value: 0},
+          {name: '2022-01-25T00:00:00Z', value: 0},
+          {name: '2022-01-26T00:00:00Z', value: 0},
+          {name: '2022-01-27T00:00:00Z', value: 0},
+          {name: '2022-01-28T00:00:00Z', value: 0},
+        ],
+      },
+    ]);
+  });
+
   it('supports legend aliases', () => {
     expect(
       transformSessionsResponseToSeries(