import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary';
import ConfigStore from 'sentry/stores/configStore';
import OrganizationCreate from 'sentry/views/organizationCreate';
describe('OrganizationCreate', function () {
beforeEach(() => {
ConfigStore.get('termsUrl');
ConfigStore.get('privacyUrl');
});
afterEach(() => {
MockApiClient.clearMockResponses();
jest.resetAllMocks();
});
it('renders without terms', function () {
render();
});
it('renders with terms', function () {
ConfigStore.set('termsUrl', 'https://example.com/terms');
ConfigStore.set('privacyUrl', 'https://example.com/privacy');
render();
});
it('creates a new org', async function () {
const orgCreateMock = MockApiClient.addMockResponse({
url: '/organizations/',
method: 'POST',
body: TestStubs.Organization(),
});
ConfigStore.set('termsUrl', 'https://example.com/terms');
ConfigStore.set('privacyUrl', 'https://example.com/privacy');
render();
expect(screen.getByText('Create a New Organization')).toBeInTheDocument();
await userEvent.type(screen.getByPlaceholderText('e.g. My Company'), 'Good Burger');
await userEvent.click(
screen.getByRole('checkbox', {
name: 'I agree to the Terms of Service and the Privacy Policy',
})
);
await userEvent.click(screen.getByText('Create Organization'));
await waitFor(() => {
expect(orgCreateMock).toHaveBeenCalledWith(
'/organizations/',
expect.objectContaining({
data: {agreeTerms: true, defaultTeam: true, name: 'Good Burger'},
})
);
});
expect(window.location.assign).toHaveBeenCalledTimes(1);
expect(window.location.assign).toHaveBeenCalledWith(
'/organizations/org-slug/projects/new/'
);
});
it('creates a new org with customer domain feature', async function () {
const orgCreateMock = MockApiClient.addMockResponse({
url: '/organizations/',
method: 'POST',
body: TestStubs.Organization({
features: ['customer-domains'],
}),
});
ConfigStore.set('termsUrl', 'https://example.com/terms');
ConfigStore.set('privacyUrl', 'https://example.com/privacy');
render();
expect(screen.getByText('Create a New Organization')).toBeInTheDocument();
await userEvent.type(screen.getByPlaceholderText('e.g. My Company'), 'Good Burger');
await userEvent.click(
screen.getByRole('checkbox', {
name: 'I agree to the Terms of Service and the Privacy Policy',
})
);
await userEvent.click(screen.getByText('Create Organization'));
await waitFor(() => {
expect(orgCreateMock).toHaveBeenCalledWith(
'/organizations/',
expect.objectContaining({
data: {agreeTerms: true, defaultTeam: true, name: 'Good Burger'},
})
);
});
expect(window.location.assign).toHaveBeenCalledTimes(1);
expect(window.location.assign).toHaveBeenCalledWith(
'https://org-slug.sentry.io/projects/new/'
);
});
});