utils.spec.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import {NO_QUERY_ID} from 'sentry/utils/metrics/constants';
  2. import {MetricDisplayType, MetricQueryType} from 'sentry/utils/metrics/types';
  3. import type {Widget} from 'sentry/views/dashboards/types';
  4. import {DisplayType} from 'sentry/views/dashboards/types';
  5. import {getMetricQueries, toMetricDisplayType} from './utils';
  6. describe('getMetricQueries function', () => {
  7. it('should return metricQueries with correct parameters without dashboardFilters', () => {
  8. const widget = {
  9. queries: [
  10. {
  11. aggregates: ['avg(d:transactions/duration@milisecond)'],
  12. conditions: 'foo:bar',
  13. columns: ['release'],
  14. name: 'query_1',
  15. },
  16. ],
  17. } as Widget;
  18. const metricQueries = getMetricQueries(widget);
  19. expect(metricQueries).toEqual([
  20. {
  21. groupBy: ['release'],
  22. id: NO_QUERY_ID,
  23. mri: 'd:transactions/duration@milisecond',
  24. name: 'query_1',
  25. op: 'avg',
  26. query: 'foo:bar',
  27. type: MetricQueryType.QUERY,
  28. },
  29. ]);
  30. });
  31. it('should return metricQueries with correct parameters with dashboardFilters', () => {
  32. const widget = {
  33. queries: [
  34. {
  35. aggregates: ['avg(d:transactions/duration@milisecond)'],
  36. conditions: 'foo:bar',
  37. columns: ['release'],
  38. name: 'query_1',
  39. },
  40. {
  41. aggregates: ['avg(d:transactions/duration@milisecond)'],
  42. conditions: 'foo:baz',
  43. columns: [],
  44. name: 'query_2',
  45. },
  46. ],
  47. } as Widget;
  48. const metricQueries = getMetricQueries(widget, {release: ['1.0']});
  49. expect(metricQueries).toEqual([
  50. {
  51. groupBy: ['release'],
  52. id: NO_QUERY_ID,
  53. mri: 'd:transactions/duration@milisecond',
  54. name: 'query_1',
  55. op: 'avg',
  56. query: 'foo:bar release:1.0',
  57. type: MetricQueryType.QUERY,
  58. },
  59. {
  60. groupBy: [],
  61. id: NO_QUERY_ID,
  62. mri: 'd:transactions/duration@milisecond',
  63. name: 'query_2',
  64. op: 'avg',
  65. query: 'foo:baz release:1.0',
  66. type: MetricQueryType.QUERY,
  67. },
  68. ]);
  69. });
  70. it('should return metricQueries with correct parameters with multiple dashboardFilters', () => {
  71. const widget = {
  72. queries: [
  73. {
  74. aggregates: ['avg(d:transactions/duration@milisecond)'],
  75. conditions: '',
  76. columns: ['release'],
  77. name: 'query_1',
  78. },
  79. ],
  80. } as Widget;
  81. const metricQueries = getMetricQueries(widget, {release: ['1.0', '2.0']});
  82. expect(metricQueries).toEqual([
  83. {
  84. groupBy: ['release'],
  85. id: NO_QUERY_ID,
  86. mri: 'd:transactions/duration@milisecond',
  87. name: 'query_1',
  88. op: 'avg',
  89. query: 'release:[1.0,2.0]',
  90. type: MetricQueryType.QUERY,
  91. },
  92. ]);
  93. });
  94. });
  95. describe('toMetricDisplayType', () => {
  96. it('should return the displayType if it is a valid MetricDisplayType', () => {
  97. expect(MetricDisplayType.BAR).toEqual(toMetricDisplayType(DisplayType.BAR));
  98. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(DisplayType.LINE));
  99. expect(MetricDisplayType.AREA).toEqual(toMetricDisplayType(DisplayType.AREA));
  100. });
  101. it('should return MetricDisplayType.LINE if the displayType is invalid or unsupported', () => {
  102. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(DisplayType.BIG_NUMBER));
  103. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(DisplayType.TABLE));
  104. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(DisplayType.TOP_N));
  105. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(undefined));
  106. expect(MetricDisplayType.LINE).toEqual(toMetricDisplayType(''));
  107. });
  108. });