import {mountWithTheme} from 'sentry-test/enzyme';
import {openCreateTeamModal} from 'sentry/actionCreators/modal';
import {CreateProject} from 'sentry/views/projectInstall/createProject';
jest.mock('sentry/actionCreators/modal');
describe('CreateProject', function () {
const teamNoAccess = {slug: 'test', id: '1', name: 'test', hasAccess: false};
const teamWithAccess = {...teamNoAccess, hasAccess: true};
const baseProps = {
api: new MockApiClient(),
location: {query: {}},
organization: TestStubs.Organization(),
teams: [teamNoAccess],
params: {
projectId: '',
orgId: 'testOrg',
},
};
it('should block if you have access to no teams', function () {
const props = {
...baseProps,
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([{organization: {id: '1', slug: 'testOrg'}}])
);
expect(wrapper).toSnapshot();
});
it('can create a new team', function () {
const props = {
...baseProps,
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([{organization: {id: '1', slug: 'testOrg'}}])
);
wrapper.find('TeamSelectInput Button button').simulate('click');
expect(openCreateTeamModal).toHaveBeenCalled();
});
it('should fill in project name if its empty when platform is chosen', function () {
const props = {
...baseProps,
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([
{organization: {id: '1', slug: 'testOrg'}, location: {query: {}}},
])
);
let node = wrapper.find('PlatformCard').first();
node.simulate('click');
expect(wrapper.find('ProjectNameInput input').props().value).toBe('iOS');
node = wrapper.find('PlatformCard').last();
node.simulate('click');
expect(wrapper.find('ProjectNameInput input').props().value).toBe('Rails');
// but not replace it when project name is something else:
wrapper.setState({projectName: 'another'});
node = wrapper.find('PlatformCard').first();
node.simulate('click');
expect(wrapper.find('ProjectNameInput input').props().value).toBe('another');
expect(wrapper).toSnapshot();
});
it('should fill in platform name if its provided by url', function () {
const props = {
...baseProps,
location: {query: {platform: 'ruby-rails'}},
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([{organization: {id: '1', slug: 'testOrg'}}])
);
expect(wrapper.find('ProjectNameInput input').props().value).toBe('Rails');
expect(wrapper).toSnapshot();
});
it('should fill in category name if its provided by url', function () {
const props = {
...baseProps,
location: {query: {category: 'mobile'}},
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([{organization: {id: '1', slug: 'testOrg'}}])
);
expect(wrapper.find('PlatformPicker').state('category')).toBe('mobile');
});
it('should deal with incorrect platform name if its provided by url', function () {
const props = {
...baseProps,
};
const wrapper = mountWithTheme(
,
TestStubs.routerContext([
{
organization: {id: '1', slug: 'testOrg'},
location: {query: {platform: 'XrubyROOLs'}},
},
])
);
expect(wrapper.find('ProjectNameInput input').props().value).toBe('');
expect(wrapper).toSnapshot();
});
describe('Issue Alerts Options', () => {
let props = {};
beforeEach(() => {
props = {
...baseProps,
};
props.teams = [teamWithAccess];
MockApiClient.addMockResponse({
url: `/projects/${props.organization.slug}/rule-conditions/`,
body: TestStubs.MOCK_RESP_VERBOSE,
});
});
afterEach(() => {
MockApiClient.clearMockResponses();
});
it('should enabled the submit button if and only if all the required information has been filled', () => {
const wrapper = mountWithTheme(
,
TestStubs.routerContext([
{
location: {query: {}},
},
])
);
const expectSubmitButtonToBeDisabled = isDisabled => {
expect(
wrapper.find('Button[data-test-id="create-project"]').props().disabled
).toBe(isDisabled);
};
wrapper
.find('SelectControl[data-test-id="metric-select-control"]')
.closest('RadioLineItem')
.find('Radio input')
.simulate('change');
expectSubmitButtonToBeDisabled(true);
wrapper
.find('input[data-test-id="range-input"]')
.first()
.simulate('change', {target: {value: '2'}});
expectSubmitButtonToBeDisabled(true);
wrapper.find('PlatformCard').first().simulate('click');
expectSubmitButtonToBeDisabled(false);
wrapper
.find('input[data-test-id="range-input"]')
.first()
.simulate('change', {target: {value: ''}});
expectSubmitButtonToBeDisabled(true);
wrapper
.find('input[data-test-id="range-input"]')
.first()
.simulate('change', {target: {value: '2712'}});
expectSubmitButtonToBeDisabled(false);
wrapper
.find('input[data-test-id="range-input"]')
.first()
.simulate('change', {target: {value: ''}});
expectSubmitButtonToBeDisabled(true);
wrapper.find('Radio input').first().simulate('change');
expectSubmitButtonToBeDisabled(false);
});
});
});