import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import UnsubscribeProject from 'sentry/views/unsubscribe/project'; describe('UnsubscribeProject', function () { const params = {orgId: 'acme', id: '9876'}; let mockUpdate: jest.Mock; let mockGet: jest.Mock; beforeEach(() => { mockUpdate = MockApiClient.addMockResponse({ url: '/organizations/acme/unsubscribe/project/9876/?_=signature-value', method: 'POST', status: 201, }); mockGet = MockApiClient.addMockResponse({ url: '/organizations/acme/unsubscribe/project/9876/', method: 'GET', status: 200, body: { viewUrl: 'https://acme.sentry.io/projects/react/', type: 'project', slug: 'react', displayName: 'Bruce Wayne', }, }); }); it('loads data from the API based on URL parameters', async function () { const {router, routerProps} = initializeOrg({ router: {location: {query: {_: 'signature-value'}}, params}, }); render( , {router} ); expect(await screen.findByText('acme / react')).toBeInTheDocument(); expect(screen.getByRole('button', {name: 'Unsubscribe'})).toBeInTheDocument(); expect(mockGet).toHaveBeenCalled(); }); it('makes an API request when the form is submitted', async function () { const {router, routerProps} = initializeOrg({ router: {location: {query: {_: 'signature-value'}}, params}, }); render( , {router} ); expect(await screen.findByText('acme / react')).toBeInTheDocument(); const button = screen.getByRole('button', {name: 'Unsubscribe'}); await userEvent.click(button); expect(mockUpdate).toHaveBeenCalledWith( '/organizations/acme/unsubscribe/project/9876/?_=signature-value', expect.objectContaining({data: {cancel: 1}}) ); }); });