import React from 'react';
import {createProject} from 'app/actionCreators/projects';
import {mount} from 'enzyme';
import OnboardingPlatform from 'app/views/onboarding/platform';
import TeamStore from 'app/stores/teamStore';
jest.mock('app/actionCreators/projects');
describe('OnboardingWelcome', function() {
it('calls onUpdate when setting the platform', function() {
const onUpdate = jest.fn();
const wrapper = mount(
,
TestStubs.routerContext()
);
wrapper
.find('[data-test-id="platform-csharp"]')
.first()
.simulate('click');
expect(onUpdate).toHaveBeenCalled();
});
it('calls onReturnToStep when clearing the platform', function() {
const onUpdate = jest.fn();
const onReturnToStep = jest.fn();
const wrapper = mount(
,
TestStubs.routerContext()
);
wrapper
.find('ClearButton')
.first()
.simulate('click');
expect(onReturnToStep).toHaveBeenCalled();
});
it('creates a project when no project exists', async function() {
const onComplete = jest.fn();
const wrapper = mount(
,
TestStubs.routerContext()
);
const getButton = () => wrapper.find('Button[priority="primary"]');
expect(getButton().props().disabled).toBe(true);
// Select a platform to create
wrapper.setProps({platform: 'csharp'});
TeamStore.loadInitialData([{id: '1', slug: 'team-slug'}]);
expect(getButton().text()).toEqual('Create Project');
expect(getButton().props().disabled).toBe(false);
let resolveProjectCreate;
createProject.mockReturnValue(
new Promise((resolve, reject) => (resolveProjectCreate = resolve))
);
// Create the project
getButton().simulate('click');
expect(getButton().text()).toEqual('Creating Project...');
// Project completed creation (tick for async completion)
resolveProjectCreate({id: 1, slug: 'test-project'});
await tick();
wrapper.setProps({active: false});
expect(getButton().text()).toEqual('Project Created');
expect(onComplete).toHaveBeenCalled();
});
it('does not create a project if one already exists', async function() {
createProject.mockReset();
const onComplete = jest.fn();
const wrapper = mount(
,
TestStubs.routerContext()
);
const getButton = () => wrapper.find('Button[priority="primary"]');
TeamStore.loadInitialData([{id: '1', slug: 'team-slug'}]);
expect(getButton().text()).toEqual('Setup Your Project');
expect(getButton().props().disabled).toBe(false);
// Create the project
getButton().simulate('click');
await tick();
expect(getButton().props().disabled).toBe(true);
expect(createProject).not.toHaveBeenCalled();
expect(onComplete).toHaveBeenCalled();
});
});