import {act, render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {ModalRenderProps} from 'sentry/actionCreators/modal';
import {ProfilingOnboardingModal} from 'sentry/components/profiling/ProfilingOnboarding/profilingOnboardingModal';
import ProjectStore from 'sentry/stores/projectsStore';
import {Project} from 'sentry/types/project';
const MockRenderModalProps: ModalRenderProps = {
Body: ({children}) =>
{children}
,
Header: ({children}) => {children}
,
Footer: ({children}) => {children}
,
CloseButton: ({children}) => {children}
,
closeModal: jest.fn(),
onDismiss: jest.fn(),
} as unknown as ModalRenderProps;
function selectProject(project: Project) {
if (!project.name) {
throw new Error(`Selected project requires a name, received ${project.name}`);
}
userEvent.click(screen.getAllByRole('textbox')[0]);
userEvent.click(screen.getByText(project.name));
}
describe('ProfilingOnboarding', function () {
beforeEach(() => {
ProjectStore.teardown();
});
it('renders default step', () => {
render();
expect(screen.getByText(/Select a Project/i)).toBeInTheDocument();
});
it('goes to next step and previous step if project is supported', () => {
ProjectStore.loadInitialData([
TestStubs.Project({name: 'iOS Project', platform: 'apple-ios'}),
]);
render();
selectProject(TestStubs.Project({name: 'iOS Project'}));
act(() => {
userEvent.click(screen.getAllByText('Next')[0]);
});
expect(screen.getByText(/Step 2 of 2/i)).toBeInTheDocument();
// Previous step
act(() => {
userEvent.click(screen.getAllByText('Back')[0]);
});
expect(screen.getByText(/Select a Project/i)).toBeInTheDocument();
});
it('does not allow going to next step if project is unsupported', () => {
ProjectStore.loadInitialData([
TestStubs.Project({name: 'javascript', platform: 'javascript'}),
]);
render();
selectProject(TestStubs.Project({name: 'javascript'}));
act(() => {
userEvent.click(screen.getAllByText('Next')[0]);
});
expect(screen.getByRole('button', {name: /Next/i})).toBeDisabled();
});
});