123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- 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([
- {
- id: 0,
- 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([
- {
- id: 0,
- 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([
- {
- id: 0,
- 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'},
- },
- {
- id: 1,
- 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([
- {
- id: 0,
- 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'},
- },
- {
- id: 1,
- 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([
- {
- id: 0,
- 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([
- {
- id: 'invalid',
- mri: 'd:transactions/duration@millisecond',
- op: 1,
- query: 12,
- groupBy: true,
- displayType: 'aasfcsdf',
- focusedSeries: {},
- powerUserMode: 1,
- sort: {name: 1, order: 'invalid'},
- },
- ])
- )
- ).toEqual([
- {
- id: 0,
- 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([
- {
- id: 0,
- mri: 'd:transactions/duration@millisecond',
- },
- {
- // Missing MRI
- },
- {
- // Mallformed MRI
- mri: 'transactions/duration@millisecond',
- },
- {
- // Duplicate id
- id: 0,
- mri: 'd:transactions/duration@second',
- },
- ])
- )
- ).toEqual([
- {
- id: 0,
- 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([
- {
- id: 0,
- 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([
- {
- id: 0,
- 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('adds missing ids', () => {
- const widgetWithId = (id: number | undefined) => ({
- id,
- 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'},
- });
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- widgetWithId(0),
- widgetWithId(undefined),
- widgetWithId(2),
- widgetWithId(undefined),
- widgetWithId(3),
- ])
- )
- ).toEqual([
- widgetWithId(0),
- widgetWithId(1),
- widgetWithId(2),
- widgetWithId(4),
- widgetWithId(3),
- ]);
- });
- it('resets the id of a single widget to 0', () => {
- expect(
- parseMetricWidgetsQueryParam(
- JSON.stringify([
- {
- id: 5,
- 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'},
- },
- ])
- )
- ).toEqual([
- {
- id: 0,
- 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'},
- },
- ]);
- });
- });
|