import {browserHistory} from 'react-router';
import {mountWithTheme} from 'sentry-test/enzyme';
import SsoForm from 'sentry/views/auth/ssoForm';
function doSso(wrapper, apiRequest) {
wrapper.find('#id-organization').simulate('change', {target: {value: 'org123'}});
wrapper.find('form').simulate('submit');
expect(apiRequest).toHaveBeenCalledWith(
'/auth/sso-locate/',
expect.objectContaining({data: {organization: 'org123'}})
);
}
describe('SsoForm', function () {
const api = new MockApiClient();
it('renders', function () {
const authConfig = {
serverHostname: 'testserver',
};
const wrapper = mountWithTheme();
expect(wrapper.find('.help-block').text()).toBe(
'Your ID is the slug after the hostname. e.g. testserver/acme is acme.'
);
});
it('handles errors', async function () {
const mockRequest = MockApiClient.addMockResponse({
url: '/auth/sso-locate/',
method: 'POST',
statusCode: 400,
body: {
detail: 'Invalid org name',
},
});
const authConfig = {};
const wrapper = mountWithTheme();
doSso(wrapper, mockRequest);
await tick();
wrapper.update();
expect(wrapper.find('.alert').exists()).toBe(true);
});
it('handles success', async function () {
const mockRequest = MockApiClient.addMockResponse({
url: '/auth/sso-locate/',
method: 'POST',
statusCode: 200,
body: {
nextUri: '/next/',
},
});
const authConfig = {};
const wrapper = mountWithTheme();
doSso(wrapper, mockRequest);
await tick();
expect(browserHistory.push).toHaveBeenCalledWith({pathname: '/next/'});
});
});