issue.spec.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  3. import UnsubscribeIssue from 'sentry/views/unsubscribe/issue';
  4. describe('UnsubscribeIssue', function () {
  5. const params = {orgId: 'acme', id: '9876'};
  6. let mockUpdate: jest.Mock;
  7. let mockGet: jest.Mock;
  8. beforeEach(() => {
  9. mockUpdate = MockApiClient.addMockResponse({
  10. url: '/organizations/acme/unsubscribe/issue/9876/?_=signature-value',
  11. method: 'POST',
  12. status: 201,
  13. });
  14. mockGet = MockApiClient.addMockResponse({
  15. url: '/organizations/acme/unsubscribe/issue/9876/',
  16. method: 'GET',
  17. status: 200,
  18. body: {
  19. viewUrl: 'https://acme.sentry.io/issue/9876/',
  20. type: 'issue',
  21. displayName: 'Bruce Wayne',
  22. },
  23. });
  24. });
  25. it('loads data from the API based on URL parameters', async function () {
  26. const {router, routerProps} = initializeOrg({
  27. router: {
  28. location: {query: {_: 'signature-value'}},
  29. params,
  30. },
  31. });
  32. render(
  33. <UnsubscribeIssue {...routerProps} location={router.location} params={params} />,
  34. {router}
  35. );
  36. expect(await screen.findByText('selected issue')).toBeInTheDocument();
  37. expect(screen.getByText('workflow notifications')).toBeInTheDocument();
  38. expect(screen.getByRole('button', {name: 'Unsubscribe'})).toBeInTheDocument();
  39. expect(mockGet).toHaveBeenCalled();
  40. });
  41. it('makes an API request when the form is submitted', async function () {
  42. const {router, routerProps} = initializeOrg({
  43. router: {
  44. location: {query: {_: 'signature-value'}},
  45. params,
  46. },
  47. });
  48. render(
  49. <UnsubscribeIssue {...routerProps} location={router.location} params={params} />,
  50. {router}
  51. );
  52. expect(await screen.findByText('selected issue')).toBeInTheDocument();
  53. const button = screen.getByRole('button', {name: 'Unsubscribe'});
  54. await userEvent.click(button);
  55. expect(mockUpdate).toHaveBeenCalledWith(
  56. '/organizations/acme/unsubscribe/issue/9876/?_=signature-value',
  57. expect.objectContaining({data: {cancel: 1}})
  58. );
  59. });
  60. });