diff --git a/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-hub.cy.ts b/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-hub.cy.ts index f6f25c17678..ddb5e3490d0 100644 --- a/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-hub.cy.ts +++ b/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-hub.cy.ts @@ -1,7 +1,6 @@ import { checkErrors, testName } from '@console/cypress-integration-tests/support'; -// Disabled due to createRoot concurrent rendering failures (OCPBUGS-82506) -xdescribe('Interacting with Operators', () => { +describe('Interacting with Operators', () => { before(() => { cy.login(); cy.createProjectWithCLI(testName); @@ -40,11 +39,16 @@ xdescribe('Interacting with Operators', () => { cy.log('more than one tile should be present'); cy.get('.co-catalog-tile').its('length').should('be.gt', 0); cy.log('the first tile title text for Certified should not be the same as Community'); + // Wait for catalog to re-render with new filter - under React 18 concurrent rendering, + // tile updates are batched and happen asynchronously. Use .should() callback to retry + // until the tile content actually changes. cy.get('.co-catalog-tile') .first() .find('.catalog-tile-pf-title') - .invoke('text') - .should('not.equal', origCatalogTitleTxt); + .should(($title) => { + const newTitleTxt = $title.text(); + expect(newTitleTxt).not.to.equal(origCatalogTitleTxt); + }); }); cy.log('filters Operators by name'); diff --git a/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-install-global.cy.ts b/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-install-global.cy.ts index b8663dd47a5..6927575bbcc 100644 --- a/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-install-global.cy.ts +++ b/frontend/packages/operator-lifecycle-manager/integration-tests/tests/operator-install-global.cy.ts @@ -38,8 +38,7 @@ const cleanupOperatorResources = () => { ); }; -// Disabled due to createRoot concurrent rendering failures (OCPBUGS-82507) -xdescribe(`Globally installing "${testOperator.name}" operator in ${GlobalInstalledNamespace}`, () => { +describe(`Globally installing "${testOperator.name}" operator in ${GlobalInstalledNamespace}`, () => { before(() => { cy.login(); cleanupOperatorResources(); diff --git a/frontend/packages/operator-lifecycle-manager/integration-tests/views/operator.view.ts b/frontend/packages/operator-lifecycle-manager/integration-tests/views/operator.view.ts index e7961ecab31..ac60928177e 100644 --- a/frontend/packages/operator-lifecycle-manager/integration-tests/views/operator.view.ts +++ b/frontend/packages/operator-lifecycle-manager/integration-tests/views/operator.view.ts @@ -44,8 +44,9 @@ export const operator = { */ if (installToNamespace !== GlobalInstalledNamespace) { cy.log('configure Operator install for single namespace'); - // Wait for radio button to be visible before checking to avoid race conditions - cy.byTestID('A specific namespace on the cluster-radio-input', { timeout: 30000 }) + // Under React 18 concurrent rendering, install mode radios mount after async data loads. + // Increase timeout to handle deferred rendering. + cy.byTestID('A specific namespace on the cluster-radio-input', { timeout: 60000 }) .should('be.visible') .check(); if (useOperatorRecommendedNamespace) { @@ -60,7 +61,9 @@ export const operator = { }); } } else { - cy.byTestID('All namespaces on the cluster-radio-input', { timeout: 30000 }).should( + // Under React 18 concurrent rendering, install mode radios mount after async data loads. + // Increase timeout to handle deferred rendering. + cy.byTestID('All namespaces on the cluster-radio-input', { timeout: 60000 }).should( 'be.checked', ); }