index.spec.jsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import {
  2. render,
  3. renderGlobalModal,
  4. screen,
  5. userEvent,
  6. waitForElementToBeRemoved,
  7. } from 'sentry-test/reactTestingLibrary';
  8. import {closeModal, openModal} from 'sentry/actionCreators/modal';
  9. import GlobalModal from 'sentry/components/globalModal';
  10. import ModalStore from 'sentry/stores/modalStore';
  11. describe('GlobalModal', function () {
  12. beforeEach(() => {
  13. ModalStore.reset();
  14. });
  15. it('uses actionCreators to open and close Modal', async function () {
  16. renderGlobalModal();
  17. openModal(() => <div data-test-id="modal-test">Hi</div>);
  18. expect(screen.getByTestId('modal-test')).toBeInTheDocument();
  19. closeModal();
  20. await waitForElementToBeRemoved(screen.queryByTestId('modal-test'));
  21. expect(screen.queryByTestId('modal-test')).not.toBeInTheDocument();
  22. });
  23. it('calls onClose handler when modal is clicked out of', function () {
  24. render(<GlobalModal />);
  25. const closeSpy = jest.fn();
  26. openModal(
  27. ({Header}) => (
  28. <div id="modal-test">
  29. <Header closeButton>Header</Header>Hi
  30. </div>
  31. ),
  32. {onClose: closeSpy}
  33. );
  34. userEvent.click(screen.getByRole('button', {name: 'Close Modal'}));
  35. expect(closeSpy).toHaveBeenCalled();
  36. });
  37. it('calls onClose handler when closeModal prop is called', function () {
  38. render(<GlobalModal />);
  39. const closeSpy = jest.fn();
  40. openModal(({closeModal: cm}) => <button onClick={cm}>Yo</button>, {
  41. onClose: closeSpy,
  42. });
  43. userEvent.click(screen.getByRole('button', {name: 'Yo'}));
  44. expect(closeSpy).toHaveBeenCalled();
  45. });
  46. it('calls ignores click out when the allowClickClose option is false', async function () {
  47. render(
  48. <div>
  49. <div data-test-id="outside-test">Hello</div>
  50. <GlobalModal />
  51. </div>
  52. );
  53. openModal(
  54. ({Header}) => (
  55. <div data-test-id="modal-test">
  56. <Header closeButton>Header</Header>Hi
  57. </div>
  58. ),
  59. {allowClickClose: false}
  60. );
  61. expect(screen.getByTestId('modal-test')).toBeInTheDocument();
  62. userEvent.click(screen.getByTestId('outside-test'));
  63. expect(screen.getByTestId('modal-test')).toBeInTheDocument();
  64. userEvent.click(screen.getByRole('button', {name: 'Close Modal'}));
  65. await waitForElementToBeRemoved(screen.queryByTestId('modal-test'));
  66. expect(screen.queryByTestId('modal-test')).not.toBeInTheDocument();
  67. });
  68. });