import {Fragment} from 'react';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import GlobalModal from 'sentry/components/globalModal';
import OrganizationSecurityAndPrivacy from 'sentry/views/settings/organizationSecurityAndPrivacy';
describe('OrganizationSecurityAndPrivacy', function () {
const {organization} = initializeOrg();
beforeEach(() => {
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/auth-provider/`,
method: 'GET',
body: {},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/data-secrecy/`,
method: 'GET',
body: null,
});
});
it('shows require2fa switch', async function () {
render();
expect(
await screen.findByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
).toBeInTheDocument();
});
it('returns to "off" if switch enable fails (e.g. API error)', async function () {
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/`,
method: 'PUT',
statusCode: 500,
});
render(
);
await userEvent.click(
await screen.findByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
);
// Hide console.error for this test
jest.spyOn(console, 'error').mockImplementation(() => {});
// Confirm but has API failure
await userEvent.click(screen.getByRole('button', {name: 'Confirm'}));
expect(
await screen.findByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
).not.toBeChecked();
});
it('renders join request switch', async function () {
render();
expect(
await screen.findByRole('checkbox', {
name: 'Enable to allow users to request to join your organization',
})
).toBeInTheDocument();
});
it('enables require2fa but cancels confirm modal', async function () {
const mock = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/`,
method: 'PUT',
});
render(
);
await userEvent.click(
await screen.findByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
);
// Cancel
await userEvent.click(screen.getByRole('button', {name: 'Cancel'}));
expect(
screen.getByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
).not.toBeChecked();
expect(mock).not.toHaveBeenCalled();
});
it('enables require2fa with confirm modal', async function () {
const mock = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/`,
method: 'PUT',
});
render(
);
await userEvent.click(
await screen.findByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
);
await userEvent.click(screen.getByRole('button', {name: 'Confirm'}));
expect(
screen.getByRole('checkbox', {
name: 'Enable to require and enforce two-factor authentication for all members',
})
).toBeChecked();
expect(mock).toHaveBeenCalledWith(
'/organizations/org-slug/',
expect.objectContaining({
method: 'PUT',
data: {
require2FA: true,
},
})
);
});
});