eventsGeoRequest.spec.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import {Fragment} from 'react';
  2. import {Organization} from 'fixtures/js-stubs/organization';
  3. import {Project} from 'fixtures/js-stubs/project';
  4. import {render, waitFor} from 'sentry-test/reactTestingLibrary';
  5. import EventsGeoRequest, {
  6. EventsGeoRequestProps,
  7. } from 'sentry/components/charts/eventsGeoRequest';
  8. import * as genericDiscoverQuery from 'sentry/utils/discover/genericDiscoverQuery';
  9. describe('EventsRequest', function () {
  10. const project = Project();
  11. const organization = Organization();
  12. const makeProps = (
  13. partial: Partial<EventsGeoRequestProps> = {}
  14. ): EventsGeoRequestProps => {
  15. return {
  16. api: new MockApiClient(),
  17. organization,
  18. yAxis: ['count()'],
  19. query: 'event.type:transaction',
  20. projects: [parseInt(project.id, 10)],
  21. period: '24h',
  22. start: new Date(),
  23. end: new Date(),
  24. environments: [],
  25. children: jest.fn(() => <Fragment />),
  26. ...partial,
  27. };
  28. };
  29. describe('with props changes', () => {
  30. afterEach(() => {
  31. jest.restoreAllMocks();
  32. });
  33. it('renders with loading state', async () => {
  34. jest
  35. .spyOn(genericDiscoverQuery, 'doDiscoverQuery')
  36. .mockResolvedValue([{data: 'test'}, undefined, undefined]);
  37. const mock = jest.fn(() => <Fragment />);
  38. render(<EventsGeoRequest {...makeProps()}>{mock}</EventsGeoRequest>);
  39. await waitFor(() => {
  40. expect(mock).toHaveBeenNthCalledWith(
  41. 1,
  42. expect.objectContaining({
  43. errored: false,
  44. loading: true,
  45. reloading: false,
  46. tableData: undefined,
  47. })
  48. );
  49. });
  50. });
  51. it('makes requests', async () => {
  52. jest
  53. .spyOn(genericDiscoverQuery, 'doDiscoverQuery')
  54. .mockResolvedValue([{data: 'test'}, undefined, undefined]);
  55. const mock = jest.fn(() => <Fragment />);
  56. render(<EventsGeoRequest {...makeProps()}>{mock}</EventsGeoRequest>);
  57. await waitFor(() => {
  58. expect(mock).toHaveBeenLastCalledWith(
  59. expect.objectContaining({
  60. errored: false,
  61. loading: false,
  62. reloading: false,
  63. tableData: [{data: 'test'}],
  64. })
  65. );
  66. });
  67. });
  68. it('renders with error if request errors', async () => {
  69. jest.spyOn(genericDiscoverQuery, 'doDiscoverQuery').mockRejectedValue({});
  70. const mock = jest.fn(() => <Fragment />);
  71. render(<EventsGeoRequest {...makeProps()}>{mock}</EventsGeoRequest>);
  72. await waitFor(() => {
  73. expect(mock).toHaveBeenLastCalledWith(
  74. expect.objectContaining({
  75. errored: true,
  76. loading: false,
  77. reloading: false,
  78. tableData: undefined,
  79. })
  80. );
  81. });
  82. });
  83. it.each([{query: 'event.type:error'}, {yAxis: 'failure_count()'}, {period: '12h'}])(
  84. 'rerenders if %j prop changes',
  85. async (rerenderProps: Partial<EventsGeoRequestProps>) => {
  86. jest
  87. .spyOn(genericDiscoverQuery, 'doDiscoverQuery')
  88. .mockResolvedValue([{data: 'test'}, undefined, undefined]);
  89. const mock = jest.fn(() => <Fragment />);
  90. const {rerender} = render(
  91. <EventsGeoRequest {...makeProps()}>{mock}</EventsGeoRequest>
  92. );
  93. rerender(
  94. <EventsGeoRequest {...makeProps(rerenderProps)}>{mock}</EventsGeoRequest>
  95. );
  96. await waitFor(() => {
  97. expect(genericDiscoverQuery.doDiscoverQuery).toHaveBeenNthCalledWith(
  98. 2,
  99. expect.anything(),
  100. expect.anything(),
  101. expect.objectContaining(
  102. rerenderProps.period ? {statsPeriod: rerenderProps.period} : rerenderProps
  103. )
  104. );
  105. });
  106. }
  107. );
  108. });
  109. });