eventIdField.spec.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  2. import EventIdField from 'sentry/views/settings/components/dataScrubbing/modals/form/eventIdField';
  3. import {EventIdStatus} from 'sentry/views/settings/components/dataScrubbing/types';
  4. const eventIdValue = '887ab369df634e74aea708bcafe1a175';
  5. describe('EventIdField', function () {
  6. it('default render', async function () {
  7. const handleUpdateEventId = jest.fn();
  8. render(
  9. <EventIdField
  10. onUpdateEventId={handleUpdateEventId}
  11. eventId={{value: '', status: EventIdStatus.UNDEFINED}}
  12. />
  13. );
  14. expect(screen.getByText('Event ID (Optional)')).toBeInTheDocument();
  15. expect(screen.getByPlaceholderText('XXXXXXXXXXXXXX')).toBeInTheDocument();
  16. expect(screen.getByRole('textbox')).toHaveValue('');
  17. await userEvent.hover(screen.getByTestId('more-information'));
  18. expect(
  19. await screen.findByText(
  20. 'Providing an event ID will automatically provide you a list of suggested sources'
  21. )
  22. ).toBeInTheDocument();
  23. await userEvent.type(
  24. screen.getByRole('textbox'),
  25. '887ab369df634e74aea708bcafe1a175{enter}'
  26. );
  27. expect(handleUpdateEventId).toHaveBeenCalled();
  28. });
  29. it('LOADING status', function () {
  30. render(
  31. <EventIdField
  32. onUpdateEventId={jest.fn()}
  33. eventId={{value: eventIdValue, status: EventIdStatus.LOADING}}
  34. />
  35. );
  36. expect(screen.getByRole('textbox')).toHaveValue(eventIdValue);
  37. expect(screen.getByTestId('saving')).toBeInTheDocument();
  38. });
  39. it('LOADED status', function () {
  40. render(
  41. <EventIdField
  42. onUpdateEventId={jest.fn()}
  43. eventId={{value: eventIdValue, status: EventIdStatus.LOADED}}
  44. />
  45. );
  46. expect(screen.getByRole('textbox')).toHaveValue(eventIdValue);
  47. expect(screen.queryByLabelText('Clear event ID')).not.toBeInTheDocument();
  48. expect(screen.getByTestId('icon-check-mark')).toBeInTheDocument();
  49. });
  50. it('ERROR status', async function () {
  51. render(
  52. <EventIdField
  53. onUpdateEventId={jest.fn()}
  54. eventId={{value: eventIdValue, status: EventIdStatus.ERROR}}
  55. />
  56. );
  57. await userEvent.hover(screen.getByTestId('icon-close'));
  58. expect(await screen.findByText('Clear event ID')).toBeInTheDocument();
  59. expect(screen.getByRole('textbox')).toHaveValue(eventIdValue);
  60. expect(
  61. screen.getByText(
  62. 'An error occurred while fetching the suggestions based on this event ID'
  63. )
  64. ).toBeInTheDocument();
  65. });
  66. it('INVALID status', async function () {
  67. render(
  68. <EventIdField
  69. onUpdateEventId={jest.fn()}
  70. eventId={{value: eventIdValue, status: EventIdStatus.INVALID}}
  71. />
  72. );
  73. expect(await screen.findByRole('textbox')).toHaveValue(eventIdValue);
  74. expect(screen.getByText('This event ID is invalid')).toBeInTheDocument();
  75. });
  76. it('NOTFOUND status', async function () {
  77. render(
  78. <EventIdField
  79. onUpdateEventId={jest.fn()}
  80. eventId={{value: eventIdValue, status: EventIdStatus.NOT_FOUND}}
  81. />
  82. );
  83. expect(await screen.findByRole('textbox')).toHaveValue(eventIdValue);
  84. expect(
  85. screen.getByText('The chosen event ID was not found in projects you have access to')
  86. ).toBeInTheDocument();
  87. });
  88. });