data.spec.jsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import {
  2. MEPState,
  3. METRIC_SEARCH_SETTING_PARAM,
  4. } from 'sentry/utils/performance/contexts/metricsEnhancedSetting';
  5. import {generatePerformanceEventView} from 'sentry/views/performance/data';
  6. describe('generatePerformanceEventView()', function () {
  7. it('generates default values', function () {
  8. const result = generatePerformanceEventView({
  9. query: {},
  10. });
  11. expect(result.id).toBeUndefined();
  12. expect(result.name).toEqual('Performance');
  13. expect(result.fields.length).toBeGreaterThanOrEqual(7);
  14. expect(result.query).toEqual('');
  15. expect(result.getQueryWithAdditionalConditions()).toEqual('event.type:transaction');
  16. expect(result.sorts).toEqual([{kind: 'desc', field: 'tpm'}]);
  17. expect(result.statsPeriod).toEqual('24h');
  18. });
  19. it('applies sort from location', function () {
  20. const result = generatePerformanceEventView({
  21. query: {
  22. sort: ['-p50', '-count'],
  23. },
  24. });
  25. expect(result.sorts).toEqual([{kind: 'desc', field: 'p50'}]);
  26. expect(result.statsPeriod).toEqual('24h');
  27. });
  28. it('does not override statsPeriod from location', function () {
  29. const result = generatePerformanceEventView({
  30. query: {
  31. statsPeriod: ['90d', '45d'],
  32. },
  33. });
  34. expect(result.start).toBeUndefined();
  35. expect(result.end).toBeUndefined();
  36. expect(result.statsPeriod).toEqual('90d');
  37. });
  38. it('does not apply range when start and end are present', function () {
  39. const result = generatePerformanceEventView({
  40. query: {
  41. start: '2020-04-25T12:00:00',
  42. end: '2020-05-25T12:00:00',
  43. },
  44. });
  45. expect(result.start).toEqual('2020-04-25T12:00:00.000');
  46. expect(result.end).toEqual('2020-05-25T12:00:00.000');
  47. expect(result.statsPeriod).toBeUndefined();
  48. });
  49. it('converts bare query into transaction name wildcard', function () {
  50. const result = generatePerformanceEventView({
  51. query: {
  52. query: 'things.update',
  53. },
  54. });
  55. expect(result.query).toEqual(expect.stringContaining('transaction:*things.update*'));
  56. expect(result.getQueryWithAdditionalConditions()).toEqual(
  57. expect.stringContaining('event.type:transaction')
  58. );
  59. });
  60. it('bare query overwrites transaction condition', function () {
  61. const result = generatePerformanceEventView({
  62. query: {
  63. query: 'things.update transaction:thing.gone',
  64. },
  65. });
  66. expect(result.query).toEqual(expect.stringContaining('transaction:*things.update*'));
  67. expect(result.getQueryWithAdditionalConditions()).toEqual(
  68. expect.stringContaining('event.type:transaction')
  69. );
  70. expect(result.query).toEqual(expect.not.stringContaining('transaction:thing.gone'));
  71. });
  72. it('retains tag filter conditions', function () {
  73. const result = generatePerformanceEventView({
  74. query: {
  75. query: 'key:value tag:value',
  76. },
  77. });
  78. expect(result.query).toEqual(expect.stringContaining('key:value'));
  79. expect(result.query).toEqual(expect.stringContaining('tag:value'));
  80. expect(result.getQueryWithAdditionalConditions()).toEqual(
  81. expect.stringContaining('event.type:transaction')
  82. );
  83. });
  84. it('gets the right column', function () {
  85. const result = generatePerformanceEventView({
  86. query: {
  87. query: 'key:value tag:value',
  88. },
  89. });
  90. expect(result.fields).toEqual(
  91. expect.arrayContaining([expect.objectContaining({field: 'user_misery()'})])
  92. );
  93. expect(result.fields).toEqual(
  94. expect.arrayContaining([expect.objectContaining({field: 'count_miserable(user)'})])
  95. );
  96. expect(result.fields).toEqual(
  97. expect.arrayContaining([expect.objectContaining({field: 'apdex()'})])
  98. );
  99. });
  100. it('removes unsupported tokens for limited search', function () {
  101. const result = generatePerformanceEventView(
  102. {
  103. query: {
  104. query: 'tag:value transaction:*auth*',
  105. [METRIC_SEARCH_SETTING_PARAM]: MEPState.metricsOnly,
  106. },
  107. },
  108. [],
  109. {withStaticFilters: true}
  110. );
  111. expect(result.query).toEqual('transaction:*auth*');
  112. });
  113. });