import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import UnsubscribeIssue from 'sentry/views/unsubscribe/issue';
describe('UnsubscribeIssue', function () {
const params = {orgId: 'acme', id: '9876'};
let mockUpdate, mockGet;
beforeEach(() => {
mockUpdate = MockApiClient.addMockResponse({
url: '/organizations/acme/unsubscribe/issue/9876/?_=signature-value',
method: 'POST',
status: 201,
});
mockGet = MockApiClient.addMockResponse({
url: '/organizations/acme/unsubscribe/issue/9876/',
method: 'GET',
status: 200,
body: {
viewUrl: 'https://acme.sentry.io/issue/9876/',
type: 'issue',
displayName: 'Bruce Wayne',
},
});
});
it('loads data from the API based on URL parameters', async function () {
const {router, routerProps, routerContext} = initializeOrg({
router: {
location: {query: {_: 'signature-value'}},
params,
},
});
render(
,
{context: routerContext}
);
expect(await screen.findByText('selected issue')).toBeInTheDocument();
expect(screen.getByText('workflow notifications')).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, routerContext} = initializeOrg({
router: {
location: {query: {_: 'signature-value'}},
params,
},
});
render(
,
{context: routerContext}
);
expect(await screen.findByText('selected issue')).toBeInTheDocument();
const button = screen.getByRole('button', {name: 'Unsubscribe'});
await userEvent.click(button);
expect(mockUpdate).toHaveBeenCalledWith(
'/organizations/acme/unsubscribe/issue/9876/?_=signature-value',
expect.objectContaining({data: {cancel: 1}})
);
});
});