Components sometimes render slower than tests run which causes failures when the test suite expects elements that did not finish their rendering yet. This should help to prevent most of possible problems with the rendering speed.
204 lines
5.6 KiB
JavaScript
204 lines
5.6 KiB
JavaScript
import React from 'react';
|
|
|
|
import '@testing-library/jest-dom';
|
|
|
|
import { screen, waitFor } from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
|
|
import CreateImageWizard from '../../../Components/CreateImageWizard/CreateImageWizard';
|
|
import ShareImageModal from '../../../Components/ShareImageModal/ShareImageModal';
|
|
import {
|
|
clickNext,
|
|
renderCustomRoutesWithReduxRouter,
|
|
renderWithReduxRouter,
|
|
} from '../../testUtils';
|
|
|
|
const routes = [
|
|
{
|
|
path: 'insights/image-builder/*',
|
|
element: <div />,
|
|
},
|
|
{
|
|
path: 'insights/image-builder/imagewizard/:composeId?',
|
|
element: <CreateImageWizard />,
|
|
},
|
|
{
|
|
path: 'insights/image-builder/share/:composeId',
|
|
element: <ShareImageModal />,
|
|
},
|
|
];
|
|
|
|
jest.mock('@redhat-cloud-services/frontend-components/useChrome', () => ({
|
|
useChrome: () => ({
|
|
auth: {
|
|
getUser: () => {
|
|
return {
|
|
identity: {
|
|
internal: {
|
|
org_id: 5,
|
|
},
|
|
},
|
|
};
|
|
},
|
|
},
|
|
isBeta: () => true,
|
|
isProd: () => false,
|
|
getEnvironment: () => 'stage',
|
|
}),
|
|
}));
|
|
|
|
jest.mock('@unleash/proxy-client-react', () => ({
|
|
useUnleashContext: () => jest.fn(),
|
|
useFlag: jest.fn((flag) =>
|
|
flag === 'image-builder.wizard.oscap.enabled' ? true : false
|
|
),
|
|
}));
|
|
|
|
beforeAll(() => {
|
|
// scrollTo is not defined in jsdom
|
|
window.HTMLElement.prototype.scrollTo = function () {};
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
describe('Step Compliance', () => {
|
|
const user = userEvent.setup();
|
|
const setup = async () => {
|
|
renderCustomRoutesWithReduxRouter('imagewizard', {}, routes);
|
|
};
|
|
test('create an image with None oscap profile', async () => {
|
|
await setup();
|
|
|
|
// select aws as upload destination
|
|
await user.click(await screen.findByTestId('upload-aws'));
|
|
await clickNext();
|
|
|
|
// aws step
|
|
await user.click(
|
|
await screen.findByRole('radio', {
|
|
name: /manually enter an account id\./i,
|
|
})
|
|
);
|
|
await user.type(
|
|
await screen.findByTestId('aws-account-id'),
|
|
'012345678901'
|
|
);
|
|
|
|
await clickNext();
|
|
// skip registration
|
|
await user.click(await screen.findByLabelText('Register later'));
|
|
await clickNext();
|
|
|
|
// Now we should be in the Compliance step
|
|
await screen.findByRole('heading', { name: /OpenSCAP/i });
|
|
|
|
await user.click(
|
|
await screen.findByRole('textbox', { name: /select a profile/i })
|
|
);
|
|
await user.click(await screen.findByText(/none/i));
|
|
|
|
// check that the FSC does not contain a /tmp partition
|
|
await clickNext();
|
|
await screen.findByRole('heading', { name: /File system configuration/i });
|
|
expect(
|
|
screen.queryByRole('cell', {
|
|
name: /tmp/i,
|
|
})
|
|
).not.toBeInTheDocument();
|
|
|
|
// check that there are no Packages contained when selecting the "None" profile option
|
|
await clickNext();
|
|
await screen.findByRole('heading', {
|
|
name: /Additional Red Hat packages/i,
|
|
});
|
|
await screen.findByText(/no packages added/i);
|
|
});
|
|
|
|
test('create an image with an oscap profile', async () => {
|
|
await setup();
|
|
|
|
// select aws as upload destination
|
|
await user.click(await screen.findByTestId('upload-aws'));
|
|
await clickNext();
|
|
|
|
// aws step
|
|
await user.click(
|
|
await screen.findByRole('radio', {
|
|
name: /manually enter an account id\./i,
|
|
})
|
|
);
|
|
await user.type(
|
|
await screen.findByTestId('aws-account-id'),
|
|
'012345678901'
|
|
);
|
|
|
|
await clickNext();
|
|
// skip registration
|
|
await user.click(await screen.findByLabelText('Register later'));
|
|
await clickNext();
|
|
|
|
// Now we should be at the OpenSCAP step
|
|
await screen.findByRole('heading', { name: /OpenSCAP/i });
|
|
|
|
await user.click(
|
|
await screen.findByRole('textbox', {
|
|
name: /select a profile/i,
|
|
})
|
|
);
|
|
|
|
await user.click(
|
|
await screen.findByText(
|
|
/cis red hat enterprise linux 8 benchmark for level 1 - workstation/i
|
|
)
|
|
);
|
|
// check that the FSC contains a /tmp partition
|
|
await clickNext();
|
|
await screen.findByRole('heading', { name: /File system configuration/i });
|
|
await screen.findByText(/tmp/i);
|
|
|
|
// check that the Packages contain a nftable package
|
|
await clickNext();
|
|
|
|
await screen.findByRole('heading', {
|
|
name: /Additional Red Hat packages/i,
|
|
});
|
|
await screen.findByText(/nftables/i);
|
|
await screen.findByText(/libselinux/i);
|
|
});
|
|
});
|
|
|
|
describe('On Recreate', () => {
|
|
const setup = async () => {
|
|
renderWithReduxRouter('imagewizard/1679d95b-8f1d-4982-8c53-8c2afa4ab04c');
|
|
};
|
|
test('with oscap profile', async () => {
|
|
const user = userEvent.setup();
|
|
await setup();
|
|
await screen.findByRole('button', {
|
|
name: /review/i,
|
|
});
|
|
const createImageButton = await screen.findByRole('button', {
|
|
name: /create image/i,
|
|
});
|
|
await waitFor(() => expect(createImageButton).toBeEnabled());
|
|
|
|
// check that the FSC contains a /tmp partition
|
|
// There are two buttons with the same name but cannot easily select the DDF rendered sidenav.
|
|
// The sidenav will be the first node found out of all buttons.
|
|
const buttonsFSC = await screen.findAllByRole('button', {
|
|
name: /file system configuration/i,
|
|
});
|
|
await user.click(buttonsFSC[0]);
|
|
await screen.findByRole('heading', { name: /file system configuration/i });
|
|
await screen.findByText('/tmp');
|
|
|
|
// check that the Packages contain a nftable package
|
|
await clickNext();
|
|
await screen.findByRole('heading', {
|
|
name: /Additional Red Hat packages/i,
|
|
});
|
|
await screen.findByText('nftables');
|
|
});
|
|
});
|