eventIdField.spec.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import theme from 'sentry/utils/theme';
  3. import EventIdField from 'sentry/views/settings/components/dataScrubbing/modals/form/eventIdField';
  4. import {
  5. EventId,
  6. EventIdStatus,
  7. } from 'sentry/views/settings/components/dataScrubbing/types';
  8. const handleUpdateEventId = jest.fn();
  9. const eventIdValue = '887ab369df634e74aea708bcafe1a175';
  10. function renderComponent({
  11. value = eventIdValue,
  12. status,
  13. }: Omit<EventId, 'value'> & Partial<Pick<EventId, 'value'>>) {
  14. return mountWithTheme(
  15. <EventIdField onUpdateEventId={handleUpdateEventId} eventId={{value, status}} />
  16. );
  17. }
  18. describe('EventIdField', () => {
  19. it('default render', () => {
  20. const wrapper = renderComponent({value: '', status: EventIdStatus.UNDEFINED});
  21. const eventIdField = wrapper.find('Field');
  22. expect(eventIdField.exists()).toBe(true);
  23. expect(eventIdField.find('FieldLabel').text()).toEqual('Event ID (Optional)');
  24. const eventIdFieldHelp =
  25. 'Providing an event ID will automatically provide you a list of suggested sources';
  26. expect(eventIdField.find('QuestionTooltip').prop('title')).toEqual(eventIdFieldHelp);
  27. expect(eventIdField.find('Tooltip').prop('title')).toEqual(eventIdFieldHelp);
  28. const eventIdFieldInput = eventIdField.find('input');
  29. expect(eventIdFieldInput.prop('value')).toEqual('');
  30. expect(eventIdFieldInput.prop('placeholder')).toEqual('XXXXXXXXXXXXXX');
  31. eventIdFieldInput.simulate('change', {
  32. target: {value: '887ab369df634e74aea708bcafe1a175'},
  33. });
  34. eventIdFieldInput.simulate('blur');
  35. expect(handleUpdateEventId).toHaveBeenCalled();
  36. });
  37. it('LOADING status', () => {
  38. const wrapper = renderComponent({status: EventIdStatus.LOADING});
  39. const eventIdField = wrapper.find('Field');
  40. const eventIdFieldInput = eventIdField.find('input');
  41. expect(eventIdFieldInput.prop('value')).toEqual(eventIdValue);
  42. expect(eventIdField.find('FieldError')).toHaveLength(0);
  43. expect(eventIdField.find('CloseIcon')).toHaveLength(0);
  44. expect(eventIdField.find('FormSpinner')).toHaveLength(1);
  45. });
  46. it('LOADED status', () => {
  47. const wrapper = renderComponent({status: EventIdStatus.LOADED});
  48. const eventIdField = wrapper.find('Field');
  49. const eventIdFieldInput = eventIdField.find('input');
  50. expect(eventIdFieldInput.prop('value')).toEqual(eventIdValue);
  51. expect(eventIdField.find('FieldError')).toHaveLength(0);
  52. expect(eventIdField.find('CloseIcon')).toHaveLength(0);
  53. const iconCheckmark = eventIdField.find('IconCheckmark');
  54. expect(iconCheckmark).toHaveLength(1);
  55. const iconCheckmarkColor = iconCheckmark.prop('color');
  56. expect(theme[iconCheckmarkColor]).toBe(theme.green300);
  57. });
  58. it('ERROR status', () => {
  59. const wrapper = renderComponent({status: EventIdStatus.ERROR});
  60. const eventIdField = wrapper.find('Field');
  61. const eventIdFieldInput = eventIdField.find('input');
  62. expect(eventIdFieldInput.prop('value')).toEqual(eventIdValue);
  63. expect(eventIdField.find('FieldError')).toHaveLength(1);
  64. const closeIcon = eventIdField.find('CloseIcon');
  65. expect(closeIcon).toHaveLength(1);
  66. expect(closeIcon.find('Tooltip').prop('title')).toEqual('Clear event ID');
  67. const fieldErrorReason = eventIdField.find('FieldErrorReason');
  68. expect(fieldErrorReason).toHaveLength(1);
  69. expect(fieldErrorReason.text()).toEqual(
  70. 'An error occurred while fetching the suggestions based on this event ID'
  71. );
  72. });
  73. it('INVALID status', () => {
  74. const wrapper = renderComponent({status: EventIdStatus.INVALID});
  75. const eventIdField = wrapper.find('Field');
  76. const eventIdFieldInput = eventIdField.find('input');
  77. expect(eventIdFieldInput.prop('value')).toEqual(eventIdValue);
  78. expect(eventIdField.find('FieldError')).toHaveLength(1);
  79. expect(eventIdField.find('CloseIcon')).toHaveLength(1);
  80. const fieldErrorReason = eventIdField.find('FieldErrorReason');
  81. expect(fieldErrorReason).toHaveLength(1);
  82. expect(fieldErrorReason.text()).toEqual('This event ID is invalid');
  83. });
  84. it('NOTFOUND status', () => {
  85. const wrapper = renderComponent({status: EventIdStatus.NOT_FOUND});
  86. const eventIdField = wrapper.find('Field');
  87. const eventIdFieldInput = eventIdField.find('input');
  88. expect(eventIdFieldInput.prop('value')).toEqual(eventIdValue);
  89. expect(eventIdField.find('FieldError')).toHaveLength(1);
  90. expect(eventIdField.find('CloseIcon')).toHaveLength(1);
  91. const fieldErrorReason = eventIdField.find('FieldErrorReason');
  92. expect(fieldErrorReason).toHaveLength(1);
  93. expect(fieldErrorReason.text()).toEqual(
  94. 'The chosen event ID was not found in projects you have access to'
  95. );
  96. });
  97. });