import {mountWithTheme} from 'sentry-test/enzyme';
import {addErrorMessage} from 'sentry/actionCreators/indicator';
import {trackAdhocEvent} from 'sentry/utils/analytics';
import OrganizationJoinRequest from 'sentry/views/organizationJoinRequest';
jest.mock('sentry/utils/analytics', () => ({
trackAdhocEvent: jest.fn(),
}));
jest.mock('sentry/actionCreators/indicator');
describe('OrganizationJoinRequest', function () {
const org = TestStubs.Organization({slug: 'test-org'});
const endpoint = `/organizations/${org.slug}/join-request/`;
beforeEach(function () {
trackAdhocEvent.mockClear();
MockApiClient.clearMockResponses();
});
it('renders', function () {
const wrapper = mountWithTheme(
);
expect(wrapper.find('h3').text()).toBe('Request to Join');
expect(wrapper.find('EmailField').exists()).toBe(true);
expect(wrapper.find('button[aria-label="Request to Join"]').exists()).toBe(true);
expect(trackAdhocEvent).toHaveBeenCalledWith({
eventKey: 'join_request.viewed',
org_slug: org.slug,
});
});
it('submits', async function () {
const postMock = MockApiClient.addMockResponse({
url: endpoint,
method: 'POST',
});
const wrapper = mountWithTheme(
);
wrapper
.find('input[id="email"]')
.simulate('change', {target: {value: 'email@example.com'}});
wrapper.find('form').simulate('submit');
expect(postMock).toHaveBeenCalled();
await tick();
wrapper.update();
expect(wrapper.find('h3').text()).toBe('Request Sent');
expect(wrapper.find('EmailField').exists()).toBe(false);
expect(wrapper.find('button[aria-label="Request to Join"]').exists()).toBe(false);
});
it('errors', async function () {
const postMock = MockApiClient.addMockResponse({
url: endpoint,
method: 'POST',
statusCode: 400,
});
const wrapper = mountWithTheme(
);
wrapper
.find('input[id="email"]')
.simulate('change', {target: {value: 'email@example.com'}});
wrapper.find('form').simulate('submit');
expect(postMock).toHaveBeenCalled();
await tick();
wrapper.update();
expect(addErrorMessage).toHaveBeenCalled();
expect(wrapper.find('h3').text()).toBe('Request to Join');
expect(wrapper.find('EmailField').exists()).toBe(true);
expect(wrapper.find('button[aria-label="Request to Join"]').exists()).toBe(true);
});
it('cancels', function () {
const spy = jest.spyOn(window.location, 'assign').mockImplementation(() => {});
const wrapper = mountWithTheme(
);
wrapper.find('button[aria-label="Cancel"]').simulate('click');
expect(spy).toHaveBeenCalledWith(`/auth/login/${org.slug}/`);
});
});