diff --git a/package-lock.json b/package-lock.json index fca9b713..7e519171 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,6 +48,7 @@ "@types/react": "18.2.64", "@types/react-dom": "18.2.21", "@types/react-redux": "7.1.33", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "7.1.0", "@typescript-eslint/parser": "7.1.1", "babel-jest": "29.7.0", @@ -4861,6 +4862,12 @@ "version": "0.0.3", "license": "MIT" }, + "node_modules/@types/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "dev": true + }, "node_modules/@types/webpack": { "version": "4.41.34", "dev": true, diff --git a/package.json b/package.json index 48c7183c..b633d841 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "@types/react": "18.2.64", "@types/react-dom": "18.2.21", "@types/react-redux": "7.1.33", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "7.1.0", "@typescript-eslint/parser": "7.1.1", "babel-jest": "29.7.0", diff --git a/src/Components/CreateImageWizardV2/CreateImageWizard.tsx b/src/Components/CreateImageWizardV2/CreateImageWizard.tsx index 6b46e10e..cbb8778b 100644 --- a/src/Components/CreateImageWizardV2/CreateImageWizard.tsx +++ b/src/Components/CreateImageWizardV2/CreateImageWizard.tsx @@ -10,6 +10,7 @@ import { import { useNavigate, useSearchParams } from 'react-router-dom'; import DetailsStep from './steps/Details'; +import FileSystemStep from './steps/FileSystem'; import ImageOutputStep from './steps/ImageOutput'; import OscapStep from './steps/Oscap'; import PackagesStep from './steps/Packages'; @@ -131,7 +132,6 @@ const CreateImageWizard = ({ startStepIndex = 1 }: CreateImageWizardProps) => { selectAzureResourceGroup(state) ); const azureSource = useAppSelector((state) => selectAzureSource(state)); - const registrationType = useAppSelector((state) => selectRegistrationType(state) ); @@ -249,6 +249,13 @@ const CreateImageWizard = ({ startStepIndex = 1 }: CreateImageWizardProps) => { > + } + > + + { navigate(resolveRelPath('')); } }, [error, navigate]); - return ; + return ; }; export default EditImageWizard; diff --git a/src/Components/CreateImageWizardV2/UsrSubDirectoriesDisabled.tsx b/src/Components/CreateImageWizardV2/UsrSubDirectoriesDisabled.tsx new file mode 100644 index 00000000..b7b912b1 --- /dev/null +++ b/src/Components/CreateImageWizardV2/UsrSubDirectoriesDisabled.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import { Alert } from '@patternfly/react-core'; + +const UsrSubDirectoriesDisabled = () => { + return ( + + Please note that including sub-directories in the /usr path is no longer + supported. Previously included mount points with /usr sub-directory are + replaced by /usr when recreating an image. + + ); +}; + +export default UsrSubDirectoriesDisabled; diff --git a/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemAutomaticPartitionInformation.tsx b/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemAutomaticPartitionInformation.tsx new file mode 100644 index 00000000..9e15ce4d --- /dev/null +++ b/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemAutomaticPartitionInformation.tsx @@ -0,0 +1,44 @@ +import React from 'react'; + +import { + Button, + Text, + TextContent, + TextVariants, +} from '@patternfly/react-core'; +import { ExternalLinkAltIcon } from '@patternfly/react-icons'; + +const FileSystemAutomaticPartition = () => { + return ( + + Automatic partitioning + + Red Hat will automatically partition your image to what is best, + depending on the target environment(s). + + + The target environment sometimes dictates the partitioning scheme or + parts of it, and sometimes the target environment is unknown (e.g., for + the .qcow2 generic cloud image). + + + Using automatic partitioning will apply the most current supported + configuration. +

+ +
+
+ ); +}; + +export default FileSystemAutomaticPartition; diff --git a/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemConfiguration.tsx b/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemConfiguration.tsx new file mode 100644 index 00000000..b2daa1f8 --- /dev/null +++ b/src/Components/CreateImageWizardV2/steps/FileSystem/FileSystemConfiguration.tsx @@ -0,0 +1,329 @@ +import React, { useState } from 'react'; + +import { + Button, + Popover, + Text, + TextContent, + TextInput, + TextVariants, +} from '@patternfly/react-core'; +import { Select, SelectOption } from '@patternfly/react-core/deprecated'; +import { + HelpIcon, + MinusCircleIcon, + PlusCircleIcon, +} from '@patternfly/react-icons'; +import { ExternalLinkAltIcon } from '@patternfly/react-icons'; +import { Table, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table'; + +import { UNIT_GIB, UNIT_KIB, UNIT_MIB } from '../../../../constants'; +import { useAppDispatch, useAppSelector } from '../../../../store/hooks'; +import { + changePartitionMinSize, + changePartitionMountpoint, + selectPartitions, +} from '../../../../store/wizardSlice'; +import UsrSubDirectoriesDisabled from '../../UsrSubDirectoriesDisabled'; +import { ValidatedTextInput } from '../../ValidatedTextInput'; + +export type Partition = { + id: string; + mountpoint: string; + min_size: string; +}; + +const FileSystemConfiguration = () => { + const partitions = useAppSelector((state) => selectPartitions(state)); + + return ( + <> + + Configure partitions + + {partitions?.find((partition) => + partition?.mountpoint?.includes('/usr') + ) && } + + + Create partitions for your image by defining mount points and minimum + sizes. Image builder creates partitions with a logical volume (LVM) + device type. + + + The order of partitions may change when the image is installed in + order to conform to best practices and ensure functionality. +

+ +
+
+ + + + + + + + + + + {partitions && + partitions.map((partition) => ( + + ))} + +
+ Mount pointType + Minimum size + + + Image Builder may extend this size based on requirements, + selected packages, and configurations. + + + } + > + + + + +
+ + + + + ); +}; + +type RowPropTypes = { + partition: Partition; +}; + +const getPrefix = (mountpoint: string) => { + return mountpoint.split('/')[1] ? '/' + mountpoint.split('/')[1] : '/'; +}; +const getSuffix = (mountpoint: string) => { + const prefix = getPrefix(mountpoint); + return mountpoint.substring(prefix.length); +}; + +const Row = ({ partition }: RowPropTypes) => { + const [units, setUnits] = useState('MiB'); + + return ( + + + + + + + + + xfs + + + + + + + + + + + )} + + {fileSystemPartitionMode === 'manual' && ( + <> + + Image size (minimum) + + + Image Builder may extend this size based on requirements, + selected packages, and configurations. + + + } + > + + + + + + )} +
); }; +export const MinSize = () => { + return ; +}; + export const TargetEnvAWSList = () => { const { isSuccess } = useGetSourceListQuery({ provider: 'aws', diff --git a/src/Components/CreateImageWizardV2/utilities/requestMapper.tsx b/src/Components/CreateImageWizardV2/utilities/requestMapper.tsx index 51462bf6..a208ef28 100644 --- a/src/Components/CreateImageWizardV2/utilities/requestMapper.tsx +++ b/src/Components/CreateImageWizardV2/utilities/requestMapper.tsx @@ -108,6 +108,11 @@ export const mapRequestToState = (request: BlueprintResponse): wizardState => { enabled: [], }, }, + fileSystem: { + mode: 'automatic', + partitions: [], + }, + architecture: request.image_requests[0].architecture, distribution: request.distribution, imageTypes: request.image_requests.map((image) => image.image_type), diff --git a/src/store/wizardSlice.ts b/src/store/wizardSlice.ts index f5428e54..158c787c 100644 --- a/src/store/wizardSlice.ts +++ b/src/store/wizardSlice.ts @@ -10,6 +10,8 @@ import { } from './imageBuilderApi'; import { ActivationKeys } from './rhsmApi'; +import { FileSystemPartitionMode } from '../Components/CreateImageWizardV2/steps/FileSystem'; +import { Partition } from '../Components/CreateImageWizardV2/steps/FileSystem/FileSystemConfiguration'; import { IBPackageWithRepositoryInfo } from '../Components/CreateImageWizardV2/steps/Packages/Packages'; import { AwsShareMethod } from '../Components/CreateImageWizardV2/steps/TargetEnvironment/Aws'; import { AzureShareMethod } from '../Components/CreateImageWizardV2/steps/TargetEnvironment/Azure'; @@ -68,7 +70,10 @@ export type wizardState = { enabled: string[] | undefined; }; }; - + fileSystem: { + mode: FileSystemPartitionMode; + partitions: Partition[]; + }; repositories: { customRepositories: CustomRepository[]; payloadRepositories: Repository[]; @@ -119,6 +124,14 @@ const initialState: wizardState = { enabled: [], }, }, + fileSystem: { + mode: 'automatic', + partitions: [ + { id: '1', mountpoint: '/', min_size: '500' }, + { id: '2', mountpoint: '/home', min_size: '500' }, + { id: '3', mountpoint: '/home/var', min_size: '500' }, + ], + }, repositories: { customRepositories: [], payloadRepositories: [], @@ -218,6 +231,14 @@ export const selectEnabledServices = (state: RootState) => { return state.wizard.openScap.services.enabled; }; +export const selectFileSystemPartitionMode = (state: RootState) => { + return state.wizard.fileSystem.mode; +}; + +export const selectPartitions = (state: RootState) => { + return state.wizard.fileSystem.partitions; +}; + export const selectCustomRepositories = (state: RootState) => { return state.wizard.repositories.customRepositories; }; @@ -353,6 +374,36 @@ export const wizardSlice = createSlice({ ) => { state.openScap.services.enabled = action.payload; }, + changeFileSystemPartitionMode: ( + state, + action: PayloadAction + ) => { + state.fileSystem.mode = action.payload; + }, + changePartitionMountpoint: ( + state, + action: PayloadAction<{ id: string; mountpoint: string }> + ) => { + const { id, mountpoint } = action.payload; + const partitionIndex = state.fileSystem.partitions.findIndex( + (partition) => partition.id === id + ); + if (partitionIndex !== -1) { + state.fileSystem.partitions[partitionIndex].mountpoint = mountpoint; + } + }, + changePartitionMinSize: ( + state, + action: PayloadAction<{ id: string; min_size: string }> + ) => { + const { id, min_size } = action.payload; + const partitionIndex = state.fileSystem.partitions.findIndex( + (partition) => partition.id === id + ); + if (partitionIndex !== -1) { + state.fileSystem.partitions[partitionIndex].min_size = min_size; + } + }, changeCustomRepositories: ( state, action: PayloadAction @@ -409,6 +460,9 @@ export const { changeKernel, changeDisabledServices, changeEnabledServices, + changeFileSystemPartitionMode, + changePartitionMountpoint, + changePartitionMinSize, changeCustomRepositories, changePayloadRepositories, addPackage, diff --git a/src/test/Components/CreateImageWizardV2/CreateImageWizard.content.test.tsx b/src/test/Components/CreateImageWizardV2/CreateImageWizard.content.test.tsx index c1238590..ff1160ad 100644 --- a/src/test/Components/CreateImageWizardV2/CreateImageWizard.content.test.tsx +++ b/src/test/Components/CreateImageWizardV2/CreateImageWizard.content.test.tsx @@ -144,7 +144,7 @@ describe('Step Packages', () => { // skip Repositories await clickNext(); // skip fsc - //await clickNext(); + await clickNext(); }; test('clicking Next loads Image name', async () => { @@ -365,7 +365,10 @@ describe('Step Custom repositories', () => { // skip OpenSCAP await clickNext(); // skip fsc - //await clickNext(); + + await clickNext(); + // // skip packages + // await clickNext(); }; test('selected repositories stored in and retrieved from form state', async () => { diff --git a/src/test/Components/CreateImageWizardV2/CreateImageWizard.test.tsx b/src/test/Components/CreateImageWizardV2/CreateImageWizard.test.tsx index 3cdfd406..390f681c 100644 --- a/src/test/Components/CreateImageWizardV2/CreateImageWizard.test.tsx +++ b/src/test/Components/CreateImageWizardV2/CreateImageWizard.test.tsx @@ -121,7 +121,7 @@ describe('Create Image Wizard', () => { await screen.findByRole('button', { name: 'Image output' }); await screen.findByRole('button', { name: 'Register' }); - // await screen.findByRole('button', { name: 'File system configuration' }); + await screen.findByRole('button', { name: 'File system configuration' }); await screen.findByRole('button', { name: 'Content' }); await screen.findByRole('button', { name: 'Custom repositories' }); await screen.findByRole('button', { name: 'Additional packages' }); @@ -430,6 +430,8 @@ describe('Step Upload to AWS', () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); @@ -556,18 +558,21 @@ describe('Step Registration', () => { }); }; - // test('clicking Next loads file system configuration', async () => { - // await setUp(); + test('clicking Next loads file system configuration', async () => { + await setUp(); - // const registerLaterRadio = await screen.findByTestId('registration-radio-later'); - // await user.click(registerLaterRadio); + const registerLaterRadio = await screen.findByTestId( + 'registration-radio-later' + ); + await user.click(registerLaterRadio); - // await clickNext(); + await clickNext(); + await clickNext(); - // await screen.findByRole('heading', { - // name: 'File system configuration', - // }); - // }); + await screen.findByRole('heading', { + name: 'File system configuration', + }); + }); test('clicking Back loads Upload to AWS', async () => { await setUp(); @@ -619,6 +624,7 @@ describe('Step Registration', () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); const review = await screen.findByTestId('review-registration'); @@ -663,6 +669,8 @@ describe('Step Registration', () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); const review = await screen.findByTestId('review-registration'); @@ -709,6 +717,7 @@ describe('Step Registration', () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); const review = await screen.findByTestId('review-registration'); @@ -737,6 +746,8 @@ describe('Step Registration', () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); await screen.findByText('Register the system later'); @@ -762,86 +773,77 @@ describe('Step Registration', () => { }); }); -// describe('Step File system configuration', () => { -// const user = userEvent.setup(); -// const setUp = async () => { -// ({ router } = await renderCustomRoutesWithReduxRouter( -// 'imagewizard', -// {}, -// routes -// )); - -// // select aws as upload destination -// await waitFor( -// async () => await user.click(await screen.findByTestId('upload-aws')) -// ); -// await clickNext(); - -// // aws step -// await switchToAWSManual(); -// await user.type( -// await screen.findByTestId('aws-account-id'), -// '012345678901' -// ); -// await clickNext(); -// // skip registration -// await screen.findByRole('textbox', { -// name: 'Select activation key', -// }); - -// const registerLaterRadio = await screen.findByTestId('registration-radio-later'); -// await user.click(registerLaterRadio); -// await clickNext(); -// }; - -// test('Error validation occurs upon clicking next button', async () => { -// await setUp(); - -// const manuallyConfigurePartitions = await screen.findByText( -// /manually configure partitions/i -// ); -// await user.click(manuallyConfigurePartitions); - -// const addPartition = await screen.findByTestId('file-system-add-partition'); - -// // Create duplicate partitions -// await user.click(addPartition); -// await user.click(addPartition); - -// expect(await getNextButton()).toBeEnabled(); - -// // Clicking next causes errors to appear -// await clickNext(); - -// const mountPointWarning = await screen.findByRole('heading', { -// name: /danger alert: duplicate mount points: all mount points must be unique\. remove the duplicate or choose a new mount point\./i, -// hidden: true, -// }); - -// const mountPointAlerts = screen.getAllByRole('heading', { -// name: /danger alert: duplicate mount point\./i, -// }); - -// const tbody = await screen.findByTestId('file-system-configuration-tbody'); -// const rows = within(tbody).getAllByRole('row'); -// expect(rows).toHaveLength(3); - -// // Change mountpoint of final row to /var, resolving errors -// const mountPointOptions = within(rows[2]).getAllByRole('button', { -// name: 'Options menu', -// })[0]; -// await user.click(mountPointOptions); -// const varButton = await within(rows[2]).findByRole('option', { -// name: '/var', -// }); -// await user.click(varButton); - -// await waitFor(() => expect(mountPointWarning).not.toBeInTheDocument()); -// await waitFor(() => expect(mountPointAlerts[0]).not.toBeInTheDocument()); -// await waitFor(() => expect(mountPointAlerts[1]).not.toBeInTheDocument()); -// expect(await getNextButton()).toBeEnabled(); -// }); -// }); +describe('Step File system configuration', () => { + // const user = userEvent.setup(); + // const setUp = async () => { + // ({ router } = await renderCustomRoutesWithReduxRouter( + // 'imagewizard', + // {}, + // routes + // )); + // // select aws as upload destination + // await waitFor( + // async () => await user.click(await screen.findByTestId('upload-aws')) + // ); + // await clickNext(); + // // aws step + // await switchToAWSManual(); + // await user.type( + // screen.getByRole('textbox', { + // name: /aws account id/i, + // }), + // '012345678901' + // ); + // await clickNext(); + // // skip registration + // await screen.findByRole('textbox', { + // name: 'Select activation key', + // }); + // const registerLaterRadio = await screen.findByTestId( + // 'registration-radio-later' + // ); + // await user.click(registerLaterRadio); + // await clickNext(); + // await clickNext(); + // }; + //test('Error validation occurs upon clicking next button', async () => { + // await setUp(); + // const manuallyConfigurePartitions = await screen.findByText( + // /manually configure partitions/i + // ); + // await user.click(manuallyConfigurePartitions); + // const addPartition = await screen.findByTestId('file-system-add-partition'); + // // Create duplicate partitions + // await user.click(addPartition); + // await user.click(addPartition); + // expect(await getNextButton()).toBeDisabled(); + // // Clicking next causes errors to appear + // await clickNext(); + // const mountPointWarning = await screen.findByRole('heading', { + // name: /danger alert: duplicate mount points: all mount points must be unique\. remove the duplicate or choose a new mount point\./i, + // hidden: true, + // }); + // const mountPointAlerts = screen.getAllByRole('heading', { + // name: /danger alert: duplicate mount point\./i, + // }); + // const tbody = await screen.findByTestId('file-system-configuration-tbody'); + // const rows = within(tbody).getAllByRole('row'); + // expect(rows).toHaveLength(3); + // //Change mountpoint of final row to /var, resolving errors + // const mountPointOptions = within(rows[2]).getAllByRole('button', { + // name: 'Options menu', + // })[0]; + // await user.click(mountPointOptions); + // const varButton = await within(rows[2]).findByRole('option', { + // name: '/var', + // }); + // await user.click(varButton); + // // await waitFor(() => expect(mountPointWarning).not.toBeInTheDocument()); + // // await waitFor(() => expect(mountPointAlerts[0]).not.toBeInTheDocument()); + // // await waitFor(() => expect(mountPointAlerts[1]).not.toBeInTheDocument()); + // expect(await getNextButton()).toBeEnabled(); + //}); +}); describe('Step Details', () => { const user = userEvent.setup(); @@ -883,7 +885,7 @@ describe('Step Details', () => { // skip packages await clickNext(); // skip fsc - //await clickNext(); + await clickNext(); }; test('image name invalid for more than 63 chars', async () => { @@ -962,6 +964,7 @@ describe('Step Review', () => { await clickNext(); // skip packages await clickNext(); + await clickNext(); // skip Details const blueprintName = await screen.findByRole('textbox', { name: /blueprint name/i, @@ -1023,7 +1026,7 @@ describe('Step Review', () => { await clickNext(); // skip repositories await clickNext(); - // skip Details + await clickNext(); const blueprintName = await screen.findByRole('textbox', { name: /blueprint name/i, }); @@ -1061,7 +1064,9 @@ describe('Step Review', () => { }); const contentExpandable = await screen.findByTestId('content-expandable'); - // const fscExpandable = screen.getByText(/file system configuration/i); + const fscExpandable = screen.getByTestId( + 'file-system-configuration-expandable' + ); await user.click(targetExpandable); await screen.findByText('AWS'); @@ -1071,19 +1076,17 @@ describe('Step Review', () => { await within(contentExpandable).findByText('Custom repositories'); await within(contentExpandable).findByText('Additional packages'); - // await user.click(fscExpandable); - // await screen.findByText('Configuration type'); + await user.click(fscExpandable); + await screen.findByText('Configuration type'); }); test('has no Registration expandable for centos', async () => { await setUpCentOS(); const targetExpandable = screen.getByText(/target environments/i); const contentExpandable = await screen.findByTestId('content-expandable'); - //const fscExpandable = await screen.findByTestId( - // 'file-system-configuration-expandable' - // ); - // }); - + const fscExpandable = await screen.findByTestId( + 'file-system-configuration-expandable' + ); expect( screen.queryByTestId('registration-expandable') ).not.toBeInTheDocument(); @@ -1093,12 +1096,11 @@ describe('Step Review', () => { await user.click(contentExpandable); await within(contentExpandable).findByText('Custom repositories'); await within(contentExpandable).findByText('Additional packages'); + + await user.click(fscExpandable); + await screen.findByText('Configuration type'); }); }); -// await user.click(fscExpandable); -// await screen.findByText('Configuration type'); -// }); -// }); describe('Keyboard accessibility', () => { const user = userEvent.setup(); @@ -1199,8 +1201,8 @@ describe('Keyboard accessibility', () => { // TODO: Focus on textbox on OpenSCAP step await clickNext(); - // File system configuration - // await clickNext(); + //File system configuration + await clickNext(); // TODO: Focus on textbox on Custom Repos step await clickNext(); diff --git a/src/test/Components/CreateImageWizardV2/steps/Details/Details.test.tsx b/src/test/Components/CreateImageWizardV2/steps/Details/Details.test.tsx index 53b0dfb4..4ea4d346 100644 --- a/src/test/Components/CreateImageWizardV2/steps/Details/Details.test.tsx +++ b/src/test/Components/CreateImageWizardV2/steps/Details/Details.test.tsx @@ -36,6 +36,7 @@ const goToDetailsStep = async () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); }; const enterBlueprintDescription = async () => { diff --git a/src/test/Components/CreateImageWizardV2/steps/Packages/Packages.test.tsx b/src/test/Components/CreateImageWizardV2/steps/Packages/Packages.test.tsx index 75d9d635..163294f8 100644 --- a/src/test/Components/CreateImageWizardV2/steps/Packages/Packages.test.tsx +++ b/src/test/Components/CreateImageWizardV2/steps/Packages/Packages.test.tsx @@ -39,6 +39,7 @@ const goToPackagesStep = async () => { await clickNext(); // Registration await clickRegisterLater(); await clickNext(); // OpenSCAP + await clickNext(); // File System await clickNext(); // Custom repositories await clickNext(); // Additional packages }; diff --git a/src/test/Components/CreateImageWizardV2/steps/Registration/Registration.test.tsx b/src/test/Components/CreateImageWizardV2/steps/Registration/Registration.test.tsx index 7b182d8d..309c0bfd 100644 --- a/src/test/Components/CreateImageWizardV2/steps/Registration/Registration.test.tsx +++ b/src/test/Components/CreateImageWizardV2/steps/Registration/Registration.test.tsx @@ -69,6 +69,7 @@ const goToReviewStep = async () => { await clickNext(); await clickNext(); await clickNext(); + await clickNext(); await enterBlueprintName(); await clickNext(); }; diff --git a/src/test/Components/CreateImageWizardV2/steps/Repositories/Repositories.test.tsx b/src/test/Components/CreateImageWizardV2/steps/Repositories/Repositories.test.tsx index 2c81852e..e7c274a4 100644 --- a/src/test/Components/CreateImageWizardV2/steps/Repositories/Repositories.test.tsx +++ b/src/test/Components/CreateImageWizardV2/steps/Repositories/Repositories.test.tsx @@ -43,11 +43,13 @@ const goToRepositoriesStep = async () => { await clickNext(); // Registration await clickRegisterLater(); await clickNext(); // OpenSCAP + await clickNext(); // File System await clickNext(); // Custom repositories }; const goToReviewStep = async () => { await clickNext(); // Additional packages + await clickNext(); await clickNext(); // Details await enterBlueprintName(); await clickNext(); // Review diff --git a/src/test/Components/CreateImageWizardV2/steps/TargetEnvironment/TargetEnvironment.test.tsx b/src/test/Components/CreateImageWizardV2/steps/TargetEnvironment/TargetEnvironment.test.tsx index 6cae9c2f..f7ddb284 100644 --- a/src/test/Components/CreateImageWizardV2/steps/TargetEnvironment/TargetEnvironment.test.tsx +++ b/src/test/Components/CreateImageWizardV2/steps/TargetEnvironment/TargetEnvironment.test.tsx @@ -119,6 +119,7 @@ const goToReviewStep = async () => { await goToRegistrationStep(); // Register await clickRegisterLater(); await clickNext(); // OpenSCAP + await clickNext(); // File system customization await clickNext(); // Custom repositories await clickNext(); // Additional packages await clickNext(); // Details