import {Organization} from 'sentry-fixture/organization'; import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary'; import {addErrorMessage} from 'sentry/actionCreators/indicator'; import OrganizationJoinRequest from 'sentry/views/organizationJoinRequest'; jest.mock('sentry/utils/analytics', () => ({ trackAdhocEvent: jest.fn(), })); jest.mock('sentry/actionCreators/indicator'); describe('OrganizationJoinRequest', function () { const org = Organization({slug: 'test-org'}); const endpoint = `/organizations/${org.slug}/join-request/`; beforeEach(function () { MockApiClient.clearMockResponses(); }); it('renders', function () { render( ); expect(screen.getByRole('heading', {name: 'Request to Join'})).toBeInTheDocument(); expect(screen.getByRole('textbox', {name: 'Email Address'})).toBeInTheDocument(); expect(screen.getByRole('button', {name: 'Request to Join'})).toBeInTheDocument(); }); it('submits', async function () { const postMock = MockApiClient.addMockResponse({ url: endpoint, method: 'POST', }); render( ); await userEvent.type( screen.getByRole('textbox', {name: 'Email Address'}), 'email@example.com{enter}' ); expect(postMock).toHaveBeenCalled(); expect( await screen.findByRole('heading', {name: 'Request Sent'}) ).toBeInTheDocument(); expect( screen.queryByRole('button', {name: 'Request to Join'}) ).not.toBeInTheDocument(); }); it('errors', async function () { const postMock = MockApiClient.addMockResponse({ url: endpoint, method: 'POST', statusCode: 400, }); render( ); await userEvent.type( screen.getByRole('textbox', {name: 'Email Address'}), 'email@example.com{enter}' ); await waitFor(() => { expect(postMock).toHaveBeenCalled(); expect(addErrorMessage).toHaveBeenCalled(); }); expect(screen.getByRole('heading', {name: 'Request to Join'})).toBeInTheDocument(); }); it('cancels', async function () { const spy = jest.spyOn(window.location, 'assign').mockImplementation(() => {}); render( ); await userEvent.click(screen.getByRole('button', {name: 'Cancel'})); expect(spy).toHaveBeenCalledWith(`/auth/login/${org.slug}/`); }); });