123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- import {parseMetricWidgetsQueryParam} from 'sentry/views/ddm/utils/parseMetricWidgetsQueryParam';
- describe('parseMetricWidgetQueryParam', () => {
- it('returns undefined for invalid param', () => {
- expect(parseMetricWidgetsQueryParam(undefined)).toBe(undefined);
- expect(parseMetricWidgetsQueryParam('')).toBe(undefined);
- expect(parseMetricWidgetsQueryParam('{}')).toBe(undefined);
- expect(parseMetricWidgetsQueryParam('true')).toBe(undefined);
- expect(parseMetricWidgetsQueryParam('2')).toBe(undefined);
- expect(parseMetricWidgetsQueryParam('"test"')).toBe(undefined);
- // empty array is not valid
- expect(parseMetricWidgetsQueryParam('[]')).toEqual(undefined);
- });
- it('returns a single widget', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: ['dist'],
- displayType: 'line',
- focusedSeries: [{seriesName: 'default', groupBy: {dist: 'default'}}],
- powerUserMode: true,
- sort: {order: 'asc'},
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: ['dist'],
- displayType: 'line',
- focusedSeries: [{seriesName: 'default', groupBy: {dist: 'default'}}],
- powerUserMode: true,
- sort: {name: undefined, order: 'asc'},
- },
- ]);
- });
- it('returns multiple widgets', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: ['dist'],
- displayType: 'line',
- focusedSeries: [{seriesName: 'default', groupBy: {dist: 'default'}}],
- powerUserMode: true,
- sort: {name: 'avg', order: 'desc'},
- },
- {
- mri: 'd:custom/sentry.event_manager.save@second',
- op: 'avg',
- query: '',
- groupBy: ['event_type'],
- displayType: 'line',
- powerUserMode: false,
- focusedSeries: [{seriesName: 'default', groupBy: {event_type: 'default'}}],
- sort: {name: 'sum', order: 'asc'},
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: ['dist'],
- displayType: 'line',
- focusedSeries: [{seriesName: 'default', groupBy: {dist: 'default'}}],
- powerUserMode: true,
- sort: {name: 'avg', order: 'desc'},
- },
- {
- mri: 'd:custom/sentry.event_manager.save@second',
- op: 'avg',
- query: '',
- groupBy: ['event_type'],
- displayType: 'line',
- powerUserMode: false,
- focusedSeries: [{seriesName: 'default', groupBy: {event_type: 'default'}}],
- sort: {name: 'sum', order: 'asc'},
- },
- ]);
- });
- it('falls back to defaults', () => {
- // Missing values
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'avg',
- query: '',
- groupBy: [],
- displayType: 'line',
- focusedSeries: [],
- powerUserMode: false,
- sort: {name: undefined, order: 'asc'},
- },
- ]);
- // Invalid values
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 1,
- query: 12,
- groupBy: true,
- displayType: 'aasfcsdf',
- focusedSeries: {},
- powerUserMode: 1,
- sort: {name: 1, order: 'invalid'},
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'avg',
- query: '',
- groupBy: [],
- displayType: 'line',
- focusedSeries: [],
- powerUserMode: false,
- sort: {name: undefined, order: 'asc'},
- },
- ]);
- });
- it('ignores invalid widgets', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- },
- {
- // Missing MRI
- },
- {
- // Mallformed MRI
- mri: 'transactions/duration@millisecond',
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'avg',
- query: '',
- groupBy: [],
- displayType: 'line',
- focusedSeries: [],
- powerUserMode: false,
- sort: {order: 'asc'},
- },
- ]);
- });
- it('returns undefined if there is no valid widget', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- // Missing MRI
- },
- ])
- )
- ).toBe(undefined);
- });
- it('handles missing array in array params', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: 'dist',
- displayType: 'line',
- focusedSeries: {seriesName: 'default', groupBy: {dist: 'default'}},
- powerUserMode: true,
- sort: {order: 'asc'},
- },
- ])
- )
- ).toEqual([
- {
- mri: 'd:transactions/duration@millisecond',
- op: 'sum',
- query: 'test:query',
- groupBy: ['dist'],
- displayType: 'line',
- focusedSeries: [{seriesName: 'default', groupBy: {dist: 'default'}}],
- powerUserMode: true,
- sort: {name: undefined, order: 'asc'},
- },
- ]);
- });
- });
|