metrics.spec.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import {doMetricsRequest} from 'sentry/actionCreators/metrics';
  2. import {Client} from 'sentry/api';
  3. import {SessionMetric} from 'sentry/utils/metrics/fields';
  4. describe('Metrics ActionCreator', function () {
  5. const api = new Client();
  6. const orgSlug = TestStubs.Organization().slug;
  7. const options = {
  8. field: [SessionMetric.SENTRY_SESSIONS_SESSION],
  9. orgSlug,
  10. cursor: undefined,
  11. environment: [],
  12. groupBy: ['session.status'],
  13. interval: '1h',
  14. limit: 5,
  15. orderBy: SessionMetric.SENTRY_SESSIONS_SESSION,
  16. project: [TestStubs.Project().id],
  17. query: 'release:123',
  18. statsPeriod: '14d',
  19. };
  20. let mock;
  21. beforeEach(function () {
  22. MockApiClient.clearMockResponses();
  23. mock = MockApiClient.addMockResponse({
  24. url: `/organizations/${orgSlug}/metrics/data/`,
  25. body: {
  26. data: [],
  27. },
  28. });
  29. });
  30. it('requests metrics data', function () {
  31. doMetricsRequest(api, options);
  32. expect(mock).toHaveBeenCalledTimes(1);
  33. expect(mock).toHaveBeenLastCalledWith(
  34. `/organizations/${orgSlug}/metrics/data/`,
  35. expect.objectContaining({
  36. query: {
  37. environment: [],
  38. field: ['sentry.sessions.session'],
  39. groupBy: ['session.status'],
  40. interval: '1h',
  41. orderBy: 'sentry.sessions.session',
  42. per_page: 5,
  43. project: ['2'],
  44. query: 'release:123',
  45. statsPeriod: '14d',
  46. },
  47. })
  48. );
  49. });
  50. it('fills in interval based on start and end', function () {
  51. doMetricsRequest(api, {
  52. ...options,
  53. statsPeriod: undefined,
  54. interval: undefined,
  55. start: '2022-01-01T00:00:00',
  56. end: '2022-03-01T00:00:00',
  57. });
  58. expect(mock).toHaveBeenCalledTimes(1);
  59. expect(mock).toHaveBeenLastCalledWith(
  60. `/organizations/${orgSlug}/metrics/data/`,
  61. expect.objectContaining({
  62. query: {
  63. environment: [],
  64. field: ['sentry.sessions.session'],
  65. groupBy: ['session.status'],
  66. interval: '4h',
  67. orderBy: 'sentry.sessions.session',
  68. per_page: 5,
  69. project: ['2'],
  70. query: 'release:123',
  71. start: '2022-01-01T00:00:00.000',
  72. end: '2022-03-01T00:00:00.000',
  73. },
  74. })
  75. );
  76. });
  77. it('ignores falsy fields', function () {
  78. doMetricsRequest(api, {
  79. ...options,
  80. field: [SessionMetric.SENTRY_SESSIONS_SESSION, ''],
  81. });
  82. expect(mock).toHaveBeenCalledTimes(1);
  83. expect(mock).toHaveBeenLastCalledWith(
  84. `/organizations/${orgSlug}/metrics/data/`,
  85. expect.objectContaining({
  86. query: expect.objectContaining({
  87. field: ['sentry.sessions.session'],
  88. }),
  89. })
  90. );
  91. });
  92. });