import {mountWithTheme} from 'sentry-test/enzyme';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {mountGlobalModal} from 'sentry-test/modal';
import OrganizationSecurityAndPrivacy from 'sentry/views/settings/organizationSecurityAndPrivacy';
describe('OrganizationSecurityAndPrivacy', function () {
let organization;
let routerContext;
beforeEach(function () {
({organization, routerContext} = initializeOrg());
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/auth-provider/`,
method: 'GET',
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/`,
method: 'GET',
});
});
it('shows require2fa switch', async function () {
const wrapper = mountWithTheme(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]')).toHaveLength(1);
});
it('returns to "off" if switch enable fails (e.g. API error)', async function () {
MockApiClient.addMockResponse({
url: '/organizations/org-slug/',
method: 'PUT',
statusCode: 500,
});
const wrapper = mountWithTheme(
,
routerContext
);
await tick();
wrapper.update();
wrapper.find('Switch[name="require2FA"]').simulate('click');
// hide console.error for this test
jest.spyOn(console, 'error').mockImplementation(() => {});
// Confirm but has API failure
const modal = await mountGlobalModal();
modal.find('Button[priority="primary"]').simulate('click');
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]').prop('isActive')).toBe(false);
// eslint-disable-next-line no-console
console.error.mockRestore();
});
it('renders join request switch', async function () {
const wrapper = mountWithTheme(
,
TestStubs.routerContext([{organization}])
);
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="allowJoinRequests"]').exists()).toBe(true);
});
it('enables require2fa but cancels confirm modal', async function () {
const mock = MockApiClient.addMockResponse({
url: '/organizations/org-slug/',
method: 'PUT',
});
const wrapper = mountWithTheme(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]')).toHaveLength(1);
wrapper.find('Switch[name="require2FA"]').simulate('click');
// Cancel
const modal = await mountGlobalModal();
modal.find('Button').first().simulate('click');
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]').prop('isActive')).toBe(false);
expect(mock).not.toHaveBeenCalled();
});
it('enables require2fa with confirm modal', async function () {
const mock = MockApiClient.addMockResponse({
url: '/organizations/org-slug/',
method: 'PUT',
});
const wrapper = mountWithTheme(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]')).toHaveLength(1);
wrapper.find('Switch[name="require2FA"]').simulate('click');
// Confirm
const modal = await mountGlobalModal();
modal.find('Button[priority="primary"]').simulate('click');
await tick();
wrapper.update();
expect(wrapper.find('Switch[name="require2FA"]').prop('isActive')).toBe(true);
expect(mock).toHaveBeenCalledWith(
'/organizations/org-slug/',
expect.objectContaining({
method: 'PUT',
data: {
require2FA: true,
},
})
);
});
});