From 6f2dfa09eae6814e61008f6764e7cda49968b84a Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Mon, 27 Apr 2026 14:51:31 -0300 Subject: [PATCH 1/6] perses and monitoring stabilization --- web/cypress/e2e/monitoring/00.bvt_admin.cy.ts | 4 + .../e2e/perses/00.coo_bvt_perses_admin.cy.ts | 1 + .../perses/04.coo_import_perses_admin.cy.ts | 1 + .../e2e/perses/99.coo_rbac_perses_user1.cy.ts | 3 + .../e2e/perses/99.coo_rbac_perses_user2.cy.ts | 2 + .../e2e/perses/99.coo_rbac_perses_user3.cy.ts | 3 + .../e2e/perses/99.coo_rbac_perses_user4.cy.ts | 3 + .../e2e/perses/99.coo_rbac_perses_user5.cy.ts | 3 + .../e2e/perses/99.coo_rbac_perses_user6.cy.ts | 2 + .../import/testing-perses-dashboard.json | 36 +----- .../import/testing-perses-dashboard.yaml | 23 +--- web/cypress/fixtures/perses/constants.ts | 15 +-- .../support/commands/dashboards-commands.ts | 113 +++++------------- .../support/commands/utility-commands.ts | 48 ++++---- .../monitoring/00.bvt_monitoring.cy.ts | 4 +- .../monitoring/03.reg_legacy_dashboards.cy.ts | 5 - .../06.reg_legacy_dashboards_namespace.cy.ts | 4 - .../perses/01.coo_list_perses_admin.cy.ts | 2 +- .../perses/03.coo_create_perses_admin.cy.ts | 2 +- .../perses/04.coo_import_perses_admin.cy.ts | 2 - .../perses/99.coo_rbac_perses_user1.cy.ts | 8 +- web/cypress/views/alerting-rule-list-page.ts | 21 +++- web/cypress/views/common.ts | 4 +- web/cypress/views/metrics.ts | 2 +- .../perses-dashboards-create-dashboard.ts | 28 ++++- .../views/perses-dashboards-edit-variables.ts | 1 + .../perses-dashboards-list-dashboards.ts | 4 +- web/cypress/views/perses-dashboards-panel.ts | 12 -- web/cypress/views/perses-dashboards.ts | 1 + web/cypress/views/silence-alert-page.ts | 2 +- web/src/components/data-test.ts | 4 +- 31 files changed, 156 insertions(+), 207 deletions(-) diff --git a/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts index b082cab6b..2ab6d9698 100644 --- a/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts +++ b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts @@ -15,6 +15,8 @@ describe('BVT: Monitoring', { tags: ['@smoke', '@monitoring'] }, () => { }); beforeEach(() => { + nav.sidenav.clickNavLink(['Observe', 'Metrics']); + //TODO: remove this double Metrics click after the issue is fixed nav.sidenav.clickNavLink(['Observe', 'Metrics']); commonPages.titleShouldHaveText('Metrics'); cy.changeNamespace('All Projects'); @@ -36,6 +38,8 @@ describe('BVT: Monitoring', { tags: ['@smoke', '@monitoring'] }, () => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); commonPages.titleShouldHaveText('Dashboards'); nav.sidenav.clickNavLink(['Observe', 'Targets']); + //TODO: remove this double Targets click after the issue is fixed + nav.sidenav.clickNavLink(['Observe', 'Targets']); commonPages.titleShouldHaveText('Metrics targets'); }); // TODO: Intercept Bell GET request to inject an alert (Watchdog to have it opened in diff --git a/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts b/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts index 0968e050c..e51f3c241 100644 --- a/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts +++ b/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts @@ -30,6 +30,7 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); + cy.changeNamespace('All Projects'); }); //TODO: rename after customizable-dashboards gets merged diff --git a/web/cypress/e2e/perses/04.coo_import_perses_admin.cy.ts b/web/cypress/e2e/perses/04.coo_import_perses_admin.cy.ts index 94bb852dd..e49001030 100644 --- a/web/cypress/e2e/perses/04.coo_import_perses_admin.cy.ts +++ b/web/cypress/e2e/perses/04.coo_import_perses_admin.cy.ts @@ -30,6 +30,7 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); cy.wait(5000); cy.changeNamespace('All Projects'); diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user1.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user1.cy.ts index 1d04fc675..252a89577 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user1.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user1.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,7 +69,9 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); + cy.changeNamespace('All Projects'); }); after(() => { diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user2.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user2.cy.ts index f674be327..df7841491 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user2.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user2.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,6 +69,7 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); cy.changeNamespace('All Projects'); }); diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user3.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user3.cy.ts index d95ac1be0..8e3532d10 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user3.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user3.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,7 +69,9 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); + cy.changeNamespace('All Projects'); }); after(() => { diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user4.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user4.cy.ts index 6f84db67b..4e296fffc 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user4.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user4.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,7 +69,9 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); + cy.changeNamespace('All Projects'); }); after(() => { diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user5.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user5.cy.ts index 90596c576..94e9ada81 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user5.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user5.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,7 +69,9 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); + cy.changeNamespace('All Projects'); }); after(() => { diff --git a/web/cypress/e2e/perses/99.coo_rbac_perses_user6.cy.ts b/web/cypress/e2e/perses/99.coo_rbac_perses_user6.cy.ts index 0b37438e3..4680bc1a3 100644 --- a/web/cypress/e2e/perses/99.coo_rbac_perses_user6.cy.ts +++ b/web/cypress/e2e/perses/99.coo_rbac_perses_user6.cy.ts @@ -32,6 +32,7 @@ describe( // Step 2: Setup COO and Perses dashboards (requires admin privileges) cy.beforeBlockCOO(MCP, MP, { dashboards: true, troubleshootingPanel: false }); + cy.cleanupPersesTestDashboardsBeforeTests(); cy.setupPersesRBACandExtraDashboards(); //TODO: https://issues.redhat.com/browse/OCPBUGS-58468 - when it gets fixed, installation can be don using non-admin user @@ -68,6 +69,7 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); + cy.wait(2000); nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); }); diff --git a/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.json b/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.json index 5a0099cb2..f5a2059af 100644 --- a/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.json +++ b/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.json @@ -231,31 +231,6 @@ } ] } - }, - "c03e17f849d341bcb1139c65e68dad1d": { - "kind": "Panel", - "spec": { - "display": { - "name": "status history" - }, - "plugin": { - "kind": "StatusHistoryChart", - "spec": {} - }, - "queries": [ - { - "kind": "TimeSeriesQuery", - "spec": { - "plugin": { - "kind": "PrometheusTimeSeriesQuery", - "spec": { - "query": "vector(1)" - } - } - } - } - ] - } } }, "layouts": [ @@ -317,16 +292,7 @@ { "x": 0, "y": 15, - "width": 12, - "height": 6, - "content": { - "$ref": "#/spec/panels/c03e17f849d341bcb1139c65e68dad1d" - } - }, - { - "x": 12, - "y": 15, - "width": 12, + "width": 24, "height": 6, "content": { "$ref": "#/spec/panels/31b8374866184a26beddf46ec30df0b5" diff --git a/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.yaml b/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.yaml index ef5cd77e2..5fb97a105 100644 --- a/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.yaml +++ b/web/cypress/fixtures/coo/coo140_perses/import/testing-perses-dashboard.yaml @@ -143,21 +143,6 @@ spec: kind: PrometheusTimeSeriesQuery spec: query: up - c03e17f849d341bcb1139c65e68dad1d: - kind: Panel - spec: - display: - name: status history - plugin: - kind: StatusHistoryChart - spec: {} - queries: - - kind: TimeSeriesQuery - spec: - plugin: - kind: PrometheusTimeSeriesQuery - spec: - query: vector(1) layouts: - kind: Grid spec: @@ -198,13 +183,7 @@ spec: $ref: "#/spec/panels/57ce686052c9464fa9486ff49d3757cd" - x: 0 "y": 15 - width: 12 - height: 6 - content: - $ref: "#/spec/panels/c03e17f849d341bcb1139c65e68dad1d" - - x: 12 - "y": 15 - width: 12 + width: 24 height: 6 content: $ref: "#/spec/panels/31b8374866184a26beddf46ec30df0b5" diff --git a/web/cypress/fixtures/perses/constants.ts b/web/cypress/fixtures/perses/constants.ts index 2a7ff2fa6..a9a77ea4d 100644 --- a/web/cypress/fixtures/perses/constants.ts +++ b/web/cypress/fixtures/perses/constants.ts @@ -142,12 +142,12 @@ export const persesDashboardsAddPanelAddQueryType = { }; export const persesCreateDashboard = { - DIALOG_MAX_LENGTH_VALIDATION: 'Must be 75 or fewer characters long: error status;', + DIALOG_MAX_LENGTH_VALIDATION: + 'Danger alert:bad request: code=400, message=cannot contain more than 75 characters, internal=cannot contain more than 75 characters', DIALOG_DUPLICATED_NAME_PF_VALIDATION_PREFIX: 'Dashboard name ', DIALOG_DUPLICATED_NAME_PF_VALIDATION_SUFFIX: ' already exists in ', DIALOG_DUPLICATED_NAME_PF_VALIDATION_SUFFIX_PROJECT: ' project!: error status;', - DIALOG_DUPLICATED_NAME_BKD_VALIDATION: - 'Danger alert:Could not create dashboard. e: document already exists', + DIALOG_CREATE_NAME_BKD_VALIDATION: 'Danger alert:document already exists', }; export const persesDashboardsEmptyDashboard = { @@ -167,7 +167,9 @@ export const persesDashboardsRenameDashboard = { }; export const persesDashboardsDuplicateDashboard = { - DIALOG_DUPLICATED_NAME_VALIDATION: 'already exists', //use contains + DIALOG_DUPLICATED_NAME_VALIDATION: 'Could not duplicate dashboard. e: document already exists', //use contains + DIALOG_DUPLICATED_NAME_FED_VALIDATION_1: 'Dashboard name "', + DIALOG_DUPLICATED_NAME_FED_VALIDATION_2: '" already exists in this project: error status;', }; export const persesDashboardsImportDashboard = { @@ -180,7 +182,6 @@ export const persesDashboardsImportDashboard = { 'Grafana dashboard detected. It will be automatically migrated to Perses format. Note: migration may be partial as not all Grafana features are supported.', DIALOG_PERSES_DASHBOARD_DETECTED: 'Perses dashboard detected.', DIALOG_FAILED_TO_MIGRATE_GRAFANA_DASHBOARD: - 'Danger alert:Error migrating dashboard: Failed to migrate dashboard: internal server error', - DIALOG_DUPLICATED_DASHBOARD_ERROR: - 'Danger alert:Error importing dashboard: document already exists', + 'Danger alert:Failed to migrate dashboard: internal server error', + DIALOG_DUPLICATED_DASHBOARD_ERROR: 'Danger alert:document already exists', }; diff --git a/web/cypress/support/commands/dashboards-commands.ts b/web/cypress/support/commands/dashboards-commands.ts index 4c7f2496a..407fc86eb 100644 --- a/web/cypress/support/commands/dashboards-commands.ts +++ b/web/cypress/support/commands/dashboards-commands.ts @@ -30,92 +30,45 @@ export const dashboardsUtils = { failOnNonZeroExit: false, }); - /** - * TODO: When COO1.4.0 is released, points COO_UI_INSTALL to install dashboards on - * COO1.4.0 folder - */ - if (Cypress.env('COO_UI_INSTALL')) { - cy.log('COO_UI_INSTALL is set. Installing dashboards on COO1.4.0 folder'); - - cy.log('Create openshift-cluster-sample-dashboard instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `openshift-cluster-sample-dashboard.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - - cy.log('Create perses-dashboard-sample instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `perses-dashboard-sample.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - - cy.log('Create prometheus-overview-variables instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `prometheus-overview-variables.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - - cy.log('Create thanos-compact-overview-1var instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `thanos-compact-overview-1var.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - - cy.log('Create Thanos Querier instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `thanos-querier-datasource.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - } else { - cy.log('COO_UI_INSTALL is not set. Installing dashboards on COO1.4.0 folder'); - - cy.log('Create openshift-cluster-sample-dashboard instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `openshift-cluster-sample-dashboard.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); + cy.log('Create openshift-cluster-sample-dashboard instance.'); + cy.exec( + `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + + `openshift-cluster-sample-dashboard.yaml ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + ); - cy.log('Create perses-dashboard-sample instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `perses-dashboard-sample.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); + cy.log('Create perses-dashboard-sample instance.'); + cy.exec( + `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + + `perses-dashboard-sample.yaml ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + ); - cy.log('Create prometheus-overview-variables instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `prometheus-overview-variables.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); + cy.log('Create prometheus-overview-variables instance.'); + cy.exec( + `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + + `prometheus-overview-variables.yaml ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + ); - cy.log('Create thanos-compact-overview-1var instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `thanos-compact-overview-1var.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); + cy.log('Create thanos-compact-overview-1var instance.'); + cy.exec( + `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + + `thanos-compact-overview-1var.yaml ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + ); - cy.log('Create Thanos Querier instance.'); - cy.exec( - `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + - `thanos-querier-datasource.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, - ); - } + cy.log('Create Thanos Querier instance.'); + cy.exec( + `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + + `thanos-querier-datasource.yaml ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + ); cy.exec( - `oc label namespace ${ - MCP.namespace - } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig ${Cypress.env( - 'KUBECONFIG_PATH', - )}`, + `oc label namespace ${MCP.namespace} ` + + `openshift.io/cluster-monitoring=true --overwrite=true ` + + `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, ); waitForPodsReady( diff --git a/web/cypress/support/commands/utility-commands.ts b/web/cypress/support/commands/utility-commands.ts index 8759a8b17..5a1bb7cf8 100644 --- a/web/cypress/support/commands/utility-commands.ts +++ b/web/cypress/support/commands/utility-commands.ts @@ -57,7 +57,6 @@ Cypress.Commands.add('clickNavLink', (path: string[]) => { Cypress.Commands.add('changeNamespace', (namespace: string) => { cy.log('Changing Namespace to: ' + namespace); - cy.wait(2000); cy.get('body').then(($body) => { const hasNamespaceBarDropdown = $body.find('[data-test-id="' + LegacyTestIDs.NamespaceBarDropdown + '"]').length > 0; @@ -141,31 +140,41 @@ Cypress.Commands.overwrite('log', (log, ...args) => { Cypress.Commands.add('podImage', (pod: string, namespace: string) => { cy.log('Get pod image'); cy.switchPerspective('Core platform', 'Administrator'); - cy.wait(5000); cy.clickNavLink(['Workloads', 'Pods']); - cy.changeNamespace(namespace); cy.byTestID('page-heading').contains('Pods').should('be.visible'); - cy.wait(5000); - // Check for DataViewFilters component using Cypress's built-in retry-ability + cy.changeNamespace(namespace); + // Wait for the pod table to load after namespace change so the page stabilizes + cy.get('table tbody tr, [data-ouia-component-id="DataViewTable"] tbody tr', { + timeout: 30000, + }).should('have.length.greaterThan', 0); + // Re-check for DataViewFilters after the table has stabilized cy.get('body').then(($body) => { const hasDataViewFilters = $body.find('[data-ouia-component-id="DataViewFilters"]').length > 0; + let filterSelector: string; if (hasDataViewFilters) { - cy.byOUIAID('DataViewFilters') - .find('button') - .contains('Status') - .scrollIntoView() - .should('be.visible') - .click(); - cy.byOUIAID('OUIA-Generated-Menu') - .find('button') - .contains('Name') - .scrollIntoView() - .should('be.visible') - .click(); - cy.get('[placeholder="Filter by name"]').scrollIntoView().should('be.visible').type(pod); + const hasFilterByName = $body.find('[placeholder="Filter by name"]').length > 0; + filterSelector = '[placeholder="Filter by name"]'; + if (!hasFilterByName) { + cy.byOUIAID('DataViewFilters') + .find('button') + .contains('Status') + .scrollIntoView() + .should('be.visible') + .click(); + cy.byOUIAID('OUIA-Generated-Menu') + .find('button') + .contains('Name') + .scrollIntoView() + .should('be.visible') + .click(); + } } else { - cy.byTestID('name-filter-input').should('be.visible').type(pod); + filterSelector = '[data-test="name-filter-input"]'; } + // Separate the visibility assertion from the type action so Cypress + // re-queries the element for each command independently. + cy.get(filterSelector).scrollIntoView().should('be.visible'); + cy.get(filterSelector).type(pod); }); cy.get(`a[data-test^="${pod}"]`).eq(0).as('podLink').click(); cy.byPFRole('rowgroup') @@ -181,7 +190,6 @@ Cypress.Commands.add('podImage', (pod: string, namespace: string) => { Cypress.Commands.add('assertNamespace', (namespace: string, exists: boolean) => { cy.log('Asserting Namespace: ' + namespace + ' exists: ' + exists); - cy.wait(2000); cy.get('body').then(($body) => { const hasNamespaceBarDropdown = $body.find('[data-test-id="' + LegacyTestIDs.NamespaceBarDropdown + '"]').length > 0; diff --git a/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts b/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts index ce25b7571..c411bd71e 100644 --- a/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts +++ b/web/cypress/support/monitoring/00.bvt_monitoring.cy.ts @@ -34,7 +34,7 @@ export function testBVTMonitoring(perspective: PerspectiveConfig) { listPage.tabShouldHaveText('Silences'); listPage.tabShouldHaveText('Alerting rules'); commonPages.linkShouldExist('Export as CSV'); - commonPages.linkShouldExist('Clear filters'); + commonPages.linkShouldExist('Clear all filters'); listPage.ARRows.shouldBeLoaded(); cy.log('5.2. filter Alerts and click on Alert'); @@ -187,7 +187,7 @@ export function testBVTMonitoring(perspective: PerspectiveConfig) { cy.log('6.8 verify on Alerting Rules list page again'); nav.sidenav.clickNavLink(['Observe', 'Alerting']); nav.tabs.switchTab('Alerting rules'); - listPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); + alertingRuleListPage.filter.byName(`${WatchdogAlert.ALERTNAME}`); alertingRuleListPage.ARShouldBe( `${WatchdogAlert.ALERTNAME}`, `${WatchdogAlert.SEVERITY}`, diff --git a/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts b/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts index 09c86e15d..f25f9a6db 100644 --- a/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts +++ b/web/cypress/support/monitoring/03.reg_legacy_dashboards.cy.ts @@ -112,16 +112,11 @@ export function testLegacyDashboardsRegression(perspective: PerspectiveConfig) { listPage.ARRows.clickAlertingRule(); commonPages.titleShouldHaveText(`${WatchdogAlert.ALERTNAME}`); alertingRuleDetailsPage.clickHideGraphButton(); - cy.wait(2000); cy.byTestID(DataTestIDs.MetricGraph).should('not.exist'); alertingRuleDetailsPage.clickShowGraphButton(); - cy.wait(2000); cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); - cy.wait(2000); alertingRuleDetailsPage.clickHideGraphButton(); - cy.wait(2000); cy.byTestID(DataTestIDs.MetricGraph).should('not.exist'); - cy.wait(2000); cy.log('4.4 Observe > Alert details - Verify graph is visible'); cy.byTestID(DataTestIDs.AlertResourceLink).first().click(); diff --git a/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts b/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts index 4fe3cd5bc..4f576ba49 100644 --- a/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts +++ b/web/cypress/support/monitoring/06.reg_legacy_dashboards_namespace.cy.ts @@ -15,7 +15,6 @@ import { alertingRuleDetailsPage } from '../../views/alerting-rule-details-page' import { alerts } from '../../fixtures/monitoring/alert'; import { listPage } from '../../views/list-page'; import { commonPages } from '../../views/common'; -import { guidedTour } from '../../views/tour'; export interface PerspectiveConfig { name: string; @@ -76,9 +75,6 @@ export function testLegacyDashboardsRegressionNamespace(perspective: Perspective it(`${perspective.name} perspective - Dashboards (legacy) - No kebab dropdown`, () => { cy.log('3.1 Single Stat - No kebab dropdown'); - cy.visit('/'); - guidedTour.close(); - cy.validateLogin(); nav.sidenav.clickNavLink(['Observe', 'Dashboards']); commonPages.titleShouldHaveText('Dashboards'); cy.changeNamespace('openshift-monitoring'); diff --git a/web/cypress/support/perses/01.coo_list_perses_admin.cy.ts b/web/cypress/support/perses/01.coo_list_perses_admin.cy.ts index 7eed77d2d..4244bf4e1 100644 --- a/web/cypress/support/perses/01.coo_list_perses_admin.cy.ts +++ b/web/cypress/support/perses/01.coo_list_perses_admin.cy.ts @@ -367,7 +367,7 @@ export function testCOOListPersesDuplicateDashboard(perspective: PerspectiveConf cy.log(`6.4. Back to the list and duplicate to another project`); persesDashboardsPage.backToListPersesDashboardsPage(); - + cy.wait(2000); listPersesDashboardsPage.filter.byProject('perses-dev'); listPersesDashboardsPage.filter.byName( persesDashboardsDashboardDropdownPersesDev.PERSES_DASHBOARD_SAMPLE[0], diff --git a/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts b/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts index dab4172e8..877eb76be 100644 --- a/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts +++ b/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts @@ -96,7 +96,7 @@ export function testCOOCreatePerses(perspective: PerspectiveConfig) { persesCreateDashboardsPage.selectProject('openshift-cluster-observability-operator'); persesCreateDashboardsPage.enterDashboardName(dashboardName); persesCreateDashboardsPage.createDashboardDialogCreateButton(); - persesCreateDashboardsPage.assertDuplicatedNameValidation(); + persesCreateDashboardsPage.assertDuplicatedNameValidationFed(dashboardName); cy.log(`2.7. Create another dashboard with the same name in other project`); persesCreateDashboardsPage.selectProject('perses-dev'); diff --git a/web/cypress/support/perses/04.coo_import_perses_admin.cy.ts b/web/cypress/support/perses/04.coo_import_perses_admin.cy.ts index aee80d33d..f95af5101 100644 --- a/web/cypress/support/perses/04.coo_import_perses_admin.cy.ts +++ b/web/cypress/support/perses/04.coo_import_perses_admin.cy.ts @@ -53,7 +53,6 @@ export function testCOOImportPerses(perspective: PerspectiveConfig) { cy.log(`1.10 Assert failed to migrate Grafana dashboard`); persesImportDashboardsPage.assertFailedToMigrateGrafanaDashboard(); - persesDashboardsPage.closeAlert(); cy.log(`1.11 Cancel import`); persesImportDashboardsPage.clickCancelButton(); @@ -106,7 +105,6 @@ export function testCOOImportPerses(perspective: PerspectiveConfig) { persesImportDashboardsPage.clickImportFileButton(); persesImportDashboardsPage.assertDuplicatedDashboardError(); persesImportDashboardsPage.clickCancelButton(); - persesDashboardsPage.closeAlert(); }); it(`3. ${perspective.name} perspective - Import Dashboard - Perses dashboard - JSON file`, () => { diff --git a/web/cypress/support/perses/99.coo_rbac_perses_user1.cy.ts b/web/cypress/support/perses/99.coo_rbac_perses_user1.cy.ts index a6f51a097..0325bcf86 100644 --- a/web/cypress/support/perses/99.coo_rbac_perses_user1.cy.ts +++ b/web/cypress/support/perses/99.coo_rbac_perses_user1.cy.ts @@ -442,9 +442,11 @@ export function testCOORBACPersesTestsDevUser1(perspective: PerspectiveConfig) { cy.log(`6.4. Change namespace to openshift-cluster-observability-operator`); cy.changeNamespace('openshift-cluster-observability-operator'); + cy.wait(2000); cy.log(`6.5. Assert Kebab icon is enabled`); listPersesDashboardsPage.clearAllFilters(); + listPersesDashboardsPage.filter.byProject('openshift-cluster-observability-operator'); listPersesDashboardsPage.filter.byName( persesDashboardsDashboardDropdownCOO.K8S_COMPUTE_RESOURCES_CLUSTER[0], ); @@ -452,11 +454,11 @@ export function testCOORBACPersesTestsDevUser1(perspective: PerspectiveConfig) { listPersesDashboardsPage.assertKebabIconOptions(); listPersesDashboardsPage.clickKebabIcon(); - cy.log(`6.2. Change namespace to All Projects`); + cy.log(`6.6. Change namespace to All Projects`); cy.changeNamespace('All Projects'); listPersesDashboardsPage.clearAllFilters(); - cy.log(`6.3. Filter by Project and Name`); + cy.log(`6.7. Filter by Project and Name`); listPersesDashboardsPage.filter.byProject('observ-test'); listPersesDashboardsPage.filter.byName( persesDashboardsDashboardDropdownPersesDev.PERSES_DASHBOARD_SAMPLE[0], @@ -466,7 +468,7 @@ export function testCOORBACPersesTestsDevUser1(perspective: PerspectiveConfig) { listPersesDashboardsPage.assertKebabIconDisabled(); listPersesDashboardsPage.clearAllFilters(); - cy.log(`6.4. Filter by Project and Name`); + cy.log(`6.8. Filter by Project and Name`); listPersesDashboardsPage.filter.byProject('openshift-cluster-observability-operator'); listPersesDashboardsPage.filter.byName( persesDashboardsDashboardDropdownCOO.K8S_COMPUTE_RESOURCES_CLUSTER[0], diff --git a/web/cypress/views/alerting-rule-list-page.ts b/web/cypress/views/alerting-rule-list-page.ts index f82edd53c..1f640e65a 100644 --- a/web/cypress/views/alerting-rule-list-page.ts +++ b/web/cypress/views/alerting-rule-list-page.ts @@ -1,4 +1,4 @@ -import { DataTestIDs, Classes } from '../../src/components/data-test'; +import { DataTestIDs, Classes, FilterOUIAIDs } from '../../src/components/data-test'; import { Source } from '../fixtures/monitoring/constants'; import { listPage } from './list-page'; @@ -27,6 +27,25 @@ export const alertingRuleListPage = { throw error; } }, + + byName: (name: string, ouiaId: string = FilterOUIAIDs.RuleNameFilter) => { + cy.log('listPage.filter.byName'); + try { + listPage.filter.selectAttribute('Name'); + cy.byOUIAID(`${ouiaId}-input`) + .find('input') + .scrollIntoView() + .as('input') + .should('be.visible'); + cy.get('@input', { timeout: 10000 }) + .scrollIntoView() + .type(name + '{enter}'); + cy.get('@input', { timeout: 10000 }).scrollIntoView().should('have.attr', 'value', name); + } catch (error) { + cy.log(`${error.message}`); + throw error; + } + }, }, clickAlertingRule: (alertRule: string) => { diff --git a/web/cypress/views/common.ts b/web/cypress/views/common.ts index 21f378c25..22b844456 100644 --- a/web/cypress/views/common.ts +++ b/web/cypress/views/common.ts @@ -7,7 +7,9 @@ export const commonPages = { projectDropdownShouldExist: () => cy.byLegacyTestID('namespace-bar-dropdown').should('exist'), titleShouldHaveText: (title: string) => { cy.log('commonPages.titleShouldHaveText - ' + `${title}`); - cy.waitUntil(() => cy.bySemanticElement('h1', title).should('be.visible'), { timeout: 60000 }); + cy.waitUntil(() => cy.bySemanticElement('h1', title).scrollIntoView().should('be.visible'), { + timeout: 60000, + }); }, titleModalShouldHaveText: (title: string) => { diff --git a/web/cypress/views/metrics.ts b/web/cypress/views/metrics.ts index 8a6a304ed..137ae87f3 100644 --- a/web/cypress/views/metrics.ts +++ b/web/cypress/views/metrics.ts @@ -141,7 +141,7 @@ export const metricsPage = { unitsDropdownAssertion: () => { cy.log('metricsPage.unitsDropdownAssertion'); - cy.byTestID(DataTestIDs.MetricGraphUnitsDropDown).should('be.visible').click(); + cy.byTestID(DataTestIDs.MetricGraphUnitsDropDown).scrollIntoView().should('be.visible').click(); const units = Object.values(MetricsPageUnits); units.forEach((unit) => { diff --git a/web/cypress/views/perses-dashboards-create-dashboard.ts b/web/cypress/views/perses-dashboards-create-dashboard.ts index cbcaa8b2f..670dc8725 100644 --- a/web/cypress/views/perses-dashboards-create-dashboard.ts +++ b/web/cypress/views/perses-dashboards-create-dashboard.ts @@ -1,5 +1,9 @@ import { Classes, IDs, persesAriaLabels } from '../../src/components/data-test'; -import { persesCreateDashboard, persesDashboardsModalTitles } from '../fixtures/perses/constants'; +import { + persesCreateDashboard, + persesDashboardsDuplicateDashboard, + persesDashboardsModalTitles, +} from '../fixtures/perses/constants'; export const persesCreateDashboardsPage = { createDashboardShouldBeLoaded: () => { @@ -65,15 +69,29 @@ export const persesCreateDashboardsPage = { assertMaxLengthValidation: () => { cy.log('persesCreateDashboardsPage.assertMaxLengthValidation'); cy.byPFRole('dialog') - .find(Classes.PersesCreateDashboardDashboardNameError) - .should('have.text', `${persesCreateDashboard.DIALOG_MAX_LENGTH_VALIDATION}`) + .find('h4') + .should('have.text', persesCreateDashboard.DIALOG_MAX_LENGTH_VALIDATION) .should('be.visible'); }, assertDuplicatedNameValidation: () => { cy.log('persesCreateDashboardsPage.assertDuplicatedNameValidation'); - cy.get(Classes.PersesDuplicateDashboardNameError) - .should('have.text', persesCreateDashboard.DIALOG_DUPLICATED_NAME_BKD_VALIDATION) + cy.byPFRole('dialog') + .find('h4') + .should('have.text', persesCreateDashboard.DIALOG_CREATE_NAME_BKD_VALIDATION) + .should('be.visible'); + }, + + assertDuplicatedNameValidationFed: (dashboardName: string) => { + cy.log('persesCreateDashboardsPage.assertDuplicatedNameValidationFed'); + cy.byPFRole('dialog') + .find(Classes.PersesCreateDashboardDashboardNameError) + .should( + 'have.text', + persesDashboardsDuplicateDashboard.DIALOG_DUPLICATED_NAME_FED_VALIDATION_1 + + dashboardName + + persesDashboardsDuplicateDashboard.DIALOG_DUPLICATED_NAME_FED_VALIDATION_2, + ) .should('be.visible'); }, diff --git a/web/cypress/views/perses-dashboards-edit-variables.ts b/web/cypress/views/perses-dashboards-edit-variables.ts index 7bb9f6a63..4cb7d3c4e 100644 --- a/web/cypress/views/perses-dashboards-edit-variables.ts +++ b/web/cypress/views/perses-dashboards-edit-variables.ts @@ -129,6 +129,7 @@ export const persesDashboardsEditVariables = { if (allowAllValue) { cy.get('input[name="' + editPersesDashboardsAddVariable.inputAllowAllValue + '"]').click(); if (customAllValue !== undefined && customAllValue !== '') { + cy.get('input[type="checkbox"]').eq(2).click(); cy.get('input[name="' + editPersesDashboardsAddVariable.inputCustomAllValue + '"]') .clear() .type(customAllValue); diff --git a/web/cypress/views/perses-dashboards-list-dashboards.ts b/web/cypress/views/perses-dashboards-list-dashboards.ts index 139ac8c8e..58d6934ec 100644 --- a/web/cypress/views/perses-dashboards-list-dashboards.ts +++ b/web/cypress/views/perses-dashboards-list-dashboards.ts @@ -302,8 +302,8 @@ export const listPersesDashboardsPage = { assertDuplicateDashboardAlreadyExists: () => { cy.log('listPersesDashboardsPage.assertDuplicateDashboardAlreadyExists'); - cy.byPFRole('dialog') - .find(Classes.PersesCreateDashboardDashboardNameError) + cy.byPFRole('list') + .find('h4') .contains(persesDashboardsDuplicateDashboard.DIALOG_DUPLICATED_NAME_VALIDATION) .should('be.visible'); }, diff --git a/web/cypress/views/perses-dashboards-panel.ts b/web/cypress/views/perses-dashboards-panel.ts index a6f2e0c53..298f08adf 100644 --- a/web/cypress/views/perses-dashboards-panel.ts +++ b/web/cypress/views/perses-dashboards-panel.ts @@ -27,16 +27,12 @@ export const persesDashboardsPanel = { .contains('Type') .should('be.visible'); cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Add') .should('be.visible') .and('have.attr', 'disabled'); cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Cancel') @@ -185,8 +181,6 @@ export const persesDashboardsPanel = { break; } cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Add') @@ -272,16 +266,12 @@ export const persesDashboardsPanel = { .contains('Type') .should('be.visible'); cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Apply') .should('be.visible') .and('have.attr', 'disabled'); cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Cancel') @@ -301,8 +291,6 @@ export const persesDashboardsPanel = { persesDashboardsPanel.clickDropdownAndSelectOption('Group', group); persesDashboardsPanel.clickDropdownAndSelectOption('Type', type); cy.get('#' + IDs.persesDashboardAddPanelForm) - .parent('div') - .find('h2') .siblings('div') .find('button') .contains('Apply') diff --git a/web/cypress/views/perses-dashboards.ts b/web/cypress/views/perses-dashboards.ts index 8d5382503..b188a0972 100644 --- a/web/cypress/views/perses-dashboards.ts +++ b/web/cypress/views/perses-dashboards.ts @@ -170,6 +170,7 @@ export const persesDashboardsPage = { cy.byTestID(DataTestIDs.PersesDashboardDropdown) .find('input') .should('have.value', dashboardName); + cy.wait(2000); }, clickTimeRangeDropdown: (timeRange: persesDashboardsTimeRange) => { diff --git a/web/cypress/views/silence-alert-page.ts b/web/cypress/views/silence-alert-page.ts index 0787945e7..23c77f6e2 100644 --- a/web/cypress/views/silence-alert-page.ts +++ b/web/cypress/views/silence-alert-page.ts @@ -388,7 +388,7 @@ export const silenceAlertPage = { cy.log('silenceAlertPage.assertLabelValueError'); cy.get(Classes.SilenceAlertTitle).should( 'contain.text', - 'invalid silence: at least one matcher must not match the empty string', + 'Danger alert:invalid silence: matcher set 0: at least one matcher must not match the empty string', ); }, }; diff --git a/web/src/components/data-test.ts b/web/src/components/data-test.ts index b97bce313..e9d9a51e8 100644 --- a/web/src/components/data-test.ts +++ b/web/src/components/data-test.ts @@ -195,14 +195,14 @@ export const LegacyTestIDs = { export const IDs = { ChartAxis0ChartLabel: 'chart-axis-0-ChartLabel', //id^=IDs.ChartAxis0ChartLabel AxisX ChartAxis1ChartLabel: 'chart-axis-1-ChartLabel', //id^=IDs.ChartAxis1ChartLabel AxisY - persesDashboardCount: 'options-menu-top-pagination', + persesDashboardCount: 'options-menu-bottom-toggle', persesDashboardDownloadButton: 'download-dashboard-button', persesDashboardActionMenuModal: 'action-menu', persesDashboardEditVariablesModalBuiltinButton: 'builtin', persesDashboardAddPanelGroupForm: 'panel-group-editor-form', persesDashboardAddPanelForm: 'panel-editor-form', persesDashboardDiscardChangesDialog: 'discard-dialog', - persesDashboardCreateDashboardName: 'create-modal-dashboard-name-form-group-text-input', + persesDashboardCreateDashboardName: 'text-input-create-dashboard-dialog-name', persesDashboardRenameDashboardName: 'rename-modal-text-input', persesDashboardDuplicateDashboardName: 'duplicate-modal-dashboard-name-form-group-text-input', persesDashboardImportDashboardUploadFileInput: 'import-dashboard-file-filename', From da774994885cd70a89d9ef59603d431add46a29e Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Tue, 19 May 2026 12:51:05 -0300 Subject: [PATCH 2/6] stability and coderabbit fixes --- web/cypress/e2e/monitoring/00.bvt_admin.cy.ts | 4 -- web/cypress/support/commands/auth-commands.ts | 4 +- .../support/commands/coo-install-commands.ts | 62 +++++++++---------- .../support/commands/dashboards-commands.ts | 36 +++++------ .../support/commands/operator-commands.ts | 2 +- .../commands/traces-logging-commands.ts | 6 +- .../support/commands/utility-commands.ts | 10 +++ .../commands/virtualization-commands.ts | 24 +++---- .../support/monitoring/02.reg_metrics_1.cy.ts | 3 + .../support/monitoring/02.reg_metrics_2.cy.ts | 5 +- .../05.reg_metrics_namespace_2.cy.ts | 3 + web/cypress/views/common.ts | 11 +++- web/cypress/views/metrics.ts | 32 ++++++++-- web/cypress/views/silence-alert-page.ts | 2 +- 14 files changed, 122 insertions(+), 82 deletions(-) diff --git a/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts index 2ab6d9698..b082cab6b 100644 --- a/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts +++ b/web/cypress/e2e/monitoring/00.bvt_admin.cy.ts @@ -15,8 +15,6 @@ describe('BVT: Monitoring', { tags: ['@smoke', '@monitoring'] }, () => { }); beforeEach(() => { - nav.sidenav.clickNavLink(['Observe', 'Metrics']); - //TODO: remove this double Metrics click after the issue is fixed nav.sidenav.clickNavLink(['Observe', 'Metrics']); commonPages.titleShouldHaveText('Metrics'); cy.changeNamespace('All Projects'); @@ -38,8 +36,6 @@ describe('BVT: Monitoring', { tags: ['@smoke', '@monitoring'] }, () => { nav.sidenav.clickNavLink(['Observe', 'Dashboards']); commonPages.titleShouldHaveText('Dashboards'); nav.sidenav.clickNavLink(['Observe', 'Targets']); - //TODO: remove this double Targets click after the issue is fixed - nav.sidenav.clickNavLink(['Observe', 'Targets']); commonPages.titleShouldHaveText('Metrics targets'); }); // TODO: Intercept Bell GET request to inject an alert (Watchdog to have it opened in diff --git a/web/cypress/support/commands/auth-commands.ts b/web/cypress/support/commands/auth-commands.ts index 1fad0fa9f..2a3a9882b 100644 --- a/web/cypress/support/commands/auth-commands.ts +++ b/web/cypress/support/commands/auth-commands.ts @@ -72,7 +72,7 @@ export const operatorAuthUtils = { } cy.exec( `oc get oauthclient openshift-browser-client -o go-template ` + - `--template="{{index .redirectURIs 0}}" --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--template="{{index .redirectURIs 0}}" --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ).then((result) => { if (result.stderr === '') { const oauth = result.stdout; @@ -325,7 +325,7 @@ Cypress.Commands.add('relogin', (provider: string, username: string, password: s // Get the OAuth URL from the cluster (same as performLoginAndAuth does) cy.exec( `oc get oauthclient openshift-browser-client -o go-template ` + - `--template="{{index .redirectURIs 0}}" --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--template="{{index .redirectURIs 0}}" --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ).then((result) => { if (result.stderr !== '') { throw new Error(`Failed to get OAuth URL: ${result.stderr}`); diff --git a/web/cypress/support/commands/coo-install-commands.ts b/web/cypress/support/commands/coo-install-commands.ts index 578c9f81e..3cb475c66 100644 --- a/web/cypress/support/commands/coo-install-commands.ts +++ b/web/cypress/support/commands/coo-install-commands.ts @@ -21,9 +21,9 @@ export const cooInstallUtils = { cy.exec( `oc label namespace ${ MCP.namespace - } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig ${Cypress.env( + } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )}`, + )}"`, ); } else if (Cypress.env('KONFLUX_COO_BUNDLE_IMAGE')) { cy.log( @@ -31,28 +31,28 @@ export const cooInstallUtils = { ); cy.log('Install Cluster Observability Operator'); cy.exec( - `oc --kubeconfig ${Cypress.env( + `oc --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, + )}" apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, ); cy.exec( - `oc create namespace ${MCP.namespace} --kubeconfig ${Cypress.env( + `oc create namespace ${MCP.namespace} --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} --dry-run=client -o yaml | oc apply --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} -f -`, + )}" --dry-run=client -o yaml | oc apply --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" -f -`, ); cy.exec( `oc label namespace ${ MCP.namespace - } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig ${Cypress.env( + } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )}`, + )}"`, ); cy.exec( `operator-sdk run bundle --timeout=10m --namespace ${ MCP.namespace } --security-context-config restricted ${Cypress.env( 'KONFLUX_COO_BUNDLE_IMAGE', - )} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} --verbose `, + )} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" --verbose `, { timeout: installTimeoutMilliseconds }, ); } else if (Cypress.env('CUSTOM_COO_BUNDLE_IMAGE')) { @@ -61,42 +61,42 @@ export const cooInstallUtils = { ); cy.log('Install Cluster Observability Operator'); cy.exec( - `oc --kubeconfig ${Cypress.env( + `oc --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, + )}" apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, ); cy.exec( - `oc create namespace ${MCP.namespace} --kubeconfig ${Cypress.env( + `oc create namespace ${MCP.namespace} --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} --dry-run=client -o yaml | oc apply --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} -f -`, + )}" --dry-run=client -o yaml | oc apply --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" -f -`, ); cy.exec( `oc label namespace ${ MCP.namespace - } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig ${Cypress.env( + } openshift.io/cluster-monitoring=true --overwrite=true --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )}`, + )}"`, ); cy.exec( `operator-sdk run bundle --timeout=10m --namespace ${ MCP.namespace } --security-context-config restricted ${Cypress.env( 'CUSTOM_COO_BUNDLE_IMAGE', - )} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} --verbose `, + )} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" --verbose `, { timeout: installTimeoutMilliseconds }, ); } else if (Cypress.env('FBC_STAGE_COO_IMAGE')) { cy.log('FBC_COO_IMAGE is set. COO operator will be installed from FBC image.'); cy.log('Install Cluster Observability Operator'); cy.exec( - `oc --kubeconfig ${Cypress.env( + `oc --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, + )}" apply -f ./cypress/fixtures/coo/coo-imagecontentsourcepolicy.yaml`, ); cy.exec('./cypress/fixtures/coo/coo_stage.sh', { env: { FBC_STAGE_COO_IMAGE: Cypress.env('FBC_STAGE_COO_IMAGE'), - KUBECONFIG: Cypress.env('KUBECONFIG_PATH'), + KUBECONFIG: Cypress.env('KUBECONFIG_PATH') as string, }, timeout: installTimeoutMilliseconds, }); @@ -109,7 +109,7 @@ export const cooInstallUtils = { waitForCOOReady(MCP: { namespace: string }): void { cy.log('Check Cluster Observability Operator status'); - const kubeconfig = Cypress.env('KUBECONFIG_PATH'); + const kubeconfig = Cypress.env('KUBECONFIG_PATH') as string; cy.exec(`oc project ${MCP.namespace} --kubeconfig ${kubeconfig}`); @@ -169,7 +169,7 @@ export const cooInstallUtils = { cy.log('Remove Cluster Observability Operator namespace'); - cy.exec(`oc get namespace ${MCP.namespace} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, { + cy.exec(`oc get namespace ${MCP.namespace} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: readyTimeoutMilliseconds, failOnNonZeroExit: false, }).then((checkResult) => { @@ -179,7 +179,7 @@ export const cooInstallUtils = { cy.exec( `oc delete csv --all -n ${ MCP.namespace - } --ignore-not-found --wait=false --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --ignore-not-found --wait=false --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: 30000, failOnNonZeroExit: false }, ).then((result) => { if (result.code === 0) { @@ -192,7 +192,7 @@ export const cooInstallUtils = { cy.exec( `oc delete subscription --all -n ${ MCP.namespace - } --ignore-not-found --wait=false --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --ignore-not-found --wait=false --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: 30000, failOnNonZeroExit: false }, ).then((result) => { if (result.code === 0) { @@ -205,7 +205,7 @@ export const cooInstallUtils = { cy.exec( `oc delete namespace ${ MCP.namespace - } --ignore-not-found --wait=false --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --ignore-not-found --wait=false --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: 30000, failOnNonZeroExit: false }, ).then((result) => { if (result.code === 0) { @@ -230,9 +230,9 @@ export const cooInstallUtils = { ); return cy .exec( - `./cypress/fixtures/coo/force_delete_ns.sh ${MCP.namespace} ${Cypress.env( + `./cypress/fixtures/coo/force_delete_ns.sh ${MCP.namespace} "${Cypress.env( 'KUBECONFIG_PATH', - )}`, + )}"`, { failOnNonZeroExit: false, timeout: installTimeoutMilliseconds }, ) .then((result) => { @@ -244,9 +244,9 @@ export const cooInstallUtils = { } cy.exec( - `oc get ns ${MCP.namespace} --kubeconfig ${Cypress.env( + `oc get ns ${MCP.namespace} --kubeconfig "${Cypress.env( 'KUBECONFIG_PATH', - )} -o jsonpath='{.status.phase}'`, + )}" -o jsonpath='{.status.phase}'`, { failOnNonZeroExit: false }, ).then((result) => { if (result.code !== 0) { @@ -262,9 +262,9 @@ export const cooInstallUtils = { }s. Elapsed: ${Math.round(elapsed / 1000)}s`, ); cy.exec( - `./cypress/fixtures/coo/force_delete_ns.sh ${MCP.namespace} ${Cypress.env( + `./cypress/fixtures/coo/force_delete_ns.sh ${MCP.namespace} "${Cypress.env( 'KUBECONFIG_PATH', - )}`, + )}"`, { failOnNonZeroExit: false, timeout: installTimeoutMilliseconds }, ).then((forceResult) => { cy.log(`${elapsed}ms - Force delete output: ${forceResult.stdout}`); @@ -296,7 +296,7 @@ export const cooInstallUtils = { }, waitForPodsDeleted(namespace: string, maxWaitMs: number = 120000): void { - const kubeconfigPath = Cypress.env('KUBECONFIG_PATH'); + const kubeconfigPath = Cypress.env('KUBECONFIG_PATH') as string; const checkIntervalMs = 5000; const startTime = Date.now(); const podPatterns = 'monitoring|perses|perses-0|health-analyzer|troubleshooting-panel|korrel8r'; diff --git a/web/cypress/support/commands/dashboards-commands.ts b/web/cypress/support/commands/dashboards-commands.ts index 407fc86eb..ba2fce080 100644 --- a/web/cypress/support/commands/dashboards-commands.ts +++ b/web/cypress/support/commands/dashboards-commands.ts @@ -26,7 +26,7 @@ export const dashboardsUtils = { setupDashboardsAndPlugins(MCP: { namespace: string }): void { cy.log('Create perses-dev namespace.'); - cy.exec(`oc new-project perses-dev --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, { + cy.exec(`oc new-project perses-dev --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { failOnNonZeroExit: false, }); @@ -34,41 +34,41 @@ export const dashboardsUtils = { cy.exec( `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `openshift-cluster-sample-dashboard.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Create perses-dashboard-sample instance.'); cy.exec( `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `perses-dashboard-sample.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Create prometheus-overview-variables instance.'); cy.exec( `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `prometheus-overview-variables.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Create thanos-compact-overview-1var instance.'); cy.exec( `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-compact-overview-1var.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Create Thanos Querier instance.'); cy.exec( `oc apply -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-querier-datasource.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.exec( `oc label namespace ${MCP.namespace} ` + `openshift.io/cluster-monitoring=true --overwrite=true ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); waitForPodsReady( @@ -95,7 +95,7 @@ export const dashboardsUtils = { cy.log('Create troubleshooting panel instance.'); cy.exec( `oc apply -f ./cypress/fixtures/coo/troubleshooting-panel-ui-plugin.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Troubleshooting panel instance created. Waiting for pods to be ready.'); @@ -167,35 +167,35 @@ export const dashboardsUtils = { cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `openshift-cluster-sample-dashboard.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove perses-dashboard-sample instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `perses-dashboard-sample.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove prometheus-overview-variables instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `prometheus-overview-variables.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove thanos-compact-overview-1var instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-compact-overview-1var.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove Thanos Querier instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-querier-datasource.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); } else { cy.log('COO_UI_INSTALL is not set. Removing dashboards on COO1.4.0 folder'); @@ -204,35 +204,35 @@ export const dashboardsUtils = { cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `openshift-cluster-sample-dashboard.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove perses-dashboard-sample instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `perses-dashboard-sample.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove prometheus-overview-variables instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `prometheus-overview-variables.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove thanos-compact-overview-1var instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-compact-overview-1var.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove Thanos Querier instance.'); cy.executeAndDelete( `oc delete -f ./cypress/fixtures/coo/coo140_perses/dashboards/` + `thanos-querier-datasource.yaml ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); } diff --git a/web/cypress/support/commands/operator-commands.ts b/web/cypress/support/commands/operator-commands.ts index 12ae5e72c..68b5b2c89 100644 --- a/web/cypress/support/commands/operator-commands.ts +++ b/web/cypress/support/commands/operator-commands.ts @@ -58,7 +58,7 @@ function removeClusterAdminRole(): void { cy.executeAndDelete( `oc adm policy remove-cluster-role-from-user cluster-admin ${Cypress.env( 'LOGIN_USERNAME', - )} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + )} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); } diff --git a/web/cypress/support/commands/traces-logging-commands.ts b/web/cypress/support/commands/traces-logging-commands.ts index 3d822dfef..13d6f61ab 100644 --- a/web/cypress/support/commands/traces-logging-commands.ts +++ b/web/cypress/support/commands/traces-logging-commands.ts @@ -284,7 +284,7 @@ const tracesUtils = { // eslint-disable-next-line max-len `sleep 15 && oc wait --for=condition=Ready pods --selector=app.kubernetes.io/instance=distributed-tracing -n ${ DTP.namespace - } --timeout=60s --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --timeout=60s --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: 80000, failOnNonZeroExit: true, @@ -661,7 +661,7 @@ const loggingUtils = { // eslint-disable-next-line max-len `sleep 15 && oc wait --for=condition=Ready pods --selector=app.kubernetes.io/instance=logging -n ${ LOGGING_PLUGIN.namespace - } --timeout=60s --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --timeout=60s --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: 80000, failOnNonZeroExit: true, @@ -690,7 +690,7 @@ const loggingUtils = { cy.exec( `oc delete ${LOGGING_PLUGIN.config.kind} ${ LOGGING_PLUGIN.config.name - } --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { failOnNonZeroExit: false }, ); cy.log('Cleanup Logging UI Plugin completed'); diff --git a/web/cypress/support/commands/utility-commands.ts b/web/cypress/support/commands/utility-commands.ts index 5a1bb7cf8..08b0de298 100644 --- a/web/cypress/support/commands/utility-commands.ts +++ b/web/cypress/support/commands/utility-commands.ts @@ -103,6 +103,16 @@ Cypress.Commands.add('changeNamespace', (namespace: string) => { .contains(namespace) .should('be.visible') .click({ force: true }); + cy.get('body').then(($body) => { + cy.log('Checking namespace: ' + namespace); + const hasNamespaceBarDropdown = + $body.find('[data-test-id="' + LegacyTestIDs.NamespaceBarDropdown + '"]').length > 0; + if (hasNamespaceBarDropdown) { + cy.byLegacyTestID(LegacyTestIDs.NamespaceBarDropdown).should('contain.text', namespace); + } else { + cy.get(Classes.NamespaceDropdown).should('contain.text', namespace); + } + }); cy.log('Namespace changed to: ' + namespace); }); diff --git a/web/cypress/support/commands/virtualization-commands.ts b/web/cypress/support/commands/virtualization-commands.ts index 23211ffc0..886517e8b 100644 --- a/web/cypress/support/commands/virtualization-commands.ts +++ b/web/cypress/support/commands/virtualization-commands.ts @@ -43,12 +43,12 @@ const virtualizationUtils = { cy.log('Install Openshift Virtualization'); cy.exec( - `oc create namespace ${KBV.namespace} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `oc create namespace ${KBV.namespace} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.exec( `operator-sdk run bundle --timeout=10m --namespace ${KBV.namespace} ${Cypress.env( 'KONFLUX_KBV_BUNDLE_IMAGE', - )} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} --verbose `, + )} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" --verbose `, { timeout: installTimeoutMilliseconds }, ); } else if (Cypress.env('CUSTOM_KBV_BUNDLE_IMAGE')) { @@ -58,12 +58,12 @@ const virtualizationUtils = { cy.log('Install Openshift Virtualization'); cy.exec( - `oc create namespace ${KBV.namespace} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `oc create namespace ${KBV.namespace} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.exec( `operator-sdk run bundle --timeout=10m --namespace ${KBV.namespace} ${Cypress.env( 'CUSTOM_KBV_BUNDLE_IMAGE', - )} --kubeconfig ${Cypress.env('KUBECONFIG_PATH')} --verbose `, + )} --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}" --verbose `, { timeout: installTimeoutMilliseconds }, ); } else if (Cypress.env('FBC_STAGE_KBV_IMAGE')) { @@ -102,7 +102,7 @@ const virtualizationUtils = { `--for=jsonpath='{.status.phase}'=Succeeded ` + `ClusterServiceVersion/${KBV_OPERATOR_NAME} ` + `-n ${KBV.namespace} ` + - `--timeout=300s --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--timeout=300s --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: readyTimeoutMilliseconds, // Set a long timeout for the 'oc wait' command }, @@ -150,12 +150,12 @@ const virtualizationUtils = { cy.log('Create Hyperconverged instance.'); cy.exec( `oc apply -f ./cypress/fixtures/virtualization/hyperconverged.yaml ` + - `--kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.exec( `sleep 15 && oc wait --for=condition=Available --selector=app=kubevirt-hyperconverged -n ${ KBV.namespace - } --timeout=60s --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --timeout=60s --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, { timeout: readyTimeoutMilliseconds, failOnNonZeroExit: true, @@ -206,21 +206,21 @@ const virtualizationUtils = { cy.executeAndDelete( `oc delete HyperConverged kubevirt-hyperconverged -n ${ KBV.namespace - } --ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove Openshift Virtualization subscription'); cy.executeAndDelete( `oc delete subscription ${config.name} -n ${ KBV.namespace - } --ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + } --ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove Openshift Virtualization CSV'); cy.executeAndDelete( `oc delete csv -n ${KBV.namespace} ` + `-l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Remove Openshift Virtualization namespace'); @@ -234,14 +234,14 @@ const virtualizationUtils = { cy.executeAndDelete( `oc delete crd --dry-run=client ` + `-l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); cy.log('Delete Kubevirt instance.'); cy.executeAndDelete( `oc delete crd ` + `-l operators.coreos.com/kubevirt-hyperconverged.openshift-cnv ` + - `--ignore-not-found --kubeconfig ${Cypress.env('KUBECONFIG_PATH')}`, + `--ignore-not-found --kubeconfig "${Cypress.env('KUBECONFIG_PATH')}"`, ); } }, diff --git a/web/cypress/support/monitoring/02.reg_metrics_1.cy.ts b/web/cypress/support/monitoring/02.reg_metrics_1.cy.ts index 7cbd70870..105335378 100644 --- a/web/cypress/support/monitoring/02.reg_metrics_1.cy.ts +++ b/web/cypress/support/monitoring/02.reg_metrics_1.cy.ts @@ -213,6 +213,9 @@ export function testMetricsRegression1(perspective: PerspectiveConfig) { cy.log('4.11 Stacked Checkbox'); metricsPage.clickStackedCheckboxAndAssert(); + + cy.log('4.12 Delete All Queries'); + metricsPage.clickActionsDeleteAllQueries(); }); //https://issues.redhat.com/browse/OU-974 - [Metrics] - Units - undefined showing in Y axis and tooltip diff --git a/web/cypress/support/monitoring/02.reg_metrics_2.cy.ts b/web/cypress/support/monitoring/02.reg_metrics_2.cy.ts index 6ba5f4b62..9792638b0 100644 --- a/web/cypress/support/monitoring/02.reg_metrics_2.cy.ts +++ b/web/cypress/support/monitoring/02.reg_metrics_2.cy.ts @@ -75,7 +75,7 @@ export function testMetricsRegression2(perspective: PerspectiveConfig) { cy.get(Classes.MetricsPageQueryInput) .eq(1) .should('contain', MetricsPageQueryInput.INSERT_EXAMPLE_QUERY); - cy.byTestID(DataTestIDs.MetricGraph).should('be.visible'); + cy.byTestID(DataTestIDs.MetricGraph).scrollIntoView().should('be.visible'); metricsPage.clickKebabDropdown(0); cy.get(Classes.MenuItemDisabled) .contains(MetricsPageQueryKebabDropdown.HIDE_ALL_SERIES) @@ -316,6 +316,9 @@ export function testMetricsRegression2(perspective: PerspectiveConfig) { .contains(MetricsPageQueryKebabDropdown.HIDE_ALL_SERIES) .should('have.attr', 'aria-disabled', 'true'); cy.byTestID(DataTestIDs.MetricsPageExportCsvDropdownItem).should('not.exist'); + + cy.log('6.18 Delete All Queries'); + metricsPage.clickActionsDeleteAllQueries(); }); it(`${perspective.name} perspective - Metrics > Predefined Queries > Export as CSV`, () => { diff --git a/web/cypress/support/monitoring/05.reg_metrics_namespace_2.cy.ts b/web/cypress/support/monitoring/05.reg_metrics_namespace_2.cy.ts index f5c7e5193..d9e74dcde 100644 --- a/web/cypress/support/monitoring/05.reg_metrics_namespace_2.cy.ts +++ b/web/cypress/support/monitoring/05.reg_metrics_namespace_2.cy.ts @@ -316,6 +316,9 @@ export function testMetricsRegressionNamespace2(perspective: PerspectiveConfig) .contains(MetricsPageQueryKebabDropdown.HIDE_ALL_SERIES) .should('have.attr', 'aria-disabled', 'true'); cy.byTestID(DataTestIDs.MetricsPageExportCsvDropdownItem).should('not.exist'); + + cy.log('6.18 Delete All Queries'); + metricsPage.clickActionsDeleteAllQueries(); }); it(`${perspective.name} perspective - Metrics > Predefined Queries > Export as CSV`, () => { diff --git a/web/cypress/views/common.ts b/web/cypress/views/common.ts index 22b844456..0472673bb 100644 --- a/web/cypress/views/common.ts +++ b/web/cypress/views/common.ts @@ -7,9 +7,14 @@ export const commonPages = { projectDropdownShouldExist: () => cy.byLegacyTestID('namespace-bar-dropdown').should('exist'), titleShouldHaveText: (title: string) => { cy.log('commonPages.titleShouldHaveText - ' + `${title}`); - cy.waitUntil(() => cy.bySemanticElement('h1', title).scrollIntoView().should('be.visible'), { - timeout: 60000, - }); + cy.waitUntil( + () => + Cypress.$('h1') + .toArray() + .some((el) => el.textContent?.trim() === title && Cypress.dom.isVisible(el)), + { timeout: 60000 }, + ); + cy.bySemanticElement('h1', title).scrollIntoView().should('be.visible'); }, titleModalShouldHaveText: (title: string) => { diff --git a/web/cypress/views/metrics.ts b/web/cypress/views/metrics.ts index 137ae87f3..40e0a990a 100644 --- a/web/cypress/views/metrics.ts +++ b/web/cypress/views/metrics.ts @@ -197,6 +197,7 @@ export const metricsPage = { clickActions: () => { cy.log('metricsPage.clickActions'); cy.byTestID(DataTestIDs.MetricsPageActionsDropdownButton) + .scrollIntoView() .should('have.attr', 'aria-expanded', 'false') .click(); }, @@ -292,6 +293,7 @@ export const metricsPage = { * @param expanded * @param index * @param withQuery + * @param withSwitch */ expandCollapseRowAssertion: ( expanded: boolean, @@ -304,10 +306,12 @@ export const metricsPage = { if (withQuery) { cy.get(Classes.MetricsPageQueryInput) .eq(index) + .scrollIntoView() .should('not.contain', MetricsPageQueryInput.EXPRESSION_PRESS_SHIFT_ENTER_FOR_NEWLINES); } else { cy.get(Classes.MetricsPageQueryInput) .eq(index) + .scrollIntoView() .should('contain', MetricsPageQueryInput.EXPRESSION_PRESS_SHIFT_ENTER_FOR_NEWLINES); } @@ -335,7 +339,7 @@ export const metricsPage = { .find('[data-test="' + DataTestIDs.MetricsPageSeriesButton + '"]') .should('have.length.gt', 0); } else { - cy.get(Classes.MetricsPageRows).find('li').eq(index).should('be.visible'); + cy.get(Classes.MetricsPageRows).find('li').eq(index).scrollIntoView().should('be.visible'); cy.get(Classes.MetricsPageRows) .find('li') .eq(index) @@ -371,7 +375,7 @@ export const metricsPage = { .find('[data-test="' + DataTestIDs.MetricsPageDisableEnableQuerySwitch + '"]') .should('have.attr', 'checked'); } - cy.get(Classes.MetricsPageRows).find('li').eq(index).should('be.visible'); + cy.get(Classes.MetricsPageRows).find('li').eq(index).scrollIntoView().should('be.visible'); cy.get(Classes.MetricsPageRows) .find('li') .eq(index) @@ -388,6 +392,7 @@ export const metricsPage = { .find('[data-test="' + DataTestIDs.MetricsPageSeriesButton + '"]') .should('not.exist'); } + cy.log('metricsPage.expandCollapseRowAssertion - Finished'); }, clickActionsDeleteAllQueries: () => { @@ -426,13 +431,19 @@ export const metricsPage = { graphTimespanDropdownAssertion: () => { cy.log('metricsPage.graphTimespanDropdownAssertion'); - cy.byTestID(DataTestIDs.MetricGraphTimespanDropdown).should('be.visible').click(); + cy.byTestID(DataTestIDs.MetricGraphTimespanDropdown) + .scrollIntoView() + .should('be.visible') + .click(); const timespans = Object.values(GraphTimespan); timespans.forEach((timespan) => { cy.log('Graph Timespan: ' + timespan); cy.get(Classes.MenuItem).contains(timespan).should('be.visible'); }); - cy.byTestID(DataTestIDs.MetricGraphTimespanDropdown).should('be.visible').click(); + cy.byTestID(DataTestIDs.MetricGraphTimespanDropdown) + .scrollIntoView() + .should('be.visible') + .click(); }, clickResetZoomButton: () => { @@ -520,7 +531,11 @@ export const metricsPage = { clickKebabDropdown: (index: number) => { cy.log('metricsPage.clickKebabDropdown'); - cy.byTestID(DataTestIDs.KebabDropdownButton).eq(index).click(); + cy.byTestID(DataTestIDs.KebabDropdownButton) + .eq(index) + .scrollIntoView() + .should('be.visible') + .click(); }, kebabDropdownAssertionWithoutQuery: () => { @@ -663,7 +678,10 @@ export const metricsPage = { clickRunQueriesButton: () => { cy.log('metricsPage.clickRunQueriesButton'); - cy.byTestID(DataTestIDs.MetricsPageRunQueriesButton).should('be.visible').click(); + cy.byTestID(DataTestIDs.MetricsPageRunQueriesButton) + .scrollIntoView() + .should('be.visible') + .click(); }, clickDisableEnableQuerySwitch: (index: number) => { @@ -680,10 +698,12 @@ export const metricsPage = { if (enabled) { cy.byTestID(DataTestIDs.MetricsPageDisableEnableQuerySwitch) .eq(index) + .scrollIntoView() .should('have.attr', 'checked'); } else { cy.byTestID(DataTestIDs.MetricsPageDisableEnableQuerySwitch) .eq(index) + .scrollIntoView() .should('not.have.attr', 'checked'); } }, diff --git a/web/cypress/views/silence-alert-page.ts b/web/cypress/views/silence-alert-page.ts index 23c77f6e2..ab0a61c62 100644 --- a/web/cypress/views/silence-alert-page.ts +++ b/web/cypress/views/silence-alert-page.ts @@ -388,7 +388,7 @@ export const silenceAlertPage = { cy.log('silenceAlertPage.assertLabelValueError'); cy.get(Classes.SilenceAlertTitle).should( 'contain.text', - 'Danger alert:invalid silence: matcher set 0: at least one matcher must not match the empty string', + 'at least one matcher must not match the empty string', ); }, }; From 6aa45b888c09de7ba14cb59352cb7121d36f3700 Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Wed, 20 May 2026 14:02:58 -0300 Subject: [PATCH 3/6] enhancement when long metrics --- web/cypress/views/metrics.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/cypress/views/metrics.ts b/web/cypress/views/metrics.ts index 40e0a990a..d21bb1d55 100644 --- a/web/cypress/views/metrics.ts +++ b/web/cypress/views/metrics.ts @@ -713,6 +713,7 @@ export const metricsPage = { if (toEnable) { cy.get(Classes.MetricsPageExpandedRowIcon) .eq(rowIndex) + .scrollIntoView() .find('[data-test="' + DataTestIDs.MetricsPageSeriesButton + '"]') .eq(seriesIndex) .should('have.attr', 'aria-label', 'Show series') @@ -720,6 +721,7 @@ export const metricsPage = { } else { cy.get(Classes.MetricsPageExpandedRowIcon) .eq(rowIndex) + .scrollIntoView() .find('[data-test="' + DataTestIDs.MetricsPageSeriesButton + '"]') .eq(seriesIndex) .should('have.attr', 'aria-label', 'Hide series') @@ -749,11 +751,13 @@ export const metricsPage = { if (unselectAll) { cy.byTestID(DataTestIDs.MetricsPageSelectAllUnselectAllButton) .eq(rowIndex) + .scrollIntoView() .contains('Unselect all') .should('be.visible'); } else { cy.byTestID(DataTestIDs.MetricsPageSelectAllUnselectAllButton) .eq(rowIndex) + .scrollIntoView() .contains('Select all') .should('be.visible'); } From be72562737ccc5570d97649bdb04ce8d8c302c81 Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Thu, 21 May 2026 18:49:18 -0300 Subject: [PATCH 4/6] perses - create and cypress upgrade --- web/cypress/fixtures/perses/constants.ts | 5 +- .../support/commands/utility-commands.ts | 19 +- .../perses/03.coo_create_perses_admin.cy.ts | 2 +- .../perses-dashboards-create-dashboard.ts | 27 +- web/package-lock.json | 716 +++++++++++------- web/package.json | 2 +- web/src/components/data-test.ts | 2 +- 7 files changed, 449 insertions(+), 324 deletions(-) diff --git a/web/cypress/fixtures/perses/constants.ts b/web/cypress/fixtures/perses/constants.ts index a9a77ea4d..4278ceb03 100644 --- a/web/cypress/fixtures/perses/constants.ts +++ b/web/cypress/fixtures/perses/constants.ts @@ -142,12 +142,11 @@ export const persesDashboardsAddPanelAddQueryType = { }; export const persesCreateDashboard = { - DIALOG_MAX_LENGTH_VALIDATION: - 'Danger alert:bad request: code=400, message=cannot contain more than 75 characters, internal=cannot contain more than 75 characters', + DIALOG_MAX_LENGTH_VALIDATION: 'Must be 75 or fewer characters long', DIALOG_DUPLICATED_NAME_PF_VALIDATION_PREFIX: 'Dashboard name ', DIALOG_DUPLICATED_NAME_PF_VALIDATION_SUFFIX: ' already exists in ', DIALOG_DUPLICATED_NAME_PF_VALIDATION_SUFFIX_PROJECT: ' project!: error status;', - DIALOG_CREATE_NAME_BKD_VALIDATION: 'Danger alert:document already exists', + DIALOG_CREATE_NAME_BKD_VALIDATION: 'document already exists', }; export const persesDashboardsEmptyDashboard = { diff --git a/web/cypress/support/commands/utility-commands.ts b/web/cypress/support/commands/utility-commands.ts index 08b0de298..f951ae08a 100644 --- a/web/cypress/support/commands/utility-commands.ts +++ b/web/cypress/support/commands/utility-commands.ts @@ -72,10 +72,21 @@ Cypress.Commands.add('changeNamespace', (namespace: string) => { .click({ force: true }); } else { cy.get(Classes.NamespaceDropdown).scrollIntoView().should('be.visible'); - cy.get(Classes.NamespaceDropdown) - .scrollIntoView() - .should('be.visible') - .click({ force: true }); + cy.waitUntil( + () => { + cy.get(Classes.NamespaceDropdown) + .scrollIntoView() + .should('be.visible') + .click({ force: true }); + return cy + .get('body') + .then( + ($b) => + $b.find('[data-test="' + DataTestIDs.NamespaceDropdownTextFilter + '"]').length > 0, + ); + }, + { timeout: 10000, interval: 1000 }, + ); } }); cy.get('body').then(($body) => { diff --git a/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts b/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts index 877eb76be..dab4172e8 100644 --- a/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts +++ b/web/cypress/support/perses/03.coo_create_perses_admin.cy.ts @@ -96,7 +96,7 @@ export function testCOOCreatePerses(perspective: PerspectiveConfig) { persesCreateDashboardsPage.selectProject('openshift-cluster-observability-operator'); persesCreateDashboardsPage.enterDashboardName(dashboardName); persesCreateDashboardsPage.createDashboardDialogCreateButton(); - persesCreateDashboardsPage.assertDuplicatedNameValidationFed(dashboardName); + persesCreateDashboardsPage.assertDuplicatedNameValidation(); cy.log(`2.7. Create another dashboard with the same name in other project`); persesCreateDashboardsPage.selectProject('perses-dev'); diff --git a/web/cypress/views/perses-dashboards-create-dashboard.ts b/web/cypress/views/perses-dashboards-create-dashboard.ts index 670dc8725..66ffb2499 100644 --- a/web/cypress/views/perses-dashboards-create-dashboard.ts +++ b/web/cypress/views/perses-dashboards-create-dashboard.ts @@ -1,9 +1,5 @@ import { Classes, IDs, persesAriaLabels } from '../../src/components/data-test'; -import { - persesCreateDashboard, - persesDashboardsDuplicateDashboard, - persesDashboardsModalTitles, -} from '../fixtures/perses/constants'; +import { persesCreateDashboard, persesDashboardsModalTitles } from '../fixtures/perses/constants'; export const persesCreateDashboardsPage = { createDashboardShouldBeLoaded: () => { @@ -69,29 +65,16 @@ export const persesCreateDashboardsPage = { assertMaxLengthValidation: () => { cy.log('persesCreateDashboardsPage.assertMaxLengthValidation'); cy.byPFRole('dialog') - .find('h4') - .should('have.text', persesCreateDashboard.DIALOG_MAX_LENGTH_VALIDATION) + .find('.pf-m-error') + .should('contain.text', persesCreateDashboard.DIALOG_MAX_LENGTH_VALIDATION) .should('be.visible'); }, assertDuplicatedNameValidation: () => { cy.log('persesCreateDashboardsPage.assertDuplicatedNameValidation'); - cy.byPFRole('dialog') + cy.byPFRole('list') .find('h4') - .should('have.text', persesCreateDashboard.DIALOG_CREATE_NAME_BKD_VALIDATION) - .should('be.visible'); - }, - - assertDuplicatedNameValidationFed: (dashboardName: string) => { - cy.log('persesCreateDashboardsPage.assertDuplicatedNameValidationFed'); - cy.byPFRole('dialog') - .find(Classes.PersesCreateDashboardDashboardNameError) - .should( - 'have.text', - persesDashboardsDuplicateDashboard.DIALOG_DUPLICATED_NAME_FED_VALIDATION_1 + - dashboardName + - persesDashboardsDuplicateDashboard.DIALOG_DUPLICATED_NAME_FED_VALIDATION_2, - ) + .should('contain.text', persesCreateDashboard.DIALOG_CREATE_NAME_BKD_VALIDATION) .should('be.visible'); }, diff --git a/web/package-lock.json b/web/package-lock.json index 897237e51..da198ce77 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,7 +80,7 @@ "@typescript-eslint/parser": "^8.58.1", "copy-webpack-plugin": "^14.0.0", "css-loader": "^6.7.1", - "cypress": "^14.2.1", + "cypress": "^15.15.0", "cypress-multi-reporters": "^1.4.0", "cypress-wait-until": "^3.0.2", "esbuild-loader": "^4.4.2", @@ -2137,9 +2137,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", - "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-4.0.0.tgz", + "integrity": "sha512-wGTQfwDMMMiz/muFw4YbCLwTh0uZsXKK+6zWBzftADpitSi6iM62C8GzEhNcng2srUiGPksOriQkA8zakW2R0g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2159,11 +2159,10 @@ "qs": "~6.14.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" + "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">= 6" + "node": ">= 14.17.0" } }, "node_modules/@cypress/webpack-preprocessor": { @@ -7506,6 +7505,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -8616,20 +8622,6 @@ "node": ">=6.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -9015,23 +9007,6 @@ "node": ">=0.8" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -10120,16 +10095,6 @@ "node": "*" } }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/cheerio": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", @@ -10251,27 +10216,20 @@ "node": ">=0.10.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-table3": { @@ -10291,22 +10249,68 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": ">=8" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -10861,44 +10865,39 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.5.4.tgz", - "integrity": "sha512-0Dhm4qc9VatOcI1GiFGVt8osgpPdqJLHzRwcAB5MSD/CAAts3oybvPUPawHyvJZUd8osADqZe/xzMsZ8sDTjXw==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.15.0.tgz", + "integrity": "sha512-N8qBv3AUYn6xfIG73O5O58kTClUBSZ7a3C08IQFkSGTUdEauJ3BqwTFb/f9KPZgadftoZjllC0XSwD7xNNolbA==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@cypress/request": "^3.0.9", + "@cypress/request": "^4.0.0", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", - "cachedir": "^2.3.0", + "cachedir": "^2.4.0", "chalk": "^4.1.0", - "check-more-types": "^2.24.0", "ci-info": "^4.1.0", - "cli-cursor": "^3.1.0", "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", - "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", "extract-zip": "2.0.1", - "figures": "^3.2.0", "fs-extra": "^9.1.0", - "getos": "^3.2.1", "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", + "listr2": "^9.0.5", + "lodash": "^4.17.23", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", @@ -10906,10 +10905,11 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", "supports-color": "^8.1.1", - "tmp": "~0.2.3", + "systeminformation": "^5.31.1", + "tmp": "~0.2.4", "tree-kill": "1.2.2", + "tslib": "1.14.1", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, @@ -10917,7 +10917,7 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.1.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/cypress-multi-reporters": { @@ -11044,19 +11044,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cypress/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11073,6 +11060,13 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/cypress/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/d3-array": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", @@ -11813,20 +11807,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/ensure-posix-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", @@ -11860,6 +11840,19 @@ "node": ">=4" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eol": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", @@ -13585,32 +13578,6 @@ "pend": "~1.2.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -14135,6 +14102,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -14229,16 +14209,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^3.2.0" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -15415,16 +15385,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -18470,16 +18430,6 @@ "shell-quote": "^1.8.3" } }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "> 0.8" - } - }, "node_modules/lead": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", @@ -18543,31 +18493,113 @@ } }, "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/loader-runner": { @@ -18781,91 +18813,157 @@ } }, "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "environment": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/long-timeout": { @@ -19194,6 +19292,19 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -20438,22 +20549,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-retry": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", @@ -22338,17 +22433,49 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/retry": { @@ -22443,16 +22570,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -23074,56 +23191,51 @@ } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -23711,6 +23823,33 @@ "url": "https://opencollective.com/synckit" } }, + "node_modules/systeminformation": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.6.tgz", + "integrity": "sha512-Uv2b2uGGM6ns+26czgW2cYRabYdnswM0ddSOOlryHOaelzsmDSet1iM/NT7VOYxW8x/BW+HkY+b1Ve2pLTSGSA==", + "dev": true, + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, "node_modules/tabbable": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", @@ -23980,13 +24119,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", diff --git a/web/package.json b/web/package.json index f7b61bad8..83645615b 100644 --- a/web/package.json +++ b/web/package.json @@ -122,7 +122,7 @@ "@typescript-eslint/parser": "^8.58.1", "copy-webpack-plugin": "^14.0.0", "css-loader": "^6.7.1", - "cypress": "^14.2.1", + "cypress": "^15.15.0", "cypress-multi-reporters": "^1.4.0", "cypress-wait-until": "^3.0.2", "esbuild-loader": "^4.4.2", diff --git a/web/src/components/data-test.ts b/web/src/components/data-test.ts index e9d9a51e8..23aa9405c 100644 --- a/web/src/components/data-test.ts +++ b/web/src/components/data-test.ts @@ -202,7 +202,7 @@ export const IDs = { persesDashboardAddPanelGroupForm: 'panel-group-editor-form', persesDashboardAddPanelForm: 'panel-editor-form', persesDashboardDiscardChangesDialog: 'discard-dialog', - persesDashboardCreateDashboardName: 'text-input-create-dashboard-dialog-name', + persesDashboardCreateDashboardName: 'create-modal-dashboard-name-form-group-text-input', persesDashboardRenameDashboardName: 'rename-modal-text-input', persesDashboardDuplicateDashboardName: 'duplicate-modal-dashboard-name-form-group-text-input', persesDashboardImportDashboardUploadFileInput: 'import-dashboard-file-filename', From 5742fb6053c1e2cad41a34b02c7b6d15832dc0ba Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Thu, 21 May 2026 19:13:44 -0300 Subject: [PATCH 5/6] perses - import --- web/cypress/fixtures/perses/constants.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/web/cypress/fixtures/perses/constants.ts b/web/cypress/fixtures/perses/constants.ts index 4278ceb03..ef3a660f4 100644 --- a/web/cypress/fixtures/perses/constants.ts +++ b/web/cypress/fixtures/perses/constants.ts @@ -180,7 +180,6 @@ export const persesDashboardsImportDashboard = { DIALOG_GRAFANA_DASHBOARD_DETECTED: 'Grafana dashboard detected. It will be automatically migrated to Perses format. Note: migration may be partial as not all Grafana features are supported.', DIALOG_PERSES_DASHBOARD_DETECTED: 'Perses dashboard detected.', - DIALOG_FAILED_TO_MIGRATE_GRAFANA_DASHBOARD: - 'Danger alert:Failed to migrate dashboard: internal server error', - DIALOG_DUPLICATED_DASHBOARD_ERROR: 'Danger alert:document already exists', + DIALOG_FAILED_TO_MIGRATE_GRAFANA_DASHBOARD: 'Failed to migrate dashboard', + DIALOG_DUPLICATED_DASHBOARD_ERROR: 'document already exists', }; From 6924efb81b1823acabf44369eaf14e99817f56f2 Mon Sep 17 00:00:00 2001 From: Evelyn Tanigawa Murasaki Date: Thu, 21 May 2026 20:38:32 -0300 Subject: [PATCH 6/6] bvt and cypress downgrade --- .../e2e/perses/00.coo_bvt_perses_admin.cy.ts | 1 - .../perses/00.coo_bvt_perses_admin.cy.ts | 4 +- web/cypress/views/perses-dashboards.ts | 1 + web/package-lock.json | 716 +++++++----------- web/package.json | 2 +- 5 files changed, 297 insertions(+), 427 deletions(-) diff --git a/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts b/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts index e51f3c241..0968e050c 100644 --- a/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts +++ b/web/cypress/e2e/perses/00.coo_bvt_perses_admin.cy.ts @@ -30,7 +30,6 @@ describe( beforeEach(() => { nav.sidenav.clickNavLink(['Observe', 'Dashboards (Perses)']); - cy.changeNamespace('All Projects'); }); //TODO: rename after customizable-dashboards gets merged diff --git a/web/cypress/support/perses/00.coo_bvt_perses_admin.cy.ts b/web/cypress/support/perses/00.coo_bvt_perses_admin.cy.ts index e1e0035b5..2675e3cc5 100644 --- a/web/cypress/support/perses/00.coo_bvt_perses_admin.cy.ts +++ b/web/cypress/support/perses/00.coo_bvt_perses_admin.cy.ts @@ -29,6 +29,7 @@ export function runBVTCOOPersesTests1(perspective: PerspectiveConfig) { export function testBVTCOOPerses1(perspective: PerspectiveConfig) { it(`1.${perspective.name} perspective - Dashboards (Perses) page`, () => { cy.log(`1.1. use sidebar nav to go to Observe > Dashboards (Perses)`); + cy.changeNamespace('All Projects'); listPersesDashboardsPage.shouldBeLoaded(); listPersesDashboardsPage.clickDashboard( persesDashboardsDashboardDropdownCOO.ACCELERATORS_COMMON_METRICS[0], @@ -41,8 +42,8 @@ export function testBVTCOOPerses1(perspective: PerspectiveConfig) { `2.1. use sidebar nav to go to Observe > Dashboards (Perses) > ` + `Accelerators common metrics dashboard`, ); - listPersesDashboardsPage.shouldBeLoaded(); cy.changeNamespace('openshift-cluster-observability-operator'); + listPersesDashboardsPage.shouldBeLoaded(); listPersesDashboardsPage.clickDashboard( persesDashboardsDashboardDropdownCOO.ACCELERATORS_COMMON_METRICS[0], ); @@ -91,6 +92,7 @@ export function testBVTCOOPerses1(perspective: PerspectiveConfig) { it(`4.${perspective.name} perspective - Download and View JSON`, () => { cy.log(`4.1. use sidebar nav to go to Observe > Dashboards (Perses) > Download and View JSON`); + cy.changeNamespace('openshift-cluster-observability-operator'); listPersesDashboardsPage.clickDashboard( persesDashboardsDashboardDropdownCOO.ACCELERATORS_COMMON_METRICS[0], ); diff --git a/web/cypress/views/perses-dashboards.ts b/web/cypress/views/perses-dashboards.ts index b188a0972..3c15a6809 100644 --- a/web/cypress/views/perses-dashboards.ts +++ b/web/cypress/views/perses-dashboards.ts @@ -331,6 +331,7 @@ export const persesDashboardsPage = { .scrollIntoView() .should('be.visible'); }); + cy.byTestID(DataTestIDs.PersesDashboardDropdown).scrollIntoView().should('be.visible'); }, expandPanel: (panel: string) => { diff --git a/web/package-lock.json b/web/package-lock.json index da198ce77..d3c8c7dc4 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,7 +80,7 @@ "@typescript-eslint/parser": "^8.58.1", "copy-webpack-plugin": "^14.0.0", "css-loader": "^6.7.1", - "cypress": "^15.15.0", + "cypress": "^14.2.1", "cypress-multi-reporters": "^1.4.0", "cypress-wait-until": "^3.0.2", "esbuild-loader": "^4.4.2", @@ -2137,9 +2137,9 @@ } }, "node_modules/@cypress/request": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-4.0.0.tgz", - "integrity": "sha512-wGTQfwDMMMiz/muFw4YbCLwTh0uZsXKK+6zWBzftADpitSi6iM62C8GzEhNcng2srUiGPksOriQkA8zakW2R0g==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", + "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2159,10 +2159,11 @@ "qs": "~6.14.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0" + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">= 14.17.0" + "node": ">= 6" } }, "node_modules/@cypress/webpack-preprocessor": { @@ -7505,13 +7506,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -8622,6 +8616,20 @@ "node": ">=6.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -9007,6 +9015,23 @@ "node": ">=0.8" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -10095,6 +10120,16 @@ "node": "*" } }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/cheerio": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", @@ -10216,20 +10251,27 @@ "node": ">=0.10.0" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/cli-table3": { @@ -10249,68 +10291,22 @@ } }, "node_modules/cli-truncate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", - "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^8.0.0", - "string-width": "^8.2.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", - "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": ">=20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -10865,39 +10861,44 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.15.0.tgz", - "integrity": "sha512-N8qBv3AUYn6xfIG73O5O58kTClUBSZ7a3C08IQFkSGTUdEauJ3BqwTFb/f9KPZgadftoZjllC0XSwD7xNNolbA==", + "version": "14.5.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.5.4.tgz", + "integrity": "sha512-0Dhm4qc9VatOcI1GiFGVt8osgpPdqJLHzRwcAB5MSD/CAAts3oybvPUPawHyvJZUd8osADqZe/xzMsZ8sDTjXw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@cypress/request": "^4.0.0", + "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", - "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", - "cachedir": "^2.4.0", + "cachedir": "^2.3.0", "chalk": "^4.1.0", + "check-more-types": "^2.24.0", "ci-info": "^4.1.0", + "cli-cursor": "^3.1.0", "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", + "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", "extract-zip": "2.0.1", + "figures": "^3.2.0", "fs-extra": "^9.1.0", + "getos": "^3.2.1", "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "listr2": "^9.0.5", - "lodash": "^4.17.23", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", @@ -10905,11 +10906,10 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", + "semver": "^7.7.1", "supports-color": "^8.1.1", - "systeminformation": "^5.31.1", - "tmp": "~0.2.4", + "tmp": "~0.2.3", "tree-kill": "1.2.2", - "tslib": "1.14.1", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, @@ -10917,7 +10917,7 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^20.1.0 || ^22.0.0 || >=24.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" } }, "node_modules/cypress-multi-reporters": { @@ -11044,6 +11044,19 @@ "dev": true, "license": "MIT" }, + "node_modules/cypress/node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11060,13 +11073,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/cypress/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/d3-array": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", @@ -11807,6 +11813,20 @@ "node": ">=10.13.0" } }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/ensure-posix-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", @@ -11840,19 +11860,6 @@ "node": ">=4" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eol": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", @@ -13578,6 +13585,32 @@ "pend": "~1.2.0" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -14102,19 +14135,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -14209,6 +14229,16 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -15385,6 +15415,16 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -18430,6 +18470,16 @@ "shell-quote": "^1.8.3" } }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, "node_modules/lead": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", @@ -18493,113 +18543,31 @@ } }, "node_modules/listr2": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", - "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^5.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "node": ">=10.0.0" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, "node_modules/loader-runner": { @@ -18813,157 +18781,91 @@ } }, "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=7.0.0" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/long-timeout": { @@ -19292,19 +19194,6 @@ "node": ">=6" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -20549,6 +20438,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", @@ -22433,49 +22338,17 @@ } }, "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, "node_modules/retry": { @@ -22570,6 +22443,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -23191,51 +23074,56 @@ } }, "node_modules/slice-ansi": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", - "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.3", - "is-fullwidth-code-point": "^5.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -23823,33 +23711,6 @@ "url": "https://opencollective.com/synckit" } }, - "node_modules/systeminformation": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.6.tgz", - "integrity": "sha512-Uv2b2uGGM6ns+26czgW2cYRabYdnswM0ddSOOlryHOaelzsmDSet1iM/NT7VOYxW8x/BW+HkY+b1Ve2pLTSGSA==", - "dev": true, - "license": "MIT", - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, "node_modules/tabbable": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", @@ -24119,6 +23980,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", diff --git a/web/package.json b/web/package.json index 83645615b..f7b61bad8 100644 --- a/web/package.json +++ b/web/package.json @@ -122,7 +122,7 @@ "@typescript-eslint/parser": "^8.58.1", "copy-webpack-plugin": "^14.0.0", "css-loader": "^6.7.1", - "cypress": "^15.15.0", + "cypress": "^14.2.1", "cypress-multi-reporters": "^1.4.0", "cypress-wait-until": "^3.0.2", "esbuild-loader": "^4.4.2",