import {browserHistory} from 'react-router';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {act, render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import ProjectsStore from 'sentry/stores/projectsStore';
import Onboarding from 'sentry/views/onboarding/onboarding';
const MockStep = ({name, data, active, project, onComplete, onUpadte}) => (
);
const makeMockStep = preFill => p => ;
const MOCKED_STEPS = [
{
id: 'step1',
title: 'Step One',
Component: makeMockStep({name: 'step_1', data: {}}),
},
{
id: 'step2',
title: 'Step Two',
Component: makeMockStep({name: 'step_2', data: {}}),
},
{
id: 'step3',
title: 'Step Three',
Component: makeMockStep({name: 'step_3', data: {}}),
},
];
describe('Onboarding', function () {
it('redirects to first step if invalid step ID present', function () {
browserHistory.replace = jest.fn();
const params = {
step: 'bad-step',
orgId: 'org-bar',
};
render(, {});
expect(browserHistory.replace).toHaveBeenCalledWith('/onboarding/org-bar/step1/');
});
it('renders one step', function () {
const params = {
step: 'step1',
orgId: 'org-bar',
};
render();
// Validate that the first step is shown
expect(screen.getByTestId('step_name')).toHaveTextContent('step_1');
// Validate that the progress bar is displayed and active
expect(screen.getByRole('progressbar')).toHaveAttribute('aria-valuenow', '1');
});
it('moves to next step on complete', function () {
browserHistory.replace = jest.fn();
const params = {
step: 'step1',
orgId: 'org-bar',
};
render();
userEvent.click(screen.getByTestId('complete'));
expect(browserHistory.push).toHaveBeenCalledWith('/onboarding/org-bar/step2/');
});
it('renders second step', function () {
const params = {
step: 'step2',
orgId: 'org-bar',
};
render();
// Validate that second step is visible
expect(screen.getByTestId('step_name')).toHaveTextContent('step_2');
expect(screen.getByTestId('is_active')).toBeInTheDocument();
});
it('goes back when back button clicked', function () {
browserHistory.push = jest.fn();
const params = {
step: 'step2',
orgId: 'org-bar',
};
render();
userEvent.click(screen.getByRole('button', {name: 'Go back'}));
expect(browserHistory.replace).toHaveBeenCalledWith('/onboarding/org-bar/step1/');
});
it('passes the first existing project', function () {
const {organization, projects, routerContext} = initializeOrg({
// Multiple projects with different creation dates, to ensure it picks
// the oldest project
projects: [
{id: 1, slug: 'first', dateCreated: 'May 16 2019 13:55:20 GMT-0700'},
{id: 2, slug: 'second', dateCreated: 'May 17 2019 13:55:20 GMT-0700'},
],
});
act(() => ProjectsStore.loadInitialData(projects));
const params = {
step: 'step1',
orgId: organization.slug,
};
render(, {context: routerContext});
expect(screen.getByTestId('project_slug')).toHaveTextContent('first');
});
});