shareModal.spec.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {act, renderGlobalModal, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  2. import {openModal} from 'sentry/actionCreators/modal';
  3. import GroupStore from 'sentry/stores/groupStore';
  4. import ModalStore from 'sentry/stores/modalStore';
  5. import ShareIssueModal from 'sentry/views/issueDetails/actions/shareModal';
  6. describe('shareModal', () => {
  7. const project = TestStubs.Project();
  8. const organization = TestStubs.Organization();
  9. const onToggle = jest.fn();
  10. beforeEach(() => {
  11. GroupStore.init();
  12. });
  13. afterEach(() => {
  14. ModalStore.reset();
  15. GroupStore.reset();
  16. MockApiClient.clearMockResponses();
  17. jest.clearAllMocks();
  18. });
  19. it('should share on open', async () => {
  20. const group = TestStubs.Group();
  21. GroupStore.add([group]);
  22. const issuesApi = MockApiClient.addMockResponse({
  23. url: `/projects/${organization.slug}/${project.slug}/issues/`,
  24. method: 'PUT',
  25. body: {...group, isPublic: true, shareId: '12345'},
  26. });
  27. renderGlobalModal();
  28. act(() =>
  29. openModal(modalProps => (
  30. <ShareIssueModal
  31. {...modalProps}
  32. groupId={group.id}
  33. organization={organization}
  34. projectSlug={project.slug}
  35. onToggle={onToggle}
  36. />
  37. ))
  38. );
  39. expect(screen.getByText('Share Issue')).toBeInTheDocument();
  40. expect(await screen.findByRole('button', {name: 'Copy Link'})).toBeInTheDocument();
  41. expect(issuesApi).toHaveBeenCalledTimes(1);
  42. expect(onToggle).toHaveBeenCalledTimes(1);
  43. });
  44. it('should unshare', async () => {
  45. const group = TestStubs.Group({isPublic: true, shareId: '12345'});
  46. GroupStore.add([group]);
  47. const issuesApi = MockApiClient.addMockResponse({
  48. url: `/projects/${organization.slug}/${project.slug}/issues/`,
  49. method: 'PUT',
  50. body: {...group, isPublic: false, shareId: null},
  51. });
  52. renderGlobalModal();
  53. act(() =>
  54. openModal(modalProps => (
  55. <ShareIssueModal
  56. {...modalProps}
  57. groupId={group.id}
  58. organization={organization}
  59. projectSlug={project.slug}
  60. onToggle={onToggle}
  61. />
  62. ))
  63. );
  64. await userEvent.click(screen.getByLabelText('Unshare'));
  65. expect(await screen.findByRole('button', {name: 'Close'})).toBeInTheDocument();
  66. expect(issuesApi).toHaveBeenCalledTimes(1);
  67. expect(onToggle).toHaveBeenCalledTimes(1);
  68. });
  69. });