Wizard: Add unleash flag and update tests
This gates the step behind an unleash flag and updates the existing tests so they pass with the new step added.
This commit is contained in:
parent
e6bc0d429a
commit
3167effa1b
22 changed files with 112 additions and 5 deletions
|
|
@ -15,6 +15,7 @@ import { useNavigate, useSearchParams } from 'react-router-dom';
|
|||
import DetailsStep from './steps/Details';
|
||||
import FileSystemStep from './steps/FileSystem';
|
||||
import { FileSystemContext } from './steps/FileSystem/FileSystemTable';
|
||||
import FirewallStep from './steps/Firewall';
|
||||
import FirstBootStep from './steps/FirstBoot';
|
||||
import HostnameStep from './steps/Hostname';
|
||||
import ImageOutputStep from './steps/ImageOutput';
|
||||
|
|
@ -142,6 +143,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
|
|||
const isLocaleEnabled = useFlag('image-builder.locale.enabled');
|
||||
const isHostnameEnabled = useFlag('image-builder.hostname.enabled');
|
||||
const isKernelEnabled = useFlag('image-builder.kernel.enabled');
|
||||
const isFirewallEnabled = useFlag('image-builder.firewall.enabled');
|
||||
|
||||
// Remove this and all fallthrough logic when snapshotting is enabled in Prod-stable
|
||||
// =========================TO REMOVE=======================
|
||||
|
|
@ -228,7 +230,7 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
|
|||
|
||||
let startIndex = 1; // default index
|
||||
if (isEdit) {
|
||||
startIndex = 20;
|
||||
startIndex = 21;
|
||||
}
|
||||
|
||||
// Duplicating some of the logic from the Wizard component to allow for custom nav items status
|
||||
|
|
@ -518,11 +520,14 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
|
|||
name="Firewall"
|
||||
id="wizard-firewall"
|
||||
key="wizard-firewall"
|
||||
isHidden={true}
|
||||
navItem={customStatusNavItem}
|
||||
isHidden={!isFirewallEnabled}
|
||||
footer={
|
||||
<CustomWizardFooter disableNext={false} optional={true} />
|
||||
}
|
||||
></WizardStep>,
|
||||
>
|
||||
<FirewallStep />
|
||||
</WizardStep>,
|
||||
<WizardStep
|
||||
name="First boot script configuration"
|
||||
id="wizard-first-boot"
|
||||
|
|
|
|||
16
src/Components/CreateImageWizard/steps/Firewall/index.tsx
Normal file
16
src/Components/CreateImageWizard/steps/Firewall/index.tsx
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import React from 'react';
|
||||
|
||||
import { Text, Form, Title } from '@patternfly/react-core';
|
||||
|
||||
const FirewallStep = () => {
|
||||
return (
|
||||
<Form>
|
||||
<Title headingLevel="h1" size="xl">
|
||||
Firewall
|
||||
</Title>
|
||||
<Text>Customize firewall settings for your image.</Text>
|
||||
</Form>
|
||||
);
|
||||
};
|
||||
|
||||
export default FirewallStep;
|
||||
|
|
@ -28,6 +28,7 @@ const goToDetailsStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
await clickNext(); // Details
|
||||
};
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
await clickNext(); // Review
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
import type { Router as RemixRouter } from '@remix-run/router';
|
||||
import { screen, waitFor } from '@testing-library/react';
|
||||
import { userEvent } from '@testing-library/user-event';
|
||||
|
||||
import {
|
||||
clickBack,
|
||||
clickNext,
|
||||
verifyCancelButton,
|
||||
} from '../../wizardTestUtils';
|
||||
import { clickRegisterLater, renderCreateMode } from '../../wizardTestUtils';
|
||||
|
||||
let router: RemixRouter | undefined = undefined;
|
||||
|
||||
const goToFirewallStep = async () => {
|
||||
const user = userEvent.setup();
|
||||
const guestImageCheckBox = await screen.findByRole('checkbox', {
|
||||
name: /virtualization guest image checkbox/i,
|
||||
});
|
||||
await waitFor(() => user.click(guestImageCheckBox));
|
||||
await clickNext(); // Registration
|
||||
await clickRegisterLater();
|
||||
await clickNext(); // OpenSCAP
|
||||
await clickNext(); // File system configuration
|
||||
await clickNext(); // Snapshots
|
||||
await clickNext(); // Custom repositories
|
||||
await clickNext(); // Additional packages
|
||||
await clickNext(); // Users
|
||||
await clickNext(); // Timezone
|
||||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
};
|
||||
|
||||
describe('Step Firewall', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
router = undefined;
|
||||
});
|
||||
|
||||
test('clicking Next loads First boot', async () => {
|
||||
await renderCreateMode();
|
||||
await goToFirewallStep();
|
||||
await clickNext();
|
||||
await screen.findByRole('heading', {
|
||||
name: 'First boot configuration',
|
||||
});
|
||||
});
|
||||
|
||||
test('clicking Back loads Kernel', async () => {
|
||||
await renderCreateMode();
|
||||
await goToFirewallStep();
|
||||
await clickBack();
|
||||
await screen.findByRole('heading', { name: 'Kernel' });
|
||||
});
|
||||
|
||||
test('clicking Cancel loads landing page', async () => {
|
||||
await renderCreateMode();
|
||||
await goToFirewallStep();
|
||||
await verifyCancelButton(router);
|
||||
});
|
||||
});
|
||||
|
||||
// TO DO Step Firewall -> revisit step button on Review works
|
||||
// TO DO Firewall request generated correctly
|
||||
// TO DO Firewall edit mode
|
||||
|
|
@ -50,6 +50,7 @@ const goToFirstBootStep = async (): Promise<void> => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First Boot
|
||||
};
|
||||
|
||||
|
|
@ -74,6 +75,7 @@ const goFromOscapToFirstBoot = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ const goToHostnameStep = async () => {
|
|||
|
||||
const goToReviewStep = async () => {
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -37,12 +37,12 @@ describe('Step Kernel', () => {
|
|||
router = undefined;
|
||||
});
|
||||
|
||||
test('clicking Next loads First boot script', async () => {
|
||||
test('clicking Next loads Firewall', async () => {
|
||||
await renderCreateMode();
|
||||
await goToKernelStep();
|
||||
await clickNext();
|
||||
await screen.findByRole('heading', {
|
||||
name: 'First boot configuration',
|
||||
name: 'Firewall',
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ const goToLocaleStep = async () => {
|
|||
const goToReviewStep = async () => {
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // FirstBoot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName('Oscap test');
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First Boot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
await clickNext(); // Review
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First Boot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
await clickNext(); // Details
|
||||
await clickNext(); // Review
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
await enterBlueprintName();
|
||||
await clickNext(); // Review
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ const goToReview = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // FirstBoot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ const goToReview = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // FirstBoot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ const goToReview = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // FirstBoot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot script
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ const goToReviewStep = async () => {
|
|||
await clickNext(); // Locale
|
||||
await clickNext(); // Hostname
|
||||
await clickNext(); // Kernel
|
||||
await clickNext(); // Firewall
|
||||
await clickNext(); // First boot
|
||||
await clickNext(); // Details
|
||||
await enterBlueprintName();
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ vi.mock('@unleash/proxy-client-react', () => ({
|
|||
return true;
|
||||
case 'image-builder.kernel.enabled':
|
||||
return true;
|
||||
case 'image-builder.firewall.enabled':
|
||||
return true;
|
||||
case 'edgeParity.image-list':
|
||||
return true;
|
||||
case 'image-builder.edge.local-image-table':
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue