import { render, screen, within } from '@testing-library/react';
import { byRole } from 'testing-library-selector';
import { SectionsDto } from '../irmHooks';
import { Essentials } from './Essentials';
function mockSectionsDto(): SectionsDto {
return {
sections: [
{
title: 'Detect',
description: 'Configure something1',
steps: [
{
title: 'Create something1',
description: 'description1',
button: {
type: 'openLink',
urlLink: {
url: '/url1',
},
label: 'label1',
},
done: true,
},
{
title: 'Create something2',
description: 'description2',
button: {
type: 'openLink',
urlLink: {
url: '/url2',
},
label: 'label2',
},
done: false,
},
{
title: 'testing step',
description: 'description3',
button: {
type: 'openLink',
urlLink: {
url: '/url3',
},
label: 'label3',
},
},
{
title: 'testing step',
description: 'description3',
button: {
type: 'openLink',
urlLink: {
url: '/url4',
},
urlLinkOnDone: {
url: '/url4',
},
label: 'testNotDone',
labelOnDone: 'testDone',
},
done: true,
},
],
},
],
};
}
describe('Essentials', () => {
it('renders progress status correctly', async () => {
const essentialsConfig = mockSectionsDto();
const stepsDone = 2;
const totalStepsToDo = 5;
render(
);
const progressBar = screen.getByText(/your progress/i);
expect(within(progressBar).getByText(/2/i)).toBeInTheDocument();
expect(within(progressBar).getByText(/of 5/i)).toBeInTheDocument();
});
it('renders steps correctly', async () => {
const essentialsConfig = mockSectionsDto();
const stepsDone = 0;
const totalStepsToDo = 5;
render(
);
// step1 is done and labelonDone is not defined
expect(byRole('heading', { name: /detect/i }).get()).toBeInTheDocument();
const step1 = screen.getAllByTestId('step')[0];
expect(within(step1).getByText(/create something1/i)).toBeInTheDocument();
expect(within(step1).getByTestId('checked-step')).toBeInTheDocument();
expect(within(step1).queryByRole('link', { name: /label1/i })).not.toBeInTheDocument();
// step2 is not done
const step2 = screen.getAllByTestId('step')[1];
expect(within(step2).getByText(/create something2/i)).toBeInTheDocument();
expect(within(step2).getByTestId('unckecked-step')).toBeInTheDocument();
expect(byRole('link', { name: /label2/i }).get()).toBeInTheDocument();
// step3 , done is not defined
const step3 = screen.getAllByTestId('step')[2];
expect(within(step3).getByText(/testing step/i)).toBeInTheDocument();
expect(within(step3).queryByTestId('checked-step')).not.toBeInTheDocument();
expect(within(step3).queryByTestId('unckecked-step')).not.toBeInTheDocument();
expect(within(step3).queryByTestId('step-button')).not.toBeInTheDocument();
expect(within(step3).queryByRole('link', { name: /label3/i })).toBeInTheDocument();
// step4 is done and labelonDone is defined
const step4 = screen.getAllByTestId('step')[3];
expect(within(step4).getByText(/testing step/i)).toBeInTheDocument();
expect(within(step4).getByTestId('checked-step')).toBeInTheDocument();
expect(within(step4).queryByRole('link', { name: /testNotDone/i })).not.toBeInTheDocument();
expect(within(step4).queryByRole('link', { name: /testDone/i })).toBeInTheDocument();
});
});