From 9f2b94a2a295393ea0555d8dddddbb1696de8211 Mon Sep 17 00:00:00 2001 From: Celia Amador Date: Mon, 20 Apr 2026 12:39:29 +0200 Subject: [PATCH] EDM-3687: Allow user to go back to step to fix problems --- libs/cypress/e2e/fleets/createFleet.cy.ts | 15 +++++++++++++++ libs/cypress/pages/CreateFleetWizardPage.ts | 4 ++++ .../Fleet/CreateFleet/CreateFleetWizard.tsx | 7 +++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/libs/cypress/e2e/fleets/createFleet.cy.ts b/libs/cypress/e2e/fleets/createFleet.cy.ts index a0b8a55fd..f91c9a02c 100644 --- a/libs/cypress/e2e/fleets/createFleet.cy.ts +++ b/libs/cypress/e2e/fleets/createFleet.cy.ts @@ -58,6 +58,21 @@ describe('Create fleet form', () => { fleetDetailsPage.title.should('have.text', 'sample-fleet'); }); + it('allows navigating between previous and current step when there are validation errors', () => { + fleetsPage.openCreateFleetFormButton.click(); + createFleetWizardPage = new CreateFleetWizardPage(); + + createFleetWizardPage.newFleetNameField.type('another-fleet'); + createFleetWizardPage.nextFleetWizardButton.should('be.enabled').click(); + + createFleetWizardPage.newFleetSystemImageField.type('invalid!oci').blur(); + createFleetWizardPage.nextFleetWizardButton.should('be.disabled'); + createFleetWizardPage.backFleetWizardButton.click(); + createFleetWizardPage.nextFleetWizardButton.should('be.enabled').click(); + + createFleetWizardPage.newFleetSystemImageField.should('be.visible').should('have.value', 'invalid!oci'); + }); + it('disables the create fleet button if a fleet with the same name exists', () => { const existingFleetName = 'eu-west-prod-001'; fleetsPage.fleetRow(existingFleetName).should('exist'); diff --git a/libs/cypress/pages/CreateFleetWizardPage.ts b/libs/cypress/pages/CreateFleetWizardPage.ts index b74576f0f..af52ce254 100644 --- a/libs/cypress/pages/CreateFleetWizardPage.ts +++ b/libs/cypress/pages/CreateFleetWizardPage.ts @@ -59,6 +59,10 @@ export class CreateFleetWizardPage { return cy.contains('button', 'Next'); } + get backFleetWizardButton() { + return cy.contains('button', 'Back'); + } + get addConfigurationButton() { return cy.contains('button', 'Add configuration'); } diff --git a/libs/ui-components/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx b/libs/ui-components/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx index 38a7163f8..627f82afa 100644 --- a/libs/ui-components/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx +++ b/libs/ui-components/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx @@ -57,9 +57,12 @@ const getValidStepIds = (formikErrors: FormikErrors): string[] return validStepIds; }; +// Do not disable the current step where there could be validation errors const isDisabledStep = (stepId: string, validStepIds: string[]) => { - const validIndex = validStepIds.indexOf(stepId); - return validIndex === -1 || validIndex !== orderedIds.indexOf(stepId); + const stepIdx = orderedIds.findIndex((orderedStepId) => orderedStepId === stepId); + return orderedIds.some((orderedId, orderedStepIdx) => { + return orderedStepIdx < stepIdx && !validStepIds.includes(orderedId); + }); }; const CreateFleetWizard = () => {