From d793bfa70a32467a742a011c8029ab6d2f877329 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 11:57:47 +0100 Subject: [PATCH 01/35] Improve pod.spec test --- cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 4bae65e76e1..74ca5922360 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -56,13 +56,13 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); it('pagination is visible and user is able to navigate through pods data', () => { + WorkloadsPodsListPagePo.navTo(); + workloadsPodPage.waitForPage(); + // check pods count const count = initialCount + 26; cy.waitForRancherResources('v1', 'pods', count).then((resp: Cypress.Response) => { - WorkloadsPodsListPagePo.navTo(); - workloadsPodPage.waitForPage(); - // pagination is visible workloadsPodPage.sortableTable().pagination().checkVisible(); From d5fec212407d1bdd95c12a2da20c6659606c790a Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 14:12:50 +0100 Subject: [PATCH 02/35] Improve another repo spec test --- cypress/e2e/tests/pages/explorer/apps/repositories.spec.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cypress/e2e/tests/pages/explorer/apps/repositories.spec.ts b/cypress/e2e/tests/pages/explorer/apps/repositories.spec.ts index 9537298afda..4f41407a373 100644 --- a/cypress/e2e/tests/pages/explorer/apps/repositories.spec.ts +++ b/cypress/e2e/tests/pages/explorer/apps/repositories.spec.ts @@ -24,7 +24,14 @@ describe('Apps', () => { const appRepoCreate = new AppClusterRepoEditPo('local', 'create'); appRepoList.sortableTable().checkLoadingIndicatorNotVisible(); + appRepoList.sortableTable().rowCount().should('be.lessThan', 10); // catch page size 10... + // Check that the table has settled and rendered all rows + // This is a bit hacky, but assume table settled when we have all of these three rows + appRepoList.sortableTable().rowElementWithName('Partners').should('be.visible'); + appRepoList.sortableTable().rowElementWithName('Rancher').should('be.visible'); + appRepoList.sortableTable().rowElementWithName('RKE2').should('be.visible'); + // Table settled. Get row count appRepoList.sortableTable().rowCount().then((count) => { // track repo rows From 552a3fc2db35393992a7187e3a176fa07e3add48 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 15:05:22 +0100 Subject: [PATCH 03/35] vai test improvements --- .../storage/persistent-volume-claims-get.ts | 8 +- .../pages/explorer/dashboard/events.spec.ts | 8 +- .../api/custom-resource-definitions.spec.ts | 3 +- .../storage/persistent-volume-claims.spec.ts | 19 +- .../pages/explorer2/workloads/pods.spec.ts | 8 +- .../pages/fleet/advanced/workspaces.spec.ts | 11 +- .../pages/user-menu/account-api-keys.spec.ts | 9 +- .../tests/pages/users-and-auth/roles.spec.ts | 8 +- .../tests/pages/users-and-auth/users.spec.ts | 5 +- .../support/commands/rancher-api-commands.ts | 164 ++++++++++-------- 10 files changed, 138 insertions(+), 105 deletions(-) diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index b753461715b..1bae8831412 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -56,10 +56,10 @@ function reply(statusCode: number, body: any) { }; } -export function persistentVolumeClaimsNoData(): Cypress.Chainable { - return cy.intercept('GET', '/v1/persistentvolumeclaims?*', reply(200, persistentvolumeclaimsGetResponseEmpty)).as('persistentvolumeclaimsNoData'); +export function persistentVolumeClaimsNoData(tag: string): Cypress.Chainable { + return cy.intercept('GET', '/v1/persistentvolumeclaims?*', reply(200, persistentvolumeclaimsGetResponseEmpty)).as(tag); } -export function generatePersistentVolumeClaimsDataSmall(): Cypress.Chainable { - return cy.intercept('GET', '/v1/persistentvolumeclaims?*', reply(200, persistentvolumeclaimsResponseSmallSet)).as('persistentvolumeclaimsDataSmall'); +export function generatePersistentVolumeClaimsDataSmall(tag: string): Cypress.Chainable { + return cy.intercept('GET', '/v1/persistentvolumeclaims?*', reply(200, persistentvolumeclaimsResponseSmallSet)).as(tag); } diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index e8a6ddeef1f..bc446345733 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -29,7 +29,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, let i = 0; while (i < 125) { - const podName = `e2e-${ Cypress._.uniqueId(Date.now().toString()) }`; + const podName = Cypress._.uniqueId(Date.now().toString()); cy.createPod(nsName1, podName, 'nginx:latest', false).then(() => { podNamesList.push(`pod-${ podName }`); @@ -97,7 +97,8 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, events.sortableTable().pagination().leftButton().isDisabled(); // navigate to last page - end button - events.sortableTable().pagination().endButton().click(); + events.sortableTable().pagination().endButton().scrollIntoView() + .click(); // check row count on last page events.sortableTable().checkRowCount(false, 100); @@ -167,7 +168,8 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, events.sortableTable().rowElementWithPartialName(uniquePod).should('not.exist'); // navigate to last page - events.sortableTable().pagination().endButton().click(); + events.sortableTable().pagination().endButton().scrollIntoView() + .click(); // event name should be visible on last page (sorted in DESC order) events.sortableTable().rowElementWithPartialName(uniquePod).scrollIntoView().should('be.visible'); diff --git a/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts b/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts index e7e088ed2e9..41958c7a5e8 100644 --- a/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts +++ b/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts @@ -98,7 +98,8 @@ describe('CustomResourceDefinitions', { testIsolation: 'off', tags: ['@explorer' crdsPage.sortableTable().pagination().leftButton().isDisabled(); // navigate to last page - end button - crdsPage.sortableTable().pagination().endButton().click(); + crdsPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // row count on last page let lastPageCount = count % 10; diff --git a/cypress/e2e/tests/pages/explorer2/storage/persistent-volume-claims.spec.ts b/cypress/e2e/tests/pages/explorer2/storage/persistent-volume-claims.spec.ts index dd62d966c1c..ebd5bde6af6 100644 --- a/cypress/e2e/tests/pages/explorer2/storage/persistent-volume-claims.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/storage/persistent-volume-claims.spec.ts @@ -14,10 +14,12 @@ describe('PersistentVolumeClaims', { testIsolation: 'off', tags: ['@explorer2', }); it('validate persistent volume claims table in empty state', () => { - persistentVolumeClaimsNoData(); + const tag = 'persistentvolumeclaimsNoData'; + + persistentVolumeClaimsNoData(tag); persistentVolumeClaimsPage.goTo(); persistentVolumeClaimsPage.waitForPage(); - cy.wait('@persistentvolumeclaimsNoData'); + cy.wait(`@${ tag }`); const expectedHeaders = ['State', 'Name', 'Namespace', 'Status', 'Volume', 'Capacity', 'Access Modes', 'Storage Class', 'VolumeAttributesClass', 'Volume Mode', 'Age']; @@ -31,10 +33,12 @@ describe('PersistentVolumeClaims', { testIsolation: 'off', tags: ['@explorer2', }); it('flat list: validate persistent volume claims table', () => { - generatePersistentVolumeClaimsDataSmall(); + const tag = 'persistentvolumeclaimsDataSmall'; + + generatePersistentVolumeClaimsDataSmall(tag); persistentVolumeClaimsPage.goTo(); persistentVolumeClaimsPage.waitForPage(); - cy.wait('@persistentvolumeclaimsDataSmall'); + cy.wait(`@${ tag }`); // check table headers are visible const expectedHeaders = ['State', 'Name', 'Namespace', 'Status', 'Volume', 'Capacity', 'Access Modes', 'Storage Class', 'VolumeAttributesClass', 'Volume Mode', 'Age']; @@ -51,11 +55,14 @@ describe('PersistentVolumeClaims', { testIsolation: 'off', tags: ['@explorer2', persistentVolumeClaimsPage.list().resourceTable().sortableTable().checkRowCount(false, 1); }); + // storage/persistent-volume-claims.spec.ts it('group by namespace: validate persistent volume claims table', () => { - generatePersistentVolumeClaimsDataSmall(); + const tag = 'persistentvolumeclaimsDataSmall'; + + generatePersistentVolumeClaimsDataSmall(tag); persistentVolumeClaimsPage.goTo(); persistentVolumeClaimsPage.waitForPage(); - cy.wait('@persistentvolumeclaimsDataSmall'); + cy.wait(`@${ tag }`); // group by namespace persistentVolumeClaimsPage.list().resourceTable().sortableTable().groupByButtons(1) diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 74ca5922360..9f5e28f4fba 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -34,7 +34,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( let i = 0; while (i < 25) { - const podName = `e2e-${ Cypress._.uniqueId(Date.now().toString()) }`; + const podName = Cypress._.uniqueId(Date.now().toString()); cy.createPod(nsName1, podName, 'nginx:alpine', false).then(() => { podNamesList.push(`pod-${ podName }`); @@ -98,7 +98,8 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( workloadsPodPage.sortableTable().pagination().leftButton().isDisabled(); // navigate to last page - end button - workloadsPodPage.sortableTable().pagination().endButton().click(); + workloadsPodPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // row count on last page let lastPageCount = count % 10; @@ -144,7 +145,8 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( workloadsPodPage.sortableTable().rowElementWithName(podNamesList[0]).should('not.exist'); // navigate to last page - workloadsPodPage.sortableTable().pagination().endButton().click(); + workloadsPodPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // pod name should be visible on last page (sorted in DESC order) workloadsPodPage.sortableTable().rowElementWithName(podNamesList[0]).scrollIntoView().should('be.visible'); diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index e4bb4685a03..e72ea3511c7 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -80,7 +80,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, let i = 0; while (i < 25) { - const workspaceName = `e2e-${ Cypress._.uniqueId(Date.now().toString()) }`; + const workspaceName = Cypress._.uniqueId(Date.now().toString()); const workspaceDesc = `e2e-desc-${ Cypress._.uniqueId(Date.now().toString()) }`; cy.createFleetWorkspace(workspaceName, workspaceDesc, false).then((resp: Cypress.Response) => { @@ -148,7 +148,8 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, fleetWorkspacesPage.sortableTable().pagination().leftButton().isDisabled(); // navigate to last page - end button - fleetWorkspacesPage.sortableTable().pagination().endButton().click(); + fleetWorkspacesPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // check row count on last page fleetWorkspacesPage.sortableTable().checkRowCount(false, count - 20); @@ -196,7 +197,8 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, fleetWorkspacesPage.sortableTable().rowElementWithName(uniqueWorkspaceName).scrollIntoView().should('be.visible'); // navigate to last page - fleetWorkspacesPage.sortableTable().pagination().endButton().click(); + fleetWorkspacesPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // workspace name should be NOT visible on last page (sorted in ASC order) fleetWorkspacesPage.sortableTable().rowElementWithName(uniqueWorkspaceName).should('not.exist'); @@ -209,7 +211,8 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, fleetWorkspacesPage.sortableTable().rowElementWithName(uniqueWorkspaceName).should('not.exist'); // navigate to last page - fleetWorkspacesPage.sortableTable().pagination().endButton().click(); + fleetWorkspacesPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // workspace name should be visible on last page (sorted in DESC order) fleetWorkspacesPage.sortableTable().rowElementWithName(uniqueWorkspaceName).scrollIntoView().should('be.visible'); diff --git a/cypress/e2e/tests/pages/user-menu/account-api-keys.spec.ts b/cypress/e2e/tests/pages/user-menu/account-api-keys.spec.ts index 24cfc871159..d88d4c8c505 100644 --- a/cypress/e2e/tests/pages/user-menu/account-api-keys.spec.ts +++ b/cypress/e2e/tests/pages/user-menu/account-api-keys.spec.ts @@ -181,7 +181,8 @@ describe.skip('Account and API Keys', { testIsolation: 'off' }, () => { accountPage.sortableTable().pagination().leftButton().isDisabled(); // navigate to last page - end button - accountPage.sortableTable().pagination().endButton().click(); + accountPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // row count on last page let lastPageCount = count % 10; @@ -243,7 +244,8 @@ describe.skip('Account and API Keys', { testIsolation: 'off' }, () => { accountPage.sortableTable().rowElementWithName(uniqueTokenDesc).scrollIntoView().should('be.visible'); // navigate to last page - accountPage.sortableTable().pagination().endButton().click(); + accountPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // token description should be NOT visible on last page (sorted in ASC order) accountPage.sortableTable().rowElementWithName(uniqueTokenDesc).should('not.exist'); @@ -256,7 +258,8 @@ describe.skip('Account and API Keys', { testIsolation: 'off' }, () => { accountPage.sortableTable().rowElementWithName(uniqueTokenDesc).should('not.exist'); // navigate to last page - accountPage.sortableTable().pagination().endButton().click(); + accountPage.sortableTable().pagination().endButton().scrollIntoView() + .click(); // token description should be visible on last page (sorted in DESC order) accountPage.sortableTable().rowElementWithName(uniqueTokenDesc).scrollIntoView().should('be.visible'); diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index 4344a64530d..6cbb8b0aabf 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -282,7 +282,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { let i = 0; while (i < 25) { - const globalRoleName = `e2e-${ Cypress._.uniqueId(Date.now().toString()) }`; + const globalRoleName = Cypress._.uniqueId(Date.now().toString()); cy.createGlobalRole(globalRoleName, ['events.k8s.io'], [], ['events'], ['get'], false, false).then((resp: Cypress.Response) => { const roleId = resp.body.id; @@ -347,7 +347,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { .should('be.visible'); // navigate to last page - paginatedRoleTab.endButton().click(); + paginatedRoleTab.endButton().scrollIntoView().click(); // global role should NOT be visible on last page (sorted in ASC order) rolesList.resourceTable().sortableTable().rowElementWithName(uniqueRoleName) @@ -364,7 +364,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { .should('not.exist'); // navigate to last page - paginatedRoleTab.endButton().click(); + paginatedRoleTab.endButton().scrollIntoView().click(); // global role should be visible on last page (sorted in DESC order) rolesList.resourceTable().sortableTable().rowElementWithName(uniqueRoleName) @@ -417,7 +417,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { paginatedRoleTab.leftButton().isDisabled(); // navigate to last page - end button - paginatedRoleTab.endButton().click(); + paginatedRoleTab.endButton().scrollIntoView().click(); // row count on last page let lastPageCount = count % 10; diff --git a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts index e245df0d4ce..f6215aefab0 100644 --- a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts @@ -280,7 +280,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { let i = 0; while (i < 25) { - const userName = `e2e-${ Cypress._.uniqueId(Date.now().toString()) }`; + const userName = Cypress._.uniqueId(Date.now().toString()); cy.createUser({ username: userName }).then((resp: Cypress.Response) => { const userId = resp.body.id; @@ -372,6 +372,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { // navigate to last page - end button usersPo.list().resourceTable().sortableTable().pagination() .endButton() + .scrollIntoView() .click(); // row count on last page @@ -445,6 +446,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { // navigate to last page usersPo.list().resourceTable().sortableTable().pagination() .endButton() + .scrollIntoView() .click(); // user name should NOT be visible on last page (sorted in ASC order) @@ -464,6 +466,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { // navigate to last page usersPo.list().resourceTable().sortableTable().pagination() .endButton() + .scrollIntoView() .click(); // user name should be visible on last page (sorted in DESC order) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 26ffc50f7fd..3d17d0acf4e 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -69,22 +69,25 @@ Cypress.Commands.add('createUser', (params: CreateUserParams) => { username, globalRole, clusterRole, projectRole } = params; - return cy.request({ - method: 'POST', - url: `${ Cypress.env('api') }/v3/users`, - failOnStatusCode: false, - headers: { - 'x-api-csrf': token.value, - Accept: 'application/json' - }, - body: { - type: 'user', - enabled: true, - mustChangePassword: false, - username, - password: Cypress.env('password') - } - }) + return cy.createE2EResourceName(username) + .then((e2eName) => { + return cy.request({ + method: 'POST', + url: `${ Cypress.env('api') }/v3/users`, + failOnStatusCode: false, + headers: { + 'x-api-csrf': token.value, + Accept: 'application/json' + }, + body: { + type: 'user', + enabled: true, + mustChangePassword: false, + username: e2eName, + password: Cypress.env('password') + } + }); + }) .then((resp) => { if (resp.status === 422 && resp.body.message === 'Username is already in use.') { cy.log('User already exists. Skipping user creation'); @@ -296,31 +299,34 @@ Cypress.Commands.add('createNamespace', (nsName) => { * Create pod */ Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = true) => { - return cy.request({ - method: 'POST', - url: `${ Cypress.env('api') }/v1/pods`, - headers: { - 'x-api-csrf': token.value, - Accept: 'application/json' - }, - failOnStatusCode, - body: { - type: 'pod', - metadata: { - namespace: nsName, labels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` }, name: `pod-${ podName }`, annotations: {} - }, - spec: { - selector: { matchLabels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` } }, - containers: [{ - imagePullPolicy: 'Always', name: 'container-0', _init: false, volumeMounts: [], env: [], envFrom: [], image: `${ image }`, __active: true - }], - initContainers: [], - imagePullSecrets: [], - volumes: [], - affinity: {} - } - } - }) + return cy.createE2EResourceName(nsName) + .then((e2eName) => { + return cy.request({ + method: 'POST', + url: `${ Cypress.env('api') }/v1/pods`, + headers: { + 'x-api-csrf': token.value, + Accept: 'application/json' + }, + failOnStatusCode, + body: { + type: 'pod', + metadata: { + namespace: e2eName, labels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` }, name: `pod-${ podName }`, annotations: {} + }, + spec: { + selector: { matchLabels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` } }, + containers: [{ + imagePullPolicy: 'Always', name: 'container-0', _init: false, volumeMounts: [], env: [], envFrom: [], image: `${ image }`, __active: true + }], + initContainers: [], + imagePullSecrets: [], + volumes: [], + affinity: {} + } + } + }); + }) .then((resp) => { if (failOnStatusCode) { expect(resp.status).to.eq(201); @@ -846,26 +852,29 @@ Cypress.Commands.add('createToken', (description: string, ttl = 3600000, failOnS * Create global role */ Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNames: string[], resources: string[], verbs: string[], newUserDefault = false, failOnStatusCode = true) => { - return cy.request({ - method: 'POST', - url: `${ Cypress.env('api') }/v3/globalroles`, - headers: { - 'x-api-csrf': token.value, - Accept: 'application/json' - }, - failOnStatusCode, - body: { - type: 'globalRole', - name, - rules: [{ - apiGroups, - resourceNames, - resources, - verbs - }], - newUserDefault - } - }) + return cy.createE2EResourceName(name) + .then((e2eName) => { + return cy.request({ + method: 'POST', + url: `${ Cypress.env('api') }/v3/globalroles`, + headers: { + 'x-api-csrf': token.value, + Accept: 'application/json' + }, + failOnStatusCode, + body: { + type: 'globalRole', + name: e2eName, + rules: [{ + apiGroups, + resourceNames, + resources, + verbs + }], + newUserDefault + } + }); + }) .then((resp) => { if (failOnStatusCode) { expect(resp.status).to.eq(201); @@ -877,21 +886,24 @@ Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNam * Create fleet workspace */ Cypress.Commands.add('createFleetWorkspace', (name: string, description?: string, failOnStatusCode = true) => { - return cy.request({ - method: 'POST', - url: `${ Cypress.env('api') }/v3/fleetworkspaces`, - headers: { - 'x-api-csrf': token.value, - Accept: 'application/json' - }, - failOnStatusCode, - body: { - type: 'fleetworkspace', - name, - annotations: { 'field.cattle.io/description': description }, - labels: {} - } - }) + return cy.createE2EResourceName(name) + .then((e2eName) => { + return cy.request({ + method: 'POST', + url: `${ Cypress.env('api') }/v3/fleetworkspaces`, + headers: { + 'x-api-csrf': token.value, + Accept: 'application/json' + }, + failOnStatusCode, + body: { + type: 'fleetworkspace', + name: e2eName, + annotations: { 'field.cattle.io/description': description }, + labels: {} + } + }); + }) .then((resp) => { if (failOnStatusCode) { expect(resp.status).to.eq(201); From 1b108c3c434eeed28357f7b10032aca22b1d2672 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 16:29:37 +0100 Subject: [PATCH 04/35] Various fixes --- cypress/e2e/po/side-bars/user-menu.po.ts | 13 ++++++++++--- .../tests/pages/explorer2/workloads/pods.spec.ts | 13 +++++++++---- .../tests/pages/global-settings/settings.spec.ts | 5 +++++ cypress/globals.d.ts | 3 ++- cypress/support/commands/commands.ts | 13 ++++++++++--- cypress/support/commands/rancher-api-commands.ts | 14 +++++++++++--- 6 files changed, 47 insertions(+), 14 deletions(-) diff --git a/cypress/e2e/po/side-bars/user-menu.po.ts b/cypress/e2e/po/side-bars/user-menu.po.ts index 944247d1071..5f0df55b77d 100644 --- a/cypress/e2e/po/side-bars/user-menu.po.ts +++ b/cypress/e2e/po/side-bars/user-menu.po.ts @@ -95,14 +95,21 @@ export default class UserMenuPo extends ComponentPo { return this.userMenu().find('li').should('be.visible').and('have.length', 4); } + /** + * label: 'Preferences', 'Account & API Keys', or 'Log Out' + * @param label + * @returns + */ + getMenuItem(label: 'Preferences' | 'Account & API Keys' | 'Log Out') { + return this.ensureOpen().then(() => this.getMenuItems().contains(label)); + } + /** * label: 'Preferences', 'Account & API Keys', or 'Log Out' * @param label * @returns */ clickMenuItem(label: 'Preferences' | 'Account & API Keys' | 'Log Out') { - this.ensureOpen().then(() => { - return this.getMenuItems().contains(label).click(); - }); + return this.getMenuItem(label).click(); } } diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 9f5e28f4fba..8b333b122ab 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -18,8 +18,13 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( let nsName1: string; let nsName2: string; let initialCount: number; + let rootResourceName: string; before('set up', () => { + cy.getRootE2EResourceName().then((root) => { + rootResourceName = root; + }); + cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', '{\"local\":[]}'); cy.getRancherResource('v1', 'pods').then((resp: Cypress.Response) => { initialCount = resp.body.count; @@ -36,8 +41,8 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( while (i < 25) { const podName = Cypress._.uniqueId(Date.now().toString()); - cy.createPod(nsName1, podName, 'nginx:alpine', false).then(() => { - podNamesList.push(`pod-${ podName }`); + cy.createPod(nsName1, podName, 'nginx:alpine', false).then((resp) => { + podNamesList.push(resp.body.metadata.name); }); i++; @@ -56,7 +61,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); it('pagination is visible and user is able to navigate through pods data', () => { - WorkloadsPodsListPagePo.navTo(); + WorkloadsPodsListPagePo.goTo('local'); workloadsPodPage.waitForPage(); // check pods count @@ -129,7 +134,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( WorkloadsPodsListPagePo.navTo(); workloadsPodPage.waitForPage(); // use filter to only show test data - workloadsPodPage.sortableTable().filter('e2e-'); + workloadsPodPage.sortableTable().filter(rootResourceName); // check table is sorted by name in ASC order by default workloadsPodPage.sortableTable().tableHeaderRow().checkSortOrder(2, 'down'); diff --git a/cypress/e2e/tests/pages/global-settings/settings.spec.ts b/cypress/e2e/tests/pages/global-settings/settings.spec.ts index f156c4c9386..907491d4963 100644 --- a/cypress/e2e/tests/pages/global-settings/settings.spec.ts +++ b/cypress/e2e/tests/pages/global-settings/settings.spec.ts @@ -7,11 +7,13 @@ import ClusterManagerListPagePo from '@/cypress/e2e/po/pages/cluster-manager/clu import * as path from 'path'; import * as jsyaml from 'js-yaml'; import { settings } from '@/cypress/e2e/blueprints/global_settings/settings-data'; +import UserMenuPo from '@/cypress/e2e/po/side-bars/user-menu.po'; const settingsPage = new SettingsPagePo('local'); const accountPage = new AccountPagePo(); const createKeyPage = new CreateKeyPagePo(); const clusterList = new ClusterManagerListPagePo(); +const userMenu = new UserMenuPo(); describe('Settings', { testIsolation: 'off' }, () => { before(() => { @@ -223,6 +225,9 @@ describe('Settings', { testIsolation: 'off' }, () => { }); it('can update auth-token-max-ttl-minutes', { tags: ['@globalSettings', '@adminUser'] }, () => { + userMenu.getMenuItem('Account & API Keys').should('be.visible'); // Flaky test. Check required menu item visible (and not hidden later on due to content of test) + userMenu.self().click(); + // Update setting SettingsPagePo.navTo(); settingsPage.editSettingsByLabel('auth-token-max-ttl-minutes'); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 85951bc2f50..256b60caf0c 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -64,7 +64,8 @@ declare global { login(username?: string, password?: string, cacheSession?: boolean): Chainable; logout(): Chainable; byLabel(label: string): Chainable; - createE2EResourceName(context: string): Chainable; + getRootE2EResourceName(): Chainable; + createE2EResourceName(context: string): Chainable; createUser(params: CreateUserParams): Chainable; setGlobalRoleBinding(userId: string, role: string): Chainable; diff --git a/cypress/support/commands/commands.ts b/cypress/support/commands/commands.ts index 75c014a57df..629dc252c13 100644 --- a/cypress/support/commands/commands.ts +++ b/cypress/support/commands/commands.ts @@ -61,13 +61,20 @@ Cypress.Commands.add('iFrame', () => { .then((body) => cy.wrap(body)); }); +const runTimestamp = +new Date(); + /** - * Create resource name + * Get root resource name */ -const runTimestamp = +new Date(); +Cypress.Commands.add('getRootE2EResourceName', () => { + return cy.wrap(`e2e-test-${ runTimestamp }`); +}); +/** + * Create resource name + */ Cypress.Commands.add('createE2EResourceName', (context) => { - return cy.wrap(`e2e-test-${ runTimestamp }-${ context }`); + return cy.getRootE2EResourceName().then((root) => `${ root }-${ context }`); }); // See: https://stackoverflow.com/questions/74785083/how-can-i-get-a-custom-css-variable-from-any-element-cypress diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 3d17d0acf4e..2223d4f0d9e 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -299,7 +299,7 @@ Cypress.Commands.add('createNamespace', (nsName) => { * Create pod */ Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = true) => { - return cy.createE2EResourceName(nsName) + return cy.createE2EResourceName(podName) .then((e2eName) => { return cy.request({ method: 'POST', @@ -312,10 +312,10 @@ Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = tr body: { type: 'pod', metadata: { - namespace: e2eName, labels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` }, name: `pod-${ podName }`, annotations: {} + namespace: nsName, labels: { 'workload.user.cattle.io/workloadselector': `${ e2eName }` }, name: `${ e2eName }`, annotations: {} }, spec: { - selector: { matchLabels: { 'workload.user.cattle.io/workloadselector': `pod-${ nsName }-pod-${ podName }` } }, + selector: { matchLabels: { 'workload.user.cattle.io/workloadselector': `${ e2eName }` } }, containers: [{ imagePullPolicy: 'Always', name: 'container-0', _init: false, volumeMounts: [], env: [], envFrom: [], image: `${ image }`, __active: true }], @@ -331,6 +331,8 @@ Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = tr if (failOnStatusCode) { expect(resp.status).to.eq(201); } + + return resp; }); }); @@ -845,6 +847,8 @@ Cypress.Commands.add('createToken', (description: string, ttl = 3600000, failOnS if (failOnStatusCode) { expect(resp.status).to.eq(201); } + + return resp; }); }); @@ -879,6 +883,8 @@ Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNam if (failOnStatusCode) { expect(resp.status).to.eq(201); } + + return resp; }); }); @@ -908,6 +914,8 @@ Cypress.Commands.add('createFleetWorkspace', (name: string, description?: string if (failOnStatusCode) { expect(resp.status).to.eq(201); } + + return resp; }); }); From 9cc686852820d4ee8ea3b1396a8aeda2dd7ae888 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 17:58:11 +0100 Subject: [PATCH 05/35] pagination change fixes --- cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts | 8 +++++--- cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts | 4 +++- cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts | 4 ++-- cypress/e2e/tests/pages/users-and-auth/roles.spec.ts | 4 +++- cypress/e2e/tests/pages/users-and-auth/users.spec.ts | 3 ++- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 8b333b122ab..ca62fa436ef 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -13,7 +13,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - const uniquePod = 'aaa-e2e-test-pod-name'; + let uniquePod = 'unique-pod-name'; const podNamesList = []; let nsName1: string; let nsName2: string; @@ -56,7 +56,9 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( cy.createNamespace(nsName2); // create unique pod for filtering/sorting test - cy.createPod(nsName2, uniquePod, 'nginx:alpine'); + cy.createPod(nsName2, uniquePod, 'nginx:alpine').then((resp) => { + uniquePod = resp.body.metadata.name; + }); }); }); @@ -173,7 +175,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( // filter by namespace workloadsPodPage.sortableTable().filter(nsName2); workloadsPodPage.sortableTable().checkRowCount(false, 1); - workloadsPodPage.sortableTable().rowElementWithName(`pod-${ uniquePod }`).should('be.visible'); + workloadsPodPage.sortableTable().rowElementWithName(uniquePod).should('be.visible'); }); it('pagination is hidden', () => { diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index e72ea3511c7..c34364e12f5 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -70,7 +70,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, }); }); - const uniqueWorkspaceName = 'aaa-e2e-test-name'; + let uniqueWorkspaceName = 'unique-test-name'; before('set up', () => { cy.getRancherResource('v1', 'management.cattle.io.fleetworkspaces').then((resp: Cypress.Response) => { @@ -96,6 +96,8 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, cy.createFleetWorkspace(uniqueWorkspaceName).then((resp: Cypress.Response) => { const wsId = resp.body.id; + uniqueWorkspaceName = resp.body.metadata.name; + workspaceNameList.push(wsId); }); cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', '{\"local\":[]}'); diff --git a/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts b/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts index 6b2c85b0117..513aecd2981 100644 --- a/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts +++ b/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts @@ -177,8 +177,8 @@ describe('Kontainer Drivers', { testIsolation: 'off', tags: ['@manager', '@admin it('can deactivate drivers in bulk', () => { KontainerDriversPagePo.navTo(); driversPage.waitForPage(); - driversPage.list().details(oracleDriver, 1).should('contain', 'Active'); - driversPage.list().details(linodeDriver, 1).should('contain', 'Active'); + driversPage.list().details(oracleDriver, 1).scrollIntoView().should('contain', 'Active'); + driversPage.list().details(linodeDriver, 1).scrollIntoView().should('contain', 'Active'); driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) .set(); driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(linodeDriver) diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index 6cbb8b0aabf..8767b4440d5 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -266,7 +266,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { }); describe('List', { testIsolation: 'off', tags: ['@vai', '@adminUser'] }, () => { - const uniqueRoleName = 'aaa-e2e-test-name'; + let uniqueRoleName = 'unique-test-name'; const globalRolesIdsList = []; const rolesList = roles.list('GLOBAL'); const paginatedRoleTab = roles.paginatedTab('GLOBAL'); @@ -297,6 +297,8 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { cy.createGlobalRole(uniqueRoleName, ['events.k8s.io'], [], ['events'], ['get'], false).then((resp: Cypress.Response) => { const roleId = resp.body.id; + uniqueRoleName = resp.body.metadata.name; + globalRolesIdsList.push(roleId); }); cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', '{\"local\":[]}'); diff --git a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts index f6215aefab0..3cb2b8052b3 100644 --- a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts @@ -265,7 +265,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { }); describe('List', { testIsolation: 'off', tags: ['@vai', '@adminUser'] }, () => { - const uniqueUserName = 'aaa-e2e-test-name'; + let uniqueUserName = 'aaa-e2e-test-name'; const userIdsList = []; let initialCount; @@ -295,6 +295,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { cy.createUser({ username: uniqueUserName }).then((resp: Cypress.Response) => { const userId = resp.body.id; + uniqueUserName = resp.body.metadata.name; userIdsList.push(userId); }); }); From ff9982387f2533849f4550dc4cd4e2bedd9385dc Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 25 Oct 2024 18:52:30 +0100 Subject: [PATCH 06/35] pagination change fixes + new settings --- .../pages/explorer/dashboard/cluster-dashboard.spec.ts | 7 +++++-- .../e2e/tests/pages/explorer/dashboard/events.spec.ts | 10 ++++++---- .../e2e/tests/pages/fleet/advanced/workspaces.spec.ts | 2 +- cypress/support/utils/settings-utils.ts | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index 003ee8cb9af..0b1c5ef9db3 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -32,7 +32,7 @@ const simpleBox = new SimpleBoxPo(); const header = new HeaderPo(); describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, () => { - const podName = `e2e-test-${ +new Date() }`; + let podName = `e2e-test`; before(() => { cy.login(); @@ -237,7 +237,10 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi // create pod // eslint-disable-next-line no-return-assign - cy.createPod(nsName, podName, 'nginx:latest').then(() => removePod = true); + cy.createPod(nsName, podName, 'nginx:latest').then((resp) => { + podName = resp.body.metadata.name; + removePod = true; + }); }); }); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index bc446345733..269db0056e0 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -12,7 +12,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - const uniquePod = 'aaa-e2e-test-pod-name'; + let uniquePod = 'unique-pod-name'; const podNamesList = []; let nsName1: string; let nsName2: string; @@ -31,8 +31,8 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, while (i < 125) { const podName = Cypress._.uniqueId(Date.now().toString()); - cy.createPod(nsName1, podName, 'nginx:latest', false).then(() => { - podNamesList.push(`pod-${ podName }`); + cy.createPod(nsName1, podName, 'nginx:latest', false).then((resp) => { + podNamesList.push(resp.body.metadata.name); }); i++; @@ -46,7 +46,9 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, cy.createNamespace(nsName2); // create unique pod for filtering/sorting test - cy.createPod(nsName2, uniquePod, 'nginx:latest'); + cy.createPod(nsName2, uniquePod, 'nginx:latest').then((resp) => { + uniquePod = resp.body.metadata.name; + }); }); }); diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index c34364e12f5..e83f14952fd 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -96,7 +96,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, cy.createFleetWorkspace(uniqueWorkspaceName).then((resp: Cypress.Response) => { const wsId = resp.body.id; - uniqueWorkspaceName = resp.body.metadata.name; + uniqueWorkspaceName = resp.body.name; workspaceNameList.push(wsId); }); diff --git a/cypress/support/utils/settings-utils.ts b/cypress/support/utils/settings-utils.ts index bc7e519ca93..348f77dadfd 100644 --- a/cypress/support/utils/settings-utils.ts +++ b/cypress/support/utils/settings-utils.ts @@ -5,4 +5,4 @@ * (tests will check that the pre-authed setting count is less than this, and the post-authed count is greater than) * */ -export const PARTIAL_SETTING_THRESHOLD = 13; +export const PARTIAL_SETTING_THRESHOLD = 12; From 113df34817dbc06c7b993fc14e945b4715ce9807 Mon Sep 17 00:00:00 2001 From: Richard Cox <18697775+richard-cox@users.noreply.github.com> Date: Sat, 26 Oct 2024 09:17:16 +0100 Subject: [PATCH 07/35] Update settings-utils.ts --- cypress/support/utils/settings-utils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cypress/support/utils/settings-utils.ts b/cypress/support/utils/settings-utils.ts index 348f77dadfd..8d0faaa2136 100644 --- a/cypress/support/utils/settings-utils.ts +++ b/cypress/support/utils/settings-utils.ts @@ -1,8 +1,6 @@ /** - * There's a small amount of mgmt settings that are public and will be returned when the user in unauthed. This represents that number. - * - * It doesn't need to be exact but should always be equal or more than the actual amount - * (tests will check that the pre-authed setting count is less than this, and the post-authed count is greater than) + * There's a small amount of mgmt settings that are public and will be returned when the user in unauthed. When logged in there will be more. * + * This number is used to check that after log in we get all settings by checking that unauthed setting count is lower and authed settings count is at or greater than */ -export const PARTIAL_SETTING_THRESHOLD = 12; +export const PARTIAL_SETTING_THRESHOLD = 13; From 634924f3b8bb23f752e88b13324fd8d523585820 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Wed, 30 Oct 2024 12:01:30 +0000 Subject: [PATCH 08/35] Fixes --- .../e2e/po/pages/fleet/fleet-dashboard.po.ts | 4 +++- .../e2e/po/side-bars/burger-side-menu.po.ts | 6 +++--- .../dashboard/cluster-dashboard.spec.ts | 20 +++++++++++-------- .../pages/explorer/dashboard/events.spec.ts | 2 +- .../pages/explorer2/workloads/pods.spec.ts | 2 +- .../pages/fleet/advanced/workspaces.spec.ts | 2 +- cypress/e2e/tests/pages/fleet/gitrepo.spec.ts | 2 +- .../tests/pages/users-and-auth/roles.spec.ts | 2 +- cypress/globals.d.ts | 3 ++- .../support/commands/rancher-api-commands.ts | 4 ++-- 10 files changed, 27 insertions(+), 20 deletions(-) diff --git a/cypress/e2e/po/pages/fleet/fleet-dashboard.po.ts b/cypress/e2e/po/pages/fleet/fleet-dashboard.po.ts index cf6809143f2..be82a80b991 100644 --- a/cypress/e2e/po/pages/fleet/fleet-dashboard.po.ts +++ b/cypress/e2e/po/pages/fleet/fleet-dashboard.po.ts @@ -1,6 +1,7 @@ import PagePo from '@/cypress/e2e/po/pages/page.po'; import ResourceTablePo from '@/cypress/e2e/po/components/resource-table.po'; import BurgerMenuPo from '@/cypress/e2e/po/side-bars/burger-side-menu.po'; +import { LONG_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts'; export class FleetDashboardPagePo extends PagePo { static url: string; @@ -26,7 +27,8 @@ export class FleetDashboardPagePo extends PagePo { static navTo() { BurgerMenuPo.toggle(); - BurgerMenuPo.burgerMenuNavToMenubyLabel('Continuous Delivery'); + // Give extra time to ensure fleet comes up + BurgerMenuPo.burgerMenuNavToMenubyLabel('Continuous Delivery', LONG_TIMEOUT_OPT); } constructor(clusterId: string) { diff --git a/cypress/e2e/po/side-bars/burger-side-menu.po.ts b/cypress/e2e/po/side-bars/burger-side-menu.po.ts index 466b59c2340..b1eda4fc423 100644 --- a/cypress/e2e/po/side-bars/burger-side-menu.po.ts +++ b/cypress/e2e/po/side-bars/burger-side-menu.po.ts @@ -1,4 +1,4 @@ -import ComponentPo from '@/cypress/e2e/po/components/component.po'; +import ComponentPo, { GetOptions } from '@/cypress/e2e/po/components/component.po'; export default class BurgerMenuPo extends ComponentPo { constructor() { @@ -19,8 +19,8 @@ export default class BurgerMenuPo extends ComponentPo { * Navigates to a top-level side menu entry by label (non-cluster) * @returns {Cypress.Chainable} */ - static burgerMenuNavToMenubyLabel(label: string): Cypress.Chainable { - return this.sideMenu().should('exist').find('.option').contains(label) + static burgerMenuNavToMenubyLabel(label: string, options?: GetOptions): Cypress.Chainable { + return this.sideMenu().should('exist').find('.option').contains(label, options) .click({ force: true }); } diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index 0b1c5ef9db3..fac6018c26f 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -304,6 +304,8 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi stdProjectName = `standard-user-project${ +new Date() }`; stdNsName = `standard-user-ns${ +new Date() }`; stdUsername = `standard-user-${ +new Date() }`; + const password = Cypress.env('password'); + // log in as admin cy.login(); cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { @@ -323,17 +325,19 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi globalRole: { role: 'user' }, projectRole: { clusterId: 'local', projectName: stdProjectName, role: 'project-owner' - } - }).as('createUserRequest'); + }, + password + }).as('createUserRequest').then(() => { + // log in as new standard user + cy.login(stdUsername, password, false); + + // go to cluster dashboard + ClusterDashboardPagePo.navTo(); + clusterDashboard.waitForPage(); + }); }); }); }); - // log in as new standard user - cy.login(stdUsername, Cypress.env('password'), false); - - // go to cluster dashboard - ClusterDashboardPagePo.navTo(); - clusterDashboard.waitForPage(); }); // note - this would be 'fleet agent' on downstream clusters diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index 269db0056e0..2911ffae6b8 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -12,7 +12,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - let uniquePod = 'unique-pod-name'; + let uniquePod = 'a-unique-test-name'; const podNamesList = []; let nsName1: string; let nsName2: string; diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index ca62fa436ef..d76dc0f4174 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -13,7 +13,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - let uniquePod = 'unique-pod-name'; + let uniquePod = 'a-unique-test-name'; const podNamesList = []; let nsName1: string; let nsName2: string; diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index e83f14952fd..e1a3d348270 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -70,7 +70,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, }); }); - let uniqueWorkspaceName = 'unique-test-name'; + let uniqueWorkspaceName = 'a-unique-test-name'; before('set up', () => { cy.getRancherResource('v1', 'management.cattle.io.fleetworkspaces').then((resp: Cypress.Response) => { diff --git a/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts b/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts index c77103c4040..dcdc0719741 100644 --- a/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts +++ b/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts @@ -136,7 +136,7 @@ describe('Git Repo', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, ( prefPage.languageDropdownMenu().isOpened(); cy.intercept('PUT', 'v1/userpreferences/*').as(`prefUpdateEnUs`); - prefPage.languageDropdownMenu().clickOption(1); + prefPage.languageDropdownMenu().clickOptionWithLabel('English'); cy.wait('@prefUpdateEnUs').then(({ response }) => { expect(response?.statusCode).to.eq(200); expect(response?.body.data).to.have.property('locale', 'en-us'); diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index 8767b4440d5..1cdfebc7b9b 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -266,7 +266,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { }); describe('List', { testIsolation: 'off', tags: ['@vai', '@adminUser'] }, () => { - let uniqueRoleName = 'unique-test-name'; + let uniqueRoleName = 'a-unique-test-name'; const globalRolesIdsList = []; const rolesList = roles.list('GLOBAL'); const paginatedRoleTab = roles.paginatedTab('GLOBAL'); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 256b60caf0c..e0e5e7a4585 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -16,7 +16,8 @@ export type CreateUserParams = { clusterId: string, projectName: string, role: string, - } + }, + password?: string, } export type CreateAmazonRke2ClusterParams = { diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 2223d4f0d9e..248d8118dd6 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -66,7 +66,7 @@ Cypress.Commands.add('login', ( */ Cypress.Commands.add('createUser', (params: CreateUserParams) => { const { - username, globalRole, clusterRole, projectRole + username, globalRole, clusterRole, projectRole, password } = params; return cy.createE2EResourceName(username) @@ -84,7 +84,7 @@ Cypress.Commands.add('createUser', (params: CreateUserParams) => { enabled: true, mustChangePassword: false, username: e2eName, - password: Cypress.env('password') + password: password || Cypress.env('password') } }); }) From a365ae9bbbea9aa9f157eccfa92864ae699227d0 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Wed, 30 Oct 2024 14:36:15 +0000 Subject: [PATCH 09/35] create name fixes --- .../explorer/dashboard/cluster-dashboard.spec.ts | 2 ++ .../tests/pages/explorer/dashboard/events.spec.ts | 4 ++-- .../tests/pages/explorer2/workloads/pods.spec.ts | 4 ++-- .../tests/pages/fleet/advanced/workspaces.spec.ts | 4 ++-- .../e2e/tests/pages/users-and-auth/roles.spec.ts | 4 ++-- cypress/globals.d.ts | 13 +++++++++---- cypress/support/commands/commands.ts | 4 ++-- cypress/support/commands/rancher-api-commands.ts | 12 ++++++------ 8 files changed, 27 insertions(+), 20 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index fac6018c26f..41ddfc6a86e 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -328,6 +328,8 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi }, password }).as('createUserRequest').then(() => { + cy.wait(2000); // TEST + // log in as new standard user cy.login(stdUsername, password, false); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index 2911ffae6b8..c10d15cea4b 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -31,7 +31,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, while (i < 125) { const podName = Cypress._.uniqueId(Date.now().toString()); - cy.createPod(nsName1, podName, 'nginx:latest', false).then((resp) => { + cy.createPod(nsName1, podName, 'nginx:latest', false, { createNameOptions: { prefixContext: true } }).then((resp) => { podNamesList.push(resp.body.metadata.name); }); @@ -46,7 +46,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, cy.createNamespace(nsName2); // create unique pod for filtering/sorting test - cy.createPod(nsName2, uniquePod, 'nginx:latest').then((resp) => { + cy.createPod(nsName2, uniquePod, 'nginx:latest', true, { createNameOptions: { prefixContext: true } }).then((resp) => { uniquePod = resp.body.metadata.name; }); }); diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index d76dc0f4174..7ac7eafb00f 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -41,7 +41,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( while (i < 25) { const podName = Cypress._.uniqueId(Date.now().toString()); - cy.createPod(nsName1, podName, 'nginx:alpine', false).then((resp) => { + cy.createPod(nsName1, podName, 'nginx:alpine', false, { createNameOptions: { prefixContext: true } }).then((resp) => { podNamesList.push(resp.body.metadata.name); }); @@ -56,7 +56,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( cy.createNamespace(nsName2); // create unique pod for filtering/sorting test - cy.createPod(nsName2, uniquePod, 'nginx:alpine').then((resp) => { + cy.createPod(nsName2, uniquePod, 'nginx:alpine', true, { createNameOptions: { prefixContext: true } }).then((resp) => { uniquePod = resp.body.metadata.name; }); }); diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index e1a3d348270..8660e934b19 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -83,7 +83,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, const workspaceName = Cypress._.uniqueId(Date.now().toString()); const workspaceDesc = `e2e-desc-${ Cypress._.uniqueId(Date.now().toString()) }`; - cy.createFleetWorkspace(workspaceName, workspaceDesc, false).then((resp: Cypress.Response) => { + cy.createFleetWorkspace(workspaceName, workspaceDesc, false, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const wsId = resp.body.id; workspaceNameList.push(wsId); @@ -93,7 +93,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, } // create one more for sorting test - cy.createFleetWorkspace(uniqueWorkspaceName).then((resp: Cypress.Response) => { + cy.createFleetWorkspace(uniqueWorkspaceName, undefined, true, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const wsId = resp.body.id; uniqueWorkspaceName = resp.body.name; diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index 1cdfebc7b9b..8fbf476550c 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -284,7 +284,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { while (i < 25) { const globalRoleName = Cypress._.uniqueId(Date.now().toString()); - cy.createGlobalRole(globalRoleName, ['events.k8s.io'], [], ['events'], ['get'], false, false).then((resp: Cypress.Response) => { + cy.createGlobalRole(globalRoleName, ['events.k8s.io'], [], ['events'], ['get'], false, false, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const roleId = resp.body.id; globalRolesIdsList.push(roleId); @@ -294,7 +294,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { } // create one more for sorting test - cy.createGlobalRole(uniqueRoleName, ['events.k8s.io'], [], ['events'], ['get'], false).then((resp: Cypress.Response) => { + cy.createGlobalRole(uniqueRoleName, ['events.k8s.io'], [], ['events'], ['get'], false, true, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const roleId = resp.body.id; uniqueRoleName = resp.body.metadata.name; diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index e0e5e7a4585..9e0fdcd7b2e 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -55,6 +55,11 @@ export type CreateAmazonRke2ClusterWithoutMachineConfigParams = { namespace: string, } } + +export interface CreateResourceNameOptions { + prefixContext: boolean +} + declare global { // eslint-disable-next-line no-unused-vars namespace Cypress { @@ -66,7 +71,7 @@ declare global { logout(): Chainable; byLabel(label: string): Chainable; getRootE2EResourceName(): Chainable; - createE2EResourceName(context: string): Chainable; + createE2EResourceName(context: string, options?: CreateResourceNameOptions): Chainable; createUser(params: CreateUserParams): Chainable; setGlobalRoleBinding(userId: string, role: string): Chainable; @@ -76,10 +81,10 @@ declare global { createProject(projName: string, clusterId: string, userId: string): Chainable; createNamespaceInProject(nsName: string, projId: string): Chainable; createNamespace(nsName: string): Chainable; - createPod(nsName: string, podName: string, image: string, failOnStatusCode?: boolean): Chainable; + createPod(nsName: string, podName: string, image: string, failOnStatusCode?: boolean, options?: { createNameOptions?: CreateResourceNameOptions }): Chainable; createToken(description: string, ttl: number, failOnStatusCode?: boolean, clusterId?: string): Chainable; - createGlobalRole(name: string, apiGroups: string[], resourceNames: string[], resources: string[], verbs: string[], newUserDefault: boolean, failOnStatusCode?: boolean): Chainable; - createFleetWorkspace(name: string, description?: string, failOnStatusCode?: boolean): Chainable; + createGlobalRole(name: string, apiGroups: string[], resourceNames: string[], resources: string[], verbs: string[], newUserDefault: boolean, failOnStatusCode?: boolean, options?: { createNameOptions?: CreateResourceNameOptions }): Chainable; + createFleetWorkspace(name: string, description?: string, failOnStatusCode?: boolean, options?: { createNameOptions?: CreateResourceNameOptions }): Chainable; createAwsCloudCredentials(nsName: string, cloudCredName: string, defaultRegion: string, accessKey: string, secretKey: string): Chainable; createAmazonMachineConfig(instanceType: string, region: string, vpcId: string, zone: string, type: string, clusterName: string, namespace: string): Chainable; createAmazonRke2Cluster(params: CreateAmazonRke2ClusterParams): Chainable; diff --git a/cypress/support/commands/commands.ts b/cypress/support/commands/commands.ts index 629dc252c13..1363c4efd97 100644 --- a/cypress/support/commands/commands.ts +++ b/cypress/support/commands/commands.ts @@ -73,8 +73,8 @@ Cypress.Commands.add('getRootE2EResourceName', () => { /** * Create resource name */ -Cypress.Commands.add('createE2EResourceName', (context) => { - return cy.getRootE2EResourceName().then((root) => `${ root }-${ context }`); +Cypress.Commands.add('createE2EResourceName', (context, options = { prefixContext: false }) => { + return cy.getRootE2EResourceName().then((root) => options?.prefixContext ? `${ context }-${ root }` : `${ root }-${ context }`); }); // See: https://stackoverflow.com/questions/74785083/how-can-i-get-a-custom-css-variable-from-any-element-cypress diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 248d8118dd6..e3e66a94dcb 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -298,8 +298,8 @@ Cypress.Commands.add('createNamespace', (nsName) => { /** * Create pod */ -Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = true) => { - return cy.createE2EResourceName(podName) +Cypress.Commands.add('createPod', (nsName, podName, image, failOnStatusCode = true, options = { }) => { + return cy.createE2EResourceName(podName, options?.createNameOptions) .then((e2eName) => { return cy.request({ method: 'POST', @@ -855,8 +855,8 @@ Cypress.Commands.add('createToken', (description: string, ttl = 3600000, failOnS /** * Create global role */ -Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNames: string[], resources: string[], verbs: string[], newUserDefault = false, failOnStatusCode = true) => { - return cy.createE2EResourceName(name) +Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNames: string[], resources: string[], verbs: string[], newUserDefault = false, failOnStatusCode = true, options = { }) => { + return cy.createE2EResourceName(name, options?.createNameOptions) .then((e2eName) => { return cy.request({ method: 'POST', @@ -891,8 +891,8 @@ Cypress.Commands.add('createGlobalRole', (name, apiGroups: string[], resourceNam /** * Create fleet workspace */ -Cypress.Commands.add('createFleetWorkspace', (name: string, description?: string, failOnStatusCode = true) => { - return cy.createE2EResourceName(name) +Cypress.Commands.add('createFleetWorkspace', (name: string, description?: string, failOnStatusCode = true, options = { }) => { + return cy.createE2EResourceName(name, options?.createNameOptions) .then((e2eName) => { return cy.request({ method: 'POST', From 6b36b0e0fbd586c4619b37c2308f5237bc3e98de Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Wed, 30 Oct 2024 14:41:14 +0000 Subject: [PATCH 10/35] improve namespace picker test --- cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts b/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts index 49f8712670b..2060372e1e1 100644 --- a/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts @@ -37,6 +37,10 @@ describe('Namespace picker', { testIsolation: 'off' }, () => { workloadsPodPage.waitForPage(); cy.wait('@getPods'); + // group by namespace + workloadsPodPage.list().resourceTable().sortableTable().groupByButtons(1) + .click(); + // Filter by Namespace: Select 'cattle-fleet-system' namespacePicker.toggle(); namespacePicker.getOptions().find('#ns_cattle-fleet-system').should('exist'); From 5c406d663c2b4bbdba2a9b1a4131a8c1e7e33a6e Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Wed, 30 Oct 2024 15:30:03 +0000 Subject: [PATCH 11/35] Fix user response --- .../pages/explorer/dashboard/cluster-dashboard.spec.ts | 7 +++---- cypress/support/commands/rancher-api-commands.ts | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index 41ddfc6a86e..20caeb8a88e 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -303,7 +303,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi beforeEach(() => { stdProjectName = `standard-user-project${ +new Date() }`; stdNsName = `standard-user-ns${ +new Date() }`; - stdUsername = `standard-user-${ +new Date() }`; + stdUsername = `standard-user`; const password = Cypress.env('password'); // log in as admin @@ -327,9 +327,8 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi clusterId: 'local', projectName: stdProjectName, role: 'project-owner' }, password - }).as('createUserRequest').then(() => { - cy.wait(2000); // TEST - + }).as('createUserRequest').then((resp) => { + stdUsername = resp.body.name; // log in as new standard user cy.login(stdUsername, password, false); diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index e3e66a94dcb..4868f3a3a72 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -113,6 +113,10 @@ Cypress.Commands.add('createUser', (params: CreateUserParams) => { return cy.setProjectRoleBinding(clusterId, userPrincipalId, projectName, role); } + }) + .then(() => { + // return response of original user + return resp; }); } } From 667d7586e08be93472ebddb5671c96e2cd3e85ee Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 09:52:37 +0000 Subject: [PATCH 12/35] fixes --- cypress/e2e/po/components/header.po.ts | 7 ++++++- .../pages/explorer/dashboard/cluster-dashboard.spec.ts | 8 +++++--- cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts | 1 + .../service-discovery/horizontal-pod-autoscalers.spec.ts | 8 ++++---- cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts | 1 + cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts | 1 + cypress/e2e/tests/pages/users-and-auth/roles.spec.ts | 4 +++- cypress/e2e/tests/pages/users-and-auth/users.spec.ts | 2 +- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/cypress/e2e/po/components/header.po.ts b/cypress/e2e/po/components/header.po.ts index 6bebe15c3ff..d3a43e1a262 100644 --- a/cypress/e2e/po/components/header.po.ts +++ b/cypress/e2e/po/components/header.po.ts @@ -1,13 +1,18 @@ import ComponentPo from '@/cypress/e2e/po/components/component.po'; import { WorkspaceSwitcherPo } from '@/cypress/e2e/po/components/workspace-switcher.po'; import { ImportYamlPo } from '@/cypress/e2e/po/components/import-yaml.po'; -import Kubectl from '~/cypress/e2e/po/components/kubectl.po'; +import Kubectl from '@/cypress/e2e/po/components/kubectl.po'; +import { NamespaceFilterPo } from '@/cypress/e2e/po/components/namespace-filter.po'; export class HeaderPo extends ComponentPo { constructor() { super('[data-testid="header"]'); } + projectNamespaceFilter() { + return new NamespaceFilterPo(); + } + selectWorkspace(name: string) { const wsFilter = new WorkspaceSwitcherPo(); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index 20caeb8a88e..c61b5ecac94 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -327,7 +327,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi clusterId: 'local', projectName: stdProjectName, role: 'project-owner' }, password - }).as('createUserRequest').then((resp) => { + }).then((resp) => { stdUsername = resp.body.name; // log in as new standard user cy.login(stdUsername, password, false); @@ -335,7 +335,9 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi // go to cluster dashboard ClusterDashboardPagePo.navTo(); clusterDashboard.waitForPage(); - }); + + return resp; + }).as('createUserRequest'); }); }); }); @@ -355,7 +357,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi cy.login(); cy.deleteRancherResource('v1', 'namespaces', stdNsName); - cy.get('@standardUserProject').then((projectId) => { + cy.get('@standardUserProject').then((projectId) => { cy.deleteRancherResource('v3', 'projects', projectId); }); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index c10d15cea4b..a73e9bbb287 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -160,6 +160,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, events.sortableTable().tableHeaderRow().checkSortOrder(11, 'down'); // event name should be visible on first page (sorted in ASC order) + events.sortableTable().tableHeaderRow().self().scrollIntoView(); events.sortableTable().rowElementWithPartialName(uniquePod).scrollIntoView().should('be.visible'); // sort by name in DESC order diff --git a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts index a24e4939622..85898a73f88 100644 --- a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts +++ b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts @@ -9,16 +9,16 @@ describe('HorizontalPodAutoscalers', { testIsolation: 'off', tags: ['@explorer', }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - before('set up', () => { - cy.updateNamespaceFilter('local', 'none', '{\"local\":[]}'); - }); - it('validate HorizontalPodAutoscalers table in empty state', () => { horizontalPodAutoScalersNoData(); horizontalPodAutoscalersPage.goTo(); horizontalPodAutoscalersPage.waitForPage(); cy.wait('@horizontalpodautoscalerNoData'); + horizontalPodAutoscalersPage.header().projectNamespaceFilter().toggle(); + horizontalPodAutoscalersPage.header().projectNamespaceFilter().clickOptionByLabel('All Namespaces'); + horizontalPodAutoscalersPage.header().projectNamespaceFilter().isChecked('All Namespaces'); + const expectedHeaders = ['State', 'Name', 'Workload', 'Minimum Replicas', 'Maximum Replicas', 'Current Replicas', 'Age']; horizontalPodAutoscalersPage.list().resourceTable().sortableTable().tableHeaderRow() diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 7ac7eafb00f..f2773f0d00c 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -142,6 +142,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( workloadsPodPage.sortableTable().tableHeaderRow().checkSortOrder(2, 'down'); // pod name should be visible on first page (sorted in ASC order) + workloadsPodPage.sortableTable().tableHeaderRow().self().scrollIntoView(); workloadsPodPage.sortableTable().rowElementWithName(podNamesList[0]).scrollIntoView().should('be.visible'); // sort by name in DESC order diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index 8660e934b19..01ff58ba797 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -196,6 +196,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, fleetWorkspacesPage.sortableTable().tableHeaderRow().checkSortOrder(2, 'down'); // workspace name should be visible on first page (sorted in ASC order) + fleetWorkspacesPage.sortableTable().tableHeaderRow().self().scrollIntoView(); fleetWorkspacesPage.sortableTable().rowElementWithName(uniqueWorkspaceName).scrollIntoView().should('be.visible'); // navigate to last page diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index 8fbf476550c..e428e85b4ed 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -297,7 +297,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { cy.createGlobalRole(uniqueRoleName, ['events.k8s.io'], [], ['events'], ['get'], false, true, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const roleId = resp.body.id; - uniqueRoleName = resp.body.metadata.name; + uniqueRoleName = resp.body.name; globalRolesIdsList.push(roleId); }); @@ -335,6 +335,8 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { roles.waitForPage(); // check table is sorted by name in ASC order by default + rolesList.resourceTable().sortableTable().tableHeaderRow().self() + .scrollIntoView(); rolesList.resourceTable().sortableTable().tableHeaderRow() .checkSortOrder(3, 'down'); diff --git a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts index 3cb2b8052b3..887bcbd8e57 100644 --- a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts @@ -295,7 +295,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { cy.createUser({ username: uniqueUserName }).then((resp: Cypress.Response) => { const userId = resp.body.id; - uniqueUserName = resp.body.metadata.name; + uniqueUserName = resp.body.name; userIdsList.push(userId); }); }); From 6369319e8c5bf3a8e05e566e02dd687c08a0134a Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 10:54:43 +0000 Subject: [PATCH 13/35] fixes --- .../e2e/po/components/sortable-table.po.ts | 6 +++++ .../dashboard/cluster-dashboard.spec.ts | 27 ++++++++++--------- .../pages/explorer/dashboard/events.spec.ts | 3 ++- .../pages/explorer2/workloads/pods.spec.ts | 3 ++- .../pages/fleet/advanced/workspaces.spec.ts | 3 ++- .../tests/pages/users-and-auth/roles.spec.ts | 3 ++- .../tests/pages/users-and-auth/users.spec.ts | 2 +- 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/cypress/e2e/po/components/sortable-table.po.ts b/cypress/e2e/po/components/sortable-table.po.ts index 39412587d89..5e76ba836bd 100644 --- a/cypress/e2e/po/components/sortable-table.po.ts +++ b/cypress/e2e/po/components/sortable-table.po.ts @@ -7,6 +7,12 @@ import PaginationPo from '@/cypress/e2e/po/components/pagination.po'; import HeaderRowPo from '@/cypress/e2e/po/components/header-row.po'; export default class SortableTablePo extends ComponentPo { + /** + * Create a name that should, when sorted by name, by default appear first + */ + static firstByDefaultName(context = 'resource'): string { + return `11111-first-in-list-unique-${ context }`; + } // // sortable-table-header // diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index c61b5ecac94..81657e6e5a4 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -312,11 +312,11 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi const adminUserId = resp.body.data[0].id.trim(); // create project - cy.createProject(stdProjectName, 'local', adminUserId).then((resp: Cypress.Response) => { + return cy.createProject(stdProjectName, 'local', adminUserId).then((resp: Cypress.Response) => { cy.wrap(resp.body.id.trim()).as('standardUserProject'); // create ns in project - cy.get('@standardUserProject').then((projId) => { + return cy.get('@standardUserProject').then((projId) => { cy.createNamespaceInProject(stdNsName, projId); // create std user and assign to project @@ -327,17 +327,20 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi clusterId: 'local', projectName: stdProjectName, role: 'project-owner' }, password - }).then((resp) => { - stdUsername = resp.body.name; - // log in as new standard user - cy.login(stdUsername, password, false); + }) + .as('createUserRequest') + .then((resp) => { + stdUsername = resp.body.username; + cy.log('!!!!!', JSON.stringify(resp.body), password); - // go to cluster dashboard - ClusterDashboardPagePo.navTo(); - clusterDashboard.waitForPage(); + // log in as new standard user + cy.login(stdUsername, password, false); - return resp; - }).as('createUserRequest'); + // go to cluster dashboard + ClusterDashboardPagePo.navTo(); + + return clusterDashboard.waitForPage(); + }); }); }); }); @@ -362,7 +365,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi }); cy.get('@createUserRequest').then((req) => { - const userId = req.body.userPrincipalId.split('//').pop(); + const userId = req.body.id; cy.deleteRancherResource('v3', 'users', userId); }); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index a73e9bbb287..6eee2581396 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -2,6 +2,7 @@ import ClusterDashboardPagePo from '@/cypress/e2e/po/pages/explorer/cluster-dash import { EventsPagePo } from '@/cypress/e2e/po/pages/explorer/events.po'; import { generateEventsDataSmall } from '@/cypress/e2e/blueprints/explorer/cluster/events'; import LoadingPo from '@/cypress/e2e/po/components/loading.po'; +import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; const clusterDashboard = new ClusterDashboardPagePo('local'); const events = new EventsPagePo('local'); @@ -12,7 +13,7 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - let uniquePod = 'a-unique-test-name'; + let uniquePod = SortableTablePo.firstByDefaultName('pod'); const podNamesList = []; let nsName1: string; let nsName2: string; diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index f2773f0d00c..85c154db76b 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -4,6 +4,7 @@ import PodPo from '@/cypress/e2e/po/components/workloads/pod.po'; import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; import HomePagePo from '@/cypress/e2e/po/pages/home.po'; import { generatePodsDataSmall } from '@/cypress/e2e/blueprints/explorer/workloads/pods/pods-get'; +import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, () => { const workloadsPodPage = new WorkloadsPodsListPagePo('local'); @@ -13,7 +14,7 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { - let uniquePod = 'a-unique-test-name'; + let uniquePod = SortableTablePo.firstByDefaultName('pod'); const podNamesList = []; let nsName1: string; let nsName2: string; diff --git a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts index 01ff58ba797..d74342d9722 100644 --- a/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts +++ b/cypress/e2e/tests/pages/fleet/advanced/workspaces.spec.ts @@ -2,6 +2,7 @@ import { FleetWorkspaceListPagePo } from '@/cypress/e2e/po/pages/fleet/fleet.cat import FleetWorkspaceDetailsPo from '@/cypress/e2e/po/detail/fleet/fleet.cattle.io.fleetworkspace.po'; import { generateFleetWorkspacesDataSmall } from '@/cypress/e2e/blueprints/fleet/workspaces-get'; import HomePagePo from '~/cypress/e2e/po/pages/home.po'; +import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; const defaultWorkspace = 'fleet-default'; const workspaceNameList = []; @@ -70,7 +71,7 @@ describe('Workspaces', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, }); }); - let uniqueWorkspaceName = 'a-unique-test-name'; + let uniqueWorkspaceName = SortableTablePo.firstByDefaultName('workspace'); before('set up', () => { cy.getRancherResource('v1', 'management.cattle.io.fleetworkspaces').then((resp: Cypress.Response) => { diff --git a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts index e428e85b4ed..e0e99abe59a 100644 --- a/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/roles.spec.ts @@ -7,6 +7,7 @@ import * as jsyaml from 'js-yaml'; import ProductNavPo from '@/cypress/e2e/po/side-bars/product-side-nav.po'; import { generateGlobalRolesDataSmall } from '@/cypress/e2e/blueprints/roles/global-roles-get'; import { BLANK_CLUSTER } from '@shell/store/store-types.js'; +import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; const roles = new RolesPo(BLANK_CLUSTER); const usersPo = new UsersPo(BLANK_CLUSTER); @@ -266,7 +267,7 @@ describe('Roles Templates', { tags: ['@usersAndAuths', '@adminUser'] }, () => { }); describe('List', { testIsolation: 'off', tags: ['@vai', '@adminUser'] }, () => { - let uniqueRoleName = 'a-unique-test-name'; + let uniqueRoleName = SortableTablePo.firstByDefaultName('role'); const globalRolesIdsList = []; const rolesList = roles.list('GLOBAL'); const paginatedRoleTab = roles.paginatedTab('GLOBAL'); diff --git a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts index 887bcbd8e57..c54e00f3c26 100644 --- a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts @@ -295,7 +295,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { cy.createUser({ username: uniqueUserName }).then((resp: Cypress.Response) => { const userId = resp.body.id; - uniqueUserName = resp.body.name; + uniqueUserName = resp.body.username; userIdsList.push(userId); }); }); From 066979e7715a5928c4636335956b50185f93d49b Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 11:58:33 +0000 Subject: [PATCH 14/35] fixes --- cypress/e2e/po/components/header.po.ts | 7 +++++++ .../tests/navigation/side-nav/main-side-menu.spec.ts | 2 ++ .../pages/explorer/dashboard/cluster-dashboard.spec.ts | 5 ++--- .../horizontal-pod-autoscalers.spec.ts | 9 ++++++--- cypress/e2e/tests/pages/users-and-auth/users.spec.ts | 10 ++++++++-- cypress/globals.d.ts | 2 +- cypress/support/commands/rancher-api-commands.ts | 4 ++-- 7 files changed, 28 insertions(+), 11 deletions(-) diff --git a/cypress/e2e/po/components/header.po.ts b/cypress/e2e/po/components/header.po.ts index d3a43e1a262..1915f0e4d7c 100644 --- a/cypress/e2e/po/components/header.po.ts +++ b/cypress/e2e/po/components/header.po.ts @@ -13,6 +13,13 @@ export class HeaderPo extends ComponentPo { return new NamespaceFilterPo(); } + selectNamespaceFilterOption(singleOption: string) { + this.projectNamespaceFilter().toggle(); + this.projectNamespaceFilter().clickOptionByLabel(singleOption); + this.projectNamespaceFilter().isChecked(singleOption); + this.projectNamespaceFilter().toggle(); + } + selectWorkspace(name: string) { const wsFilter = new WorkspaceSwitcherPo(); diff --git a/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts b/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts index 54649c0dd78..6334e82a524 100644 --- a/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts +++ b/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts @@ -123,6 +123,8 @@ describe('Side Menu: main', () => { it('Should show tooltip on mouse-hover when the menu is collapsed', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { const burgerMenuPo = new BurgerMenuPo(); + // Flake: Pinned and unpinned above succeeds (not pinned), but when we refresh page cluster is pinned (so not in `clusters()`) + // This bad state can result in lots of tests being broken (cannot navigate to local cluster) burgerMenuPo.clusters().first().trigger('mouseover'); BurgerMenuPo.checkIconTooltipOff(); BurgerMenuPo.toggle(); diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index 81657e6e5a4..e7c8a51af48 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -32,8 +32,6 @@ const simpleBox = new SimpleBoxPo(); const header = new HeaderPo(); describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, () => { - let podName = `e2e-test`; - before(() => { cy.login(); }); @@ -216,6 +214,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi }); let removePod = false; + let podName = `e2e-test`; const projName = `project${ +new Date() }`; const nsName = `namespace${ +new Date() }`; @@ -374,7 +373,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi after(function() { if (removePod) { - cy.deleteRancherResource('v1', `pods/${ nsName }`, `pod-${ podName }`); + cy.deleteRancherResource('v1', `pods/${ nsName }`, `${ podName }`); cy.deleteRancherResource('v1', 'namespaces', `${ nsName }`); cy.deleteRancherResource('v3', 'projects', this.projId); } diff --git a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts index 85898a73f88..142fe423c0e 100644 --- a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts +++ b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts @@ -15,9 +15,8 @@ describe('HorizontalPodAutoscalers', { testIsolation: 'off', tags: ['@explorer', horizontalPodAutoscalersPage.waitForPage(); cy.wait('@horizontalpodautoscalerNoData'); - horizontalPodAutoscalersPage.header().projectNamespaceFilter().toggle(); - horizontalPodAutoscalersPage.header().projectNamespaceFilter().clickOptionByLabel('All Namespaces'); - horizontalPodAutoscalersPage.header().projectNamespaceFilter().isChecked('All Namespaces'); + // Flake: Doing this in one place via api in a before block somehow doesn't stick + horizontalPodAutoscalersPage.header().selectNamespaceFilterOption('All Namespaces'); const expectedHeaders = ['State', 'Name', 'Workload', 'Minimum Replicas', 'Maximum Replicas', 'Current Replicas', 'Age']; @@ -36,6 +35,8 @@ describe('HorizontalPodAutoscalers', { testIsolation: 'off', tags: ['@explorer', horizontalPodAutoscalersPage.waitForPage(); cy.wait('@horizontalpodautoscalerDataSmall'); + horizontalPodAutoscalersPage.header().selectNamespaceFilterOption('All Namespaces'); + // check table headers are visible const expectedHeaders = ['State', 'Name', 'Workload', 'Minimum Replicas', 'Maximum Replicas', 'Current Replicas', 'Age']; @@ -57,6 +58,8 @@ describe('HorizontalPodAutoscalers', { testIsolation: 'off', tags: ['@explorer', horizontalPodAutoscalersPage.waitForPage(); cy.wait('@horizontalpodautoscalerDataSmall'); + horizontalPodAutoscalersPage.header().selectNamespaceFilterOption('All Namespaces'); + // group by namespace horizontalPodAutoscalersPage.list().resourceTable().sortableTable().groupByButtons(1) .click(); diff --git a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts index c54e00f3c26..10961998e21 100644 --- a/cypress/e2e/tests/pages/users-and-auth/users.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/users.spec.ts @@ -5,6 +5,7 @@ import * as jsyaml from 'js-yaml'; import * as path from 'path'; import { generateUsersDataSmall } from '@/cypress/e2e/blueprints/users/users-get'; import BurgerMenuPo from '@/cypress/e2e/po/side-bars/burger-side-menu.po'; +import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; const usersPo = new UsersPo('_'); const userCreate = usersPo.createEdit(); @@ -265,7 +266,8 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { }); describe('List', { testIsolation: 'off', tags: ['@vai', '@adminUser'] }, () => { - let uniqueUserName = 'aaa-e2e-test-name'; + let uniqueUserName = SortableTablePo.firstByDefaultName('user'); + const userIdsList = []; let initialCount; @@ -292,7 +294,7 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { } // create one more for sorting test - cy.createUser({ username: uniqueUserName }).then((resp: Cypress.Response) => { + cy.createUser({ username: uniqueUserName }, { createNameOptions: { prefixContext: true } }).then((resp: Cypress.Response) => { const userId = resp.body.id; uniqueUserName = resp.body.username; @@ -441,7 +443,11 @@ describe('Users', { tags: ['@usersAndAuths', '@adminUser'] }, () => { .checkSortOrder(3, 'down'); // user name should be visible on first page (sorted in ASC order) + usersPo.list().resourceTable().sortableTable().tableHeaderRow() + .self() + .scrollIntoView(); usersPo.list().resourceTable().sortableTable().rowElementWithName(uniqueUserName) + .scrollIntoView() .should('be.visible'); // navigate to last page diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 9e0fdcd7b2e..79f57655fd8 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -73,7 +73,7 @@ declare global { getRootE2EResourceName(): Chainable; createE2EResourceName(context: string, options?: CreateResourceNameOptions): Chainable; - createUser(params: CreateUserParams): Chainable; + createUser(params: CreateUserParams, options?: { createNameOptions?: CreateResourceNameOptions }): Chainable; setGlobalRoleBinding(userId: string, role: string): Chainable; setClusterRoleBinding(clusterId: string, userPrincipalId: string, role: string): Chainable; setProjectRoleBinding(clusterId: string, userPrincipalId: string, projectName: string, role: string): Chainable; diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 4868f3a3a72..3939ff8aebe 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -64,12 +64,12 @@ Cypress.Commands.add('login', ( /** * Create user via api request */ -Cypress.Commands.add('createUser', (params: CreateUserParams) => { +Cypress.Commands.add('createUser', (params: CreateUserParams, options = { }) => { const { username, globalRole, clusterRole, projectRole, password } = params; - return cy.createE2EResourceName(username) + return cy.createE2EResourceName(username, options?.createNameOptions) .then((e2eName) => { return cy.request({ method: 'POST', From f4db933fb543e52da90562308c1786cff57a2a19 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 14:28:43 +0000 Subject: [PATCH 15/35] Make up for userpreference lag by waiting for desired value --- .../dashboard/cluster-dashboard.spec.ts | 1 - cypress/globals.d.ts | 1 + .../support/commands/rancher-api-commands.ts | 56 ++++++++++++++++++- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index e7c8a51af48..ebd1f22da13 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -330,7 +330,6 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi .as('createUserRequest') .then((resp) => { stdUsername = resp.body.username; - cy.log('!!!!!', JSON.stringify(resp.body), password); // log in as new standard user cy.login(stdUsername, password, false); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 79f57655fd8..a11189d2691 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -93,6 +93,7 @@ declare global { getRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId?: string, expectedStatusCode?: number): Chainable; setRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, body: any): Chainable; createRancherResource(prefix: 'v3' | 'v1', resourceType: string, body: any): Chainable; + waitForRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, testFn: (resp: any) => boolean): Chainable; waitForRancherResources(prefix: 'v3' | 'v1', resourceType: string, expectedResourcesTotal: number): Chainable; deleteRancherResource(prefix: 'v3' | 'v1' | 'k8s', resourceType: string, resourceId: string, failOnStatusCode?: boolean): Chainable; deleteNodeTemplate(nodeTemplateId: string, timeout?: number, failOnStatusCode?: boolean) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 3939ff8aebe..9f4b56381a9 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -500,6 +500,35 @@ Cypress.Commands.add('createRancherResource', (prefix, resourceType, body) => { }); }); +Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId, testFn) => { + const url = `${ Cypress.env('api') }/${ prefix }/${ resourceType }/${ resourceId }`; + let retries = 20; + + const retry = () => { + cy.request({ + method: 'GET', + url, + headers: { + 'x-api-csrf': token.value, + Accept: 'application/json' + }, + }) + .then((resp) => { + if (!testFn(resp)) { + retries = retries - 1; + if (retries === 0) { + return Promise.reject(`Failed wait for expected value for ${ url }`); + } + cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting + + return retry(); + } + }); + }; + + return retry(); +}); + Cypress.Commands.add('waitForRancherResources', (prefix, resourceType, expectedResourcesTotal) => { const url = `${ Cypress.env('api') }/${ prefix }/${ resourceType }`; let retries = 20; @@ -823,7 +852,32 @@ Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:stri return cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { const userId = resp.body.data[0].id.trim(); - cy.setRancherResource('v1', 'userpreferences', userId, groupByPayload(userId, clusterName, groupBy, namespaceFilter)); + const payload = groupByPayload(userId, clusterName, groupBy, namespaceFilter); + + cy.setRancherResource('v1', 'userpreferences', userId, payload); + + cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => { + const compare = (core, subset) => { + const entries = Object.entries(subset); + + for (let i = 0; i < entries.length; i++) { + const [key, subsetValue] = entries[i]; + const coreValue = core[key]; + + if (typeof subsetValue === 'object') { + if (!compare(coreValue, subsetValue)) { + return false; + } + } else if (subsetValue !== coreValue) { + return false; + } + } + + return true; + }; + + return compare(resp?.body, payload); + }); }); }); From 9aaaabb02c8f78454355714329b9910d46065821 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 14:30:06 +0000 Subject: [PATCH 16/35] Dont include junk revision in mock resources - causes MASSSIVE socket spam if the rancher revision exceeds it --- .../machine-deployments-edit.yml | 1 - .../cluster_management/machine-sets-edit.yml | 1 - .../cluster_management/machines-edit.yml | 1 - .../pod-security-admissions-payload.ts | 12 +- .../e2e/blueprints/explorer/cluster/events.ts | 27 ++- .../explorer/core/service-accounts-get.ts | 11 +- .../blueprints/explorer/fleet/contents-get.ts | 20 +- .../api/custom-resource-definition-get.ts | 12 +- .../rbac/cluster-role-bindings-get.ts | 8 +- .../explorer/rbac/cluster-roles-get.ts | 14 +- .../explorer/rbac/role-bindings-get.ts | 11 +- .../e2e/blueprints/explorer/rbac/roles-get.ts | 15 +- .../storage/persistent-volume-claims-get.ts | 3 - .../storage/persistent-volumes-get.ts | 3 - .../explorer/storage/storage-classes-get.ts | 3 - .../deployments/deployment-create.ts | 3 +- .../workloads/deployments/deployment-get.ts | 3 +- .../workloads/deployments/deplyment-list.ts | 41 ++-- .../explorer/workloads/pods/pods-get.ts | 9 +- .../horizontal-pod-autoscalers-get.ts | 3 - .../service-discovery/ingresses-get.ts | 16 +- .../service-discovery/services-get.ts | 17 +- .../fleet/cluster-registration-tokens-get.ts | 5 +- .../e2e/blueprints/fleet/workspaces-get.ts | 7 +- .../global_settings/home-links-response.ts | 14 +- ...tal-ocean-cluster-provisioning-response.ts | 4 +- .../manager/machine-pool-config-response.ts | 3 +- cypress/e2e/blueprints/nav/edit-cluster.ts | 28 ++- cypress/e2e/blueprints/nav/fake-cluster.ts | 66 +++---- .../other-products/opa-gatekeeper.js | 25 +-- .../other-products/v2-monitoring.js | 176 +++++++----------- .../e2e/blueprints/roles/global-roles-get.ts | 6 +- .../explorer/dashboard/certificates.spec.ts | 9 +- .../e2e/tests/pages/manager/mock-responses.ts | 3 +- 34 files changed, 207 insertions(+), 373 deletions(-) diff --git a/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml index 45a107e2f3a..550edf51b52 100644 --- a/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml @@ -24,7 +24,6 @@ metadata: time: '2023-12-07T18:14:50Z' name: e2e-machinedeployment-name-1701972886077 namespace: default - resourceVersion: '22851' uid: f5bf052d-7bbf-483a-a20a-b2f6e48d1e15 spec: clusterName: local diff --git a/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml index c38d55c00b5..e3014679c57 100644 --- a/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml @@ -25,7 +25,6 @@ metadata: time: '2023-12-06T23:46:28Z' name: e2e-machine-name-1701906098950 namespace: default - resourceVersion: '647485' uid: 98380f64-0706-4522-8dc2-b91a7f012dcf spec: clusterName: local diff --git a/cypress/e2e/blueprints/cluster_management/machines-edit.yml b/cypress/e2e/blueprints/cluster_management/machines-edit.yml index 5b8289e504e..be4fc9aa762 100644 --- a/cypress/e2e/blueprints/cluster_management/machines-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machines-edit.yml @@ -21,7 +21,6 @@ metadata: time: '2023-12-06T22:21:54Z' name: e2e-machine-name-1701901308645 namespace: default - resourceVersion: '609444' uid: 7d61939a-b44a-4113-a7d1-9db2eda08811 spec: bootstrap: diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts index d817fce64fc..7cb4eb41bc1 100644 --- a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -10,10 +10,8 @@ export const createPayloadData = { usernames: ['admin', 'user'], runtimeClasses: ['myclass1', 'myclass2'], namespaces: ['ingress-nginx', 'kube-system'] } }, - kind: 'PodSecurityAdmissionConfigurationTemplate', - metadata: { - fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: '831667' - }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465' }, description: 'e2e-pod-security-admission-1705617529465-description' }; @@ -29,9 +27,7 @@ export const updatePayloadData = { usernames: ['admin1', 'user1'], runtimeClasses: ['myclass3', 'myclass4'], namespaces: ['cattle-system', 'cattle-epinio-system'] } }, - kind: 'PodSecurityAdmissionConfigurationTemplate', - metadata: { - fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: '938739' - }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961' }, description: 'e2e-pod-security-admission-1705628550961-description-edit' }; diff --git a/cypress/e2e/blueprints/explorer/cluster/events.ts b/cypress/e2e/blueprints/explorer/cluster/events.ts index 32e7cf41688..ebdf3a750f7 100644 --- a/cypress/e2e/blueprints/explorer/cluster/events.ts +++ b/cypress/e2e/blueprints/explorer/cluster/events.ts @@ -37,11 +37,10 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - resourceVersion: '0', - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -68,11 +67,10 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - resourceVersion: '0', - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -99,11 +97,10 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - resourceVersion: '0', - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts index b6009faf76c..12f7b52514e 100644 --- a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts +++ b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts @@ -5,7 +5,6 @@ const serviceAccGetResponseEmpty = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: '129651', count: 0, data: [] }; @@ -17,7 +16,6 @@ const serviceAcctResponseSmallSet = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: '129651', count: 3, data: [ { @@ -55,8 +53,7 @@ const serviceAcctResponseSmallSet = { state: 'succeeded' } ], - resourceVersion: '7124', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -104,8 +101,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '9344', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -165,8 +161,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '9342', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts index cc478e1acdf..2d7dfe30a51 100644 --- a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts +++ b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts @@ -5,7 +5,6 @@ const fleetContentsGetResponseEmpty = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const fleetContentsResponseSmallSet = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: '123', count: 2, data: [ { @@ -38,11 +36,10 @@ const fleetContentsResponseSmallSet = { 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', '27h' ], - generation: 1, - name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', - relationships: null, - resourceVersion: '4380255', - state: { + generation: 1, + name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -70,11 +67,10 @@ const fleetContentsResponseSmallSet = { 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', '9d' ], - generation: 1, - name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', - relationships: null, - resourceVersion: '8041', - state: { + generation: 1, + name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts index 37ce83b7b69..1fb3c6f50d5 100644 --- a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts +++ b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts @@ -25,11 +25,10 @@ const crdsGetResponseSmallSet = { 'users.management.cattle.io', '2024-06-27T20:32:20Z' ], - generation: 1, - name: 'users.management.cattle.io', - relationships: null, - resourceVersion: '4473', - state: { + generation: 1, + name: 'users.management.cattle.io', + relationships: null, + state: { error: false, message: 'CRD is established', name: 'active', @@ -129,8 +128,7 @@ const crdsGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '1417', - state: { + state: { error: false, message: 'CRD is established', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts index b00ce702991..7369fef70be 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts @@ -5,7 +5,6 @@ const clusterRoleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const clusterRoleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: '123', count: 2, data: [ { @@ -58,8 +56,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '434584', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -118,8 +115,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '5149', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts index 8067016d05a..977809658f8 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts @@ -5,7 +5,6 @@ const clusterRolesGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const clusterRolesResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: '123', count: 2, data: [ { @@ -46,11 +44,10 @@ const clusterRolesResponseSmallSet = { finalizers: [ 'wrangler.cattle.io/auth-prov-v2-crole' ], - labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, - name: 'admin', - relationships: null, - resourceVersion: '4878', - state: { + labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, + name: 'admin', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -94,8 +91,7 @@ const clusterRolesResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '4838', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts index 0be3c32a317..096362ed1c5 100644 --- a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts @@ -5,7 +5,6 @@ const roleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const roleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: '123', count: 3, data: [ { @@ -66,8 +64,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '445143', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -134,8 +131,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '4386433', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -203,8 +199,7 @@ const roleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '5141', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index 8e938f3d15f..c601640440e 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -16,7 +16,6 @@ const rolesResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.role': 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.role', - revision: '123', count: 2, data: [ { @@ -54,8 +53,7 @@ const rolesResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '6958', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -109,12 +107,11 @@ const rolesResponseSmallSet = { finalizers: [ 'wrangler.cattle.io/auth-prov-v2-role' ], - labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, - name: 'extension-apiserver-authentication-reader', - namespace: 'kube-system', - relationships: null, - resourceVersion: '4825', - state: { + labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, + name: 'extension-apiserver-authentication-reader', + namespace: 'kube-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index 1bae8831412..fc9ab398a24 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -5,7 +5,6 @@ const persistentvolumeclaimsGetResponseEmpty = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const persistentvolumeclaimsResponseSmallSet = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: '123', count: 1, data: [{ id: 'cattle-system/test', @@ -34,7 +32,6 @@ const persistentvolumeclaimsResponseSmallSet = { name: 'test', namespace: 'cattle-system', relationships: null, - resourceVersion: '3952990', state: { error: false, message: '', name: 'pending', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts index 8e6e7006c18..4335711fbc5 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts @@ -5,7 +5,6 @@ const persistentvolumesGetResponseEmpty = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const persistentvolumesResponseSmallSet = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: '123', count: 1, data: [{ id: 'test', @@ -36,7 +34,6 @@ const persistentvolumesResponseSmallSet = { finalizers: ['kubernetes.io/pv-protection'], name: 'test', relationships: null, - resourceVersion: '3940365', state: { error: false, message: '', name: 'available', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts index b713209f68d..20d4f6cd9c4 100644 --- a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts @@ -5,7 +5,6 @@ const pstorageclassesGetResponseEmpty = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const storageclassesResponseSmallSet = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: '123', count: 1, data: [{ id: 'test', @@ -33,7 +31,6 @@ const storageclassesResponseSmallSet = { fields: ['test', 'kubernetes.io/aws-ebs', 'Delete', 'Immediate', false, '7m47s'], name: 'test', relationships: null, - resourceVersion: '3958373', state: { error: false, message: 'Resource is current', name: 'active', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts index 3d34689b7a7..06cd1b6ed7c 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts @@ -209,8 +209,7 @@ export const deploymentCreateResponse = { rel: 'uses' } ], - resourceVersion: '12999795', - state: { + state: { error: false, message: 'replicas: 0/1', name: 'in-progress', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts index 5518fe4f76e..896387a64f1 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts @@ -154,8 +154,7 @@ export const deploymentGetResponse = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12999825', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts index 2ad01e3b301..9892d24fdd7 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts @@ -4,7 +4,6 @@ export const deploymentCollection = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: '12999812', count: 15, data: [ @@ -164,8 +163,7 @@ export const deploymentCollection = { transitioning: true } ], - resourceVersion: '12999806', - state: { + state: { error: false, message: 'Deployment does not have minimum availability.', name: 'updating', @@ -255,7 +253,6 @@ export const deploymentCollectionResponseFull = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: '12999812', count: 15, data: [ { @@ -454,8 +451,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '6109', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -805,8 +801,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '3067', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -1112,8 +1107,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '3089', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -1391,8 +1385,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787692', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -2064,8 +2057,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787803', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -2703,8 +2695,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787731', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3085,8 +3076,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12995749', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3515,8 +3505,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787962', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3950,8 +3939,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '663180', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -4295,8 +4283,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12900726', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -4560,8 +4547,7 @@ export const deploymentCollectionResponseFull = { transitioning: true } ], - resourceVersion: '12999806', - state: { + state: { error: false, message: 'Deployment does not have minimum availability.', name: 'updating', @@ -4950,8 +4936,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '1377', - state: { + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts index d7c4eb30cd5..df3fe171484 100644 --- a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts @@ -49,8 +49,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541786', - state: { + state: { error: false, message: '', name: 'running', @@ -248,8 +247,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541885', - state: { + state: { error: false, message: '', name: 'running', @@ -447,8 +445,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541968', - state: { + state: { error: false, message: '', name: 'running', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts index 1dda9af3597..e564e85119b 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts @@ -5,7 +5,6 @@ const horizontalpodautoscalerGetResponseEmpty = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const horizontalpodautoscalerGetResponseSmallSet = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: '123', count: 1, data: [ { @@ -35,7 +33,6 @@ const horizontalpodautoscalerGetResponseSmallSet = { name: 'test', namespace: 'cattle-system', relationships: null, - resourceVersion: '3839186', state: { error: true, message: 'the HPA was unable to compute the replica count: failed to get cpu utilization: missing request for cpu in container rancher of Pod rancher-6f5f99c7db-f8f86', name: 'pending', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts index 6b81f17cdf1..36cdc9a661b 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts @@ -5,7 +5,6 @@ const ingressesGetReponseEmpty = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const ingressesGetResponseSmallSet = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: '123', count: 2, data: [ { @@ -67,8 +65,7 @@ const ingressesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '4941', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -136,12 +133,11 @@ const ingressesGetResponseSmallSet = { '80', '26s' ], - generation: 1, - name: 'test', - namespace: 'default', - relationships: null, - resourceVersion: '5040682', - state: { + generation: 1, + name: 'test', + namespace: 'default', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts index e80930b2c8f..cb719e41a69 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts @@ -5,7 +5,6 @@ const servicesGetReponseEmpty = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: '80155', count: 0, data: [] }; @@ -17,7 +16,6 @@ const servicesGetResponseSmallSet = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: '80155', count: 3, data: [ { @@ -76,8 +74,7 @@ const servicesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '4158', - state: { + state: { error: false, message: 'Service is ready', name: 'active', @@ -165,8 +162,7 @@ const servicesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '8539', - state: { + state: { error: false, message: 'Service is ready', name: 'active', @@ -224,11 +220,10 @@ const servicesGetResponseSmallSet = { component: 'apiserver', provider: 'kubernetes' }, - name: 'kubernetes', - namespace: 'default', - relationships: null, - resourceVersion: '224', - state: { + name: 'kubernetes', + namespace: 'default', + relationships: null, + state: { error: false, message: 'Service is ready', name: 'active', diff --git a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts index af8bf4348c6..4775922b21f 100644 --- a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts +++ b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts @@ -5,7 +5,6 @@ const clusterRegistrationTokensGetReponseEmpty = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: '123', count: 0, data: [] }; @@ -17,7 +16,6 @@ const clusterRegistrationTokensGetResponseSmallSet = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: '123', count: 1, data: [ { @@ -84,8 +82,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '396332', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/fleet/workspaces-get.ts b/cypress/e2e/blueprints/fleet/workspaces-get.ts index c6e5fb922b9..c39d43729ff 100644 --- a/cypress/e2e/blueprints/fleet/workspaces-get.ts +++ b/cypress/e2e/blueprints/fleet/workspaces-get.ts @@ -4,7 +4,6 @@ const fleetworkspacesGetResponseSmallSet = { links: { self: 'https://yonasb29h3.qa.rancher.space/v1/management.cattle.io.fleetworkspaces' }, actions: {}, resourceType: 'management.cattle.io.fleetworkspace', - revision: '123', count: 2, data: [ { @@ -34,8 +33,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: '4483', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -81,8 +79,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: '5284', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/global_settings/home-links-response.ts b/cypress/e2e/blueprints/global_settings/home-links-response.ts index 43d1e7132b4..4d0b971bb0e 100644 --- a/cypress/e2e/blueprints/global_settings/home-links-response.ts +++ b/cypress/e2e/blueprints/global_settings/home-links-response.ts @@ -34,10 +34,9 @@ export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:s time: '2024-01-31T19:58:38Z' } ], - name: 'ui-custom-links', - relationships: null, - resourceVersion: '820268', - state: { + name: 'ui-custom-links', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -86,10 +85,9 @@ export function removeCustomLinksResponse():object { time: '2024-01-31T19:58:38Z' } ], - name: 'ui-custom-links', - relationships: null, - resourceVersion: '820268', - state: { + name: 'ui-custom-links', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts index df6a176ac3f..8122e2f1efa 100644 --- a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts +++ b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts @@ -5,7 +5,6 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud createTypes: { 'provisioning.cattle.io.cluster': 'https://localhost:8005/v1/provisioning.cattle.io.clusters' }, actions: {}, resourceType: 'provisioning.cattle.io.cluster', - revision: '9258713', count: 9, data: [ { @@ -145,8 +144,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud message: 'Resource is always ready' } ], - resourceVersion: '9258672', - state: { + state: { error: false, message: 'Resource is Ready', name: 'active', diff --git a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts index 92fa33e7430..1f8e5e0d6cc 100644 --- a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts +++ b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts @@ -62,8 +62,7 @@ export function machinePoolConfigResponse(clusterName:string, machinePoolId:stri message: 'Resource is current' } ], - resourceVersion: '9683918', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/nav/edit-cluster.ts b/cypress/e2e/blueprints/nav/edit-cluster.ts index 49ac529fed3..216e0d1ff3c 100644 --- a/cypress/e2e/blueprints/nav/edit-cluster.ts +++ b/cypress/e2e/blueprints/nav/edit-cluster.ts @@ -44,8 +44,7 @@ export function generateFakeNodeDriversReply():any { message: 'Resource is current' } ], - resourceVersion: '2429', - state: { + state: { error: false, message: '', name: 'active', @@ -244,8 +243,7 @@ export function generateFakeMachineConfigReply(provClusterId:string, machinePool message: 'Resource is current' } ], - resourceVersion: '141967', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -292,12 +290,11 @@ export function generateFakeSecretsReply():any { 2, '9m31s' ], - generateName: 'registryconfig-auth-', - name: 'registryconfig-auth-reg1', - namespace: 'fleet-default', - relationships: null, - resourceVersion: '526944', - state: { + generateName: 'registryconfig-auth-', + name: 'registryconfig-auth-reg1', + namespace: 'fleet-default', + relationships: null, + state: { error: false, message: 'Resource is always ready', name: 'active', @@ -330,12 +327,11 @@ export function generateFakeSecretsReply():any { 2, '9m31s' ], - generateName: 'registryconfig-auth-', - name: 'registryconfig-auth-reg2', - namespace: 'fleet-default', - relationships: null, - resourceVersion: '526944', - state: { + generateName: 'registryconfig-auth-', + name: 'registryconfig-auth-reg2', + namespace: 'fleet-default', + relationships: null, + state: { error: false, message: 'Resource is always ready', name: 'active', diff --git a/cypress/e2e/blueprints/nav/fake-cluster.ts b/cypress/e2e/blueprints/nav/fake-cluster.ts index a40e3dfa3df..5a648abc2aa 100644 --- a/cypress/e2e/blueprints/nav/fake-cluster.ts +++ b/cypress/e2e/blueprints/nav/fake-cluster.ts @@ -159,8 +159,7 @@ function generateProvClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: '7555', - state: { + state: { error: false, message: 'Resource is Ready', name: 'active', @@ -505,8 +504,7 @@ function generateMgmtClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: '8138', - state: { + state: { error: false, message: 'Resource is Ready', name: 'active', @@ -1102,8 +1100,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: '2689', - state: { + state: { error: false, message: '', name: 'active', @@ -1152,10 +1149,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'kubernetes.io/metadata.name': 'cattle-fleet-system', 'objectset.rio.cattle.io/hash': 'f399d0b310fbfb28e9667312fdc7a33954e2b8c8' }, - name: 'cattle-fleet-system', - relationships: null, - resourceVersion: '2965', - state: { + name: 'cattle-fleet-system', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1203,10 +1199,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'cattle-impersonation-system' }, - name: 'cattle-impersonation-system', - relationships: null, - resourceVersion: '2649', - state: { + name: 'cattle-impersonation-system', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1269,8 +1264,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '2683', - state: { + state: { error: false, message: '', name: 'active', @@ -1315,10 +1309,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-rs8ps', 'kubernetes.io/metadata.name': 'default' }, - name: 'default', - relationships: null, - resourceVersion: '2622', - state: { + name: 'default', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1364,10 +1357,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-node-lease' }, - name: 'kube-node-lease', - relationships: null, - resourceVersion: '2631', - state: { + name: 'kube-node-lease', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1413,10 +1405,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-public' }, - name: 'kube-public', - relationships: null, - resourceVersion: '2634', - state: { + name: 'kube-public', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1461,10 +1452,9 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-system' }, - name: 'kube-system', - relationships: null, - resourceVersion: '2711', - state: { + name: 'kube-system', + relationships: null, + state: { error: false, message: '', name: 'active', @@ -1523,8 +1513,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: '2605', - state: { + state: { error: false, message: '', name: 'active', @@ -1583,8 +1572,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { state: 'deployed' } ], - resourceVersion: '2652', - state: { + state: { error: false, message: '', name: 'active', @@ -1693,8 +1681,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '1251', - state: { + state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', name: 'active', @@ -2253,8 +2240,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '2182', - state: { + state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js index 6a06607d392..17b2c44f0d7 100644 --- a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js +++ b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js @@ -778,7 +778,6 @@ const allowedReposGet = { createTypes: { 'constraints.gatekeeper.sh.k8sallowedrepos': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8sallowedrepos' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8sallowedrepos', - revision: '35356', data: [] }; @@ -788,7 +787,6 @@ const requiredLabelsGet = { createTypes: { 'constraints.gatekeeper.sh.k8srequiredlabels': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8srequiredlabels' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8srequiredlabels', - revision: '35356', data: [] }; @@ -798,7 +796,6 @@ const constraintTemplatesGet = { createTypes: { 'templates.gatekeeper.sh.constrainttemplate': 'https://localhost:8005/k8s/clusters/local/v1/templates.gatekeeper.sh.constrainttemplates' }, actions: {}, resourceType: 'templates.gatekeeper.sh.constrainttemplate', - revision: '36243', count: 2, data: [ { @@ -822,12 +819,11 @@ const constraintTemplatesGet = { 'k8sallowedrepos', '36m' ], - generation: 1, - labels: { 'app.kubernetes.io/managed-by': 'Helm' }, - name: 'k8sallowedrepos', - relationships: null, - resourceVersion: '27313', - state: { + generation: 1, + labels: { 'app.kubernetes.io/managed-by': 'Helm' }, + name: 'k8sallowedrepos', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -923,12 +919,11 @@ const constraintTemplatesGet = { 'k8srequiredlabels', '36m' ], - generation: 1, - labels: { 'app.kubernetes.io/managed-by': 'Helm' }, - name: 'k8srequiredlabels', - relationships: null, - resourceVersion: '27315', - state: { + generation: 1, + labels: { 'app.kubernetes.io/managed-by': 'Helm' }, + name: 'k8srequiredlabels', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index ca8a34b5d02..4607db41e91 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -5,7 +5,6 @@ const podMonitorsGet = { createTypes: { 'monitoring.coreos.com.podmonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.podmonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.podmonitor', - revision: '7091', data: [] }; @@ -16,7 +15,6 @@ const serviceMonitorsGet = { createTypes: { 'monitoring.coreos.com.servicemonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.servicemonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.servicemonitor', - revision: '7091', count: 14, data: [ { @@ -99,8 +97,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3944', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -223,8 +220,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3938', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -350,8 +346,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3941', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -485,8 +480,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3945', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -615,8 +609,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3947', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -745,8 +738,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3943', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -881,8 +873,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3950', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -1004,8 +995,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3942', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -1142,8 +1132,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3939', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -1273,8 +1262,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3946', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -1388,11 +1376,10 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-apiserver', - namespace: 'default', - relationships: null, - resourceVersion: '3952', - state: { + name: 'rancher-monitoring-apiserver', + namespace: 'default', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -1524,11 +1511,10 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-coredns', - namespace: 'kube-system', - relationships: null, - resourceVersion: '3940', - state: { + name: 'rancher-monitoring-coredns', + namespace: 'kube-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -1641,11 +1627,10 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-ingress-nginx', - namespace: 'kube-system', - relationships: null, - resourceVersion: '3949', - state: { + name: 'rancher-monitoring-ingress-nginx', + namespace: 'kube-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -1768,11 +1753,10 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-kubelet', - namespace: 'kube-system', - relationships: null, - resourceVersion: '3948', - state: { + name: 'rancher-monitoring-kubelet', + namespace: 'kube-system', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -1929,7 +1913,6 @@ const alertManagerConfigsGet = { createTypes: { 'monitoring.coreos.com.alertmanagerconfig': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.alertmanagerconfigs' }, actions: {}, resourceType: 'monitoring.coreos.com.alertmanagerconfig', - revision: '9702', data: [ { id: 'default/test-alert', @@ -1972,11 +1955,10 @@ const alertManagerConfigsGet = { time: '2024-04-03T13:09:28Z' } ], - name: 'test-alert', - namespace: 'default', - relationships: null, - resourceVersion: '95805', - state: { + name: 'test-alert', + namespace: 'default', + relationships: null, + state: { error: false, message: 'Resource is current', name: 'active', @@ -2188,8 +2170,7 @@ const rancherMonitoringAlertmanagerGet = { message: 'Resource is always ready' } ], - resourceVersion: '4368', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -2343,11 +2324,10 @@ const alertManagerRancherMonitoringAlertmanagerGet = { time: '2024-04-03T09:17:25Z' } ], - name: 'alertmanager-rancher-monitoring-alertmanager', - namespace: 'cattle-monitoring-system', - relationships: null, - resourceVersion: '3573', - state: { + name: 'alertmanager-rancher-monitoring-alertmanager', + namespace: 'cattle-monitoring-system', + relationships: null, + state: { error: false, message: 'Resource is always ready', name: 'active', @@ -2364,7 +2344,6 @@ const prometheusRulesGet = { createTypes: { 'monitoring.coreos.com.prometheusrule': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheusrules' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheusrule', - revision: '11253', count: 27, data: [ { @@ -2449,8 +2428,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3932', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -2638,8 +2616,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3907', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -2750,8 +2727,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3933', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3002,8 +2978,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3912', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3134,8 +3109,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3916', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3308,8 +3282,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3927', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3481,8 +3454,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3922', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3652,8 +3624,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3920', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3769,8 +3740,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3915', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -3930,8 +3900,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3909', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4039,8 +4008,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3910', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4164,8 +4132,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3928', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4309,8 +4276,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3917', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4425,8 +4391,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3931', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4690,8 +4655,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3908', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -4879,8 +4843,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3926', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5035,8 +4998,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3935', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5158,8 +5120,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3925', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5324,8 +5285,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3923', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5436,8 +5396,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3930', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5548,8 +5507,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3929', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -5788,8 +5746,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3919', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6084,8 +6041,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3918', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6229,8 +6185,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3924', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6341,8 +6296,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3921', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6462,8 +6416,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3911', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6794,8 +6747,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3934', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -6900,7 +6852,6 @@ const prometheusesGet = { createTypes: { 'monitoring.coreos.com.prometheus': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheuses' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheus', - revision: '11828', count: 1, data: [ { @@ -7133,8 +7084,7 @@ const prometheusesGet = { state: 'deployed' } ], - resourceVersion: '4515', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/roles/global-roles-get.ts b/cypress/e2e/blueprints/roles/global-roles-get.ts index b0c606f637c..7d41056d838 100644 --- a/cypress/e2e/blueprints/roles/global-roles-get.ts +++ b/cypress/e2e/blueprints/roles/global-roles-get.ts @@ -51,8 +51,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '5497', - state: { + state: { error: false, message: 'Resource is current', name: 'active', @@ -145,8 +144,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '5484', - state: { + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index 47833c56482..d925ab7cd4a 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -28,11 +28,10 @@ const expiredCert = { 2, '11s' ], - name: certName, - namespace: certNs, - relationships: null, - resourceVersion: '17963647', - state: { + name: certName, + namespace: certNs, + relationships: null, + state: { error: false, message: 'Resource is always ready', name: 'active', diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index 6335ee40bbf..d379025f221 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -29,8 +29,7 @@ export function nodeDriveResponse(addCloudCredential: boolean, driver: string): }, { toId: `${ driver }config`, toType: 'management.cattle.io.dynamicschema', rel: 'owner', state: 'active', message: 'Resource is current' }], - resourceVersion: '3117786', - state: { + state: { error: false, message: '', name: 'active', transitioning: false }, uid: 'c4da5a49-ecc5-4d74-88a8-1a991a586adb' From 85df7944ebe9c5278696f478fdced9fe52e22d2f Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 15:26:24 +0000 Subject: [PATCH 17/35] update burger menu, make it clear there's pinned and other cluster lists also comment out .skip, they play HAVOC with test reports --- cypress/e2e/po/pages/chart-repositories.po.ts | 2 +- .../e2e/po/pages/explorer/charts/charts.po.ts | 2 +- .../po/pages/explorer/cluster-dashboard.po.ts | 2 +- .../e2e/po/pages/explorer/config-map.po.ts | 2 +- .../custom-resource-definitions.po.ts | 2 +- .../explorer/horizontal-pod-autoscalers.po.ts | 2 +- cypress/e2e/po/pages/explorer/ingress.po.ts | 2 +- .../po/pages/explorer/network-policy.po.ts | 2 +- .../explorer/persistent-volume-claims.po.ts | 2 +- .../pages/explorer/persistent-volumes.po.ts | 2 +- cypress/e2e/po/pages/explorer/services.po.ts | 2 +- .../po/pages/explorer/storage-classes.po.ts | 2 +- .../po/pages/explorer/workloads-pods.po.ts | 2 +- .../e2e/po/side-bars/burger-side-menu.po.ts | 19 +- .../e2e/tests/navigation/page-actions.spec.ts | 22 +- .../side-nav/main-side-menu.spec.ts | 30 +- .../side-nav/product-side-nav.spec.ts | 2 +- .../dashboard/cluster-dashboard.spec.ts | 14 +- .../pages/explorer2/cluster-tools.spec.ts | 52 +-- .../pages/explorer2/namespace-picker.spec.ts | 64 +-- .../pages/explorer2/project-namespace.spec.ts | 68 +-- .../tests/pages/extensions/extensions.spec.ts | 340 +++++++------- cypress/e2e/tests/pages/fleet/gitrepo.spec.ts | 2 +- .../pages/global-settings/branding.spec.ts | 436 +++++++++--------- .../pages/manager/cluster-manager.spec.ts | 8 +- .../tests/pages/manager/node-drivers.spec.ts | 66 +-- .../tests/pages/user-menu/preferences.spec.ts | 140 +++--- .../pages/users-and-auth/azuread.spec.ts | 42 +- 28 files changed, 670 insertions(+), 661 deletions(-) diff --git a/cypress/e2e/po/pages/chart-repositories.po.ts b/cypress/e2e/po/pages/chart-repositories.po.ts index ffa2f92a2c5..ba5c1fdb010 100644 --- a/cypress/e2e/po/pages/chart-repositories.po.ts +++ b/cypress/e2e/po/pages/chart-repositories.po.ts @@ -29,7 +29,7 @@ export default class ChartRepositoriesPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Apps'); sideNav.navToSideMenuEntryByLabel('Repositories'); } else { diff --git a/cypress/e2e/po/pages/explorer/charts/charts.po.ts b/cypress/e2e/po/pages/explorer/charts/charts.po.ts index c809a0db6f2..d09520aad30 100644 --- a/cypress/e2e/po/pages/explorer/charts/charts.po.ts +++ b/cypress/e2e/po/pages/explorer/charts/charts.po.ts @@ -24,7 +24,7 @@ export class ChartsPage extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Apps'); } diff --git a/cypress/e2e/po/pages/explorer/cluster-dashboard.po.ts b/cypress/e2e/po/pages/explorer/cluster-dashboard.po.ts index 92ba3571c74..693a942152e 100644 --- a/cypress/e2e/po/pages/explorer/cluster-dashboard.po.ts +++ b/cypress/e2e/po/pages/explorer/cluster-dashboard.po.ts @@ -23,7 +23,7 @@ export default class ClusterDashboardPagePo extends PagePo { const burgerMenu = new BurgerMenuPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); } customizeAppearanceButton() { diff --git a/cypress/e2e/po/pages/explorer/config-map.po.ts b/cypress/e2e/po/pages/explorer/config-map.po.ts index 60459d0536d..930f55e86cc 100644 --- a/cypress/e2e/po/pages/explorer/config-map.po.ts +++ b/cypress/e2e/po/pages/explorer/config-map.po.ts @@ -17,7 +17,7 @@ export class ConfigMapPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Storage'); sideNav.navToSideMenuEntryByLabel('ConfigMaps'); } diff --git a/cypress/e2e/po/pages/explorer/custom-resource-definitions.po.ts b/cypress/e2e/po/pages/explorer/custom-resource-definitions.po.ts index 0d82746e851..ab689fc0afe 100644 --- a/cypress/e2e/po/pages/explorer/custom-resource-definitions.po.ts +++ b/cypress/e2e/po/pages/explorer/custom-resource-definitions.po.ts @@ -23,7 +23,7 @@ export class CustomResourceDefinitionsPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('More Resources'); sideNav.navToSideMenuGroupByLabel('API'); sideNav.navToSideMenuEntryByLabel('CustomResourceDefinitions'); diff --git a/cypress/e2e/po/pages/explorer/horizontal-pod-autoscalers.po.ts b/cypress/e2e/po/pages/explorer/horizontal-pod-autoscalers.po.ts index 9939ed9f41e..6d762443b67 100644 --- a/cypress/e2e/po/pages/explorer/horizontal-pod-autoscalers.po.ts +++ b/cypress/e2e/po/pages/explorer/horizontal-pod-autoscalers.po.ts @@ -21,7 +21,7 @@ export class HorizontalPodAutoscalersPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Service Discovery'); sideNav.navToSideMenuEntryByLabel('HorizontalPodAutoscalers'); } diff --git a/cypress/e2e/po/pages/explorer/ingress.po.ts b/cypress/e2e/po/pages/explorer/ingress.po.ts index feb37cb7943..ebccd71e6aa 100644 --- a/cypress/e2e/po/pages/explorer/ingress.po.ts +++ b/cypress/e2e/po/pages/explorer/ingress.po.ts @@ -22,7 +22,7 @@ export class IngressPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Service Discovery'); sideNav.navToSideMenuEntryByLabel('Ingresses'); } diff --git a/cypress/e2e/po/pages/explorer/network-policy.po.ts b/cypress/e2e/po/pages/explorer/network-policy.po.ts index ad229c9d6ab..01d89a9be4f 100644 --- a/cypress/e2e/po/pages/explorer/network-policy.po.ts +++ b/cypress/e2e/po/pages/explorer/network-policy.po.ts @@ -17,7 +17,7 @@ export class NetworkPolicyPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Policy'); sideNav.navToSideMenuEntryByLabel('Network Policies'); } diff --git a/cypress/e2e/po/pages/explorer/persistent-volume-claims.po.ts b/cypress/e2e/po/pages/explorer/persistent-volume-claims.po.ts index 91a14960beb..7e26e458325 100644 --- a/cypress/e2e/po/pages/explorer/persistent-volume-claims.po.ts +++ b/cypress/e2e/po/pages/explorer/persistent-volume-claims.po.ts @@ -21,7 +21,7 @@ export class PersistentVolumeClaimsPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Storage'); sideNav.navToSideMenuEntryByLabel('PersistentVolumeClaims'); } diff --git a/cypress/e2e/po/pages/explorer/persistent-volumes.po.ts b/cypress/e2e/po/pages/explorer/persistent-volumes.po.ts index ca342f59f1e..ec10860bba3 100644 --- a/cypress/e2e/po/pages/explorer/persistent-volumes.po.ts +++ b/cypress/e2e/po/pages/explorer/persistent-volumes.po.ts @@ -22,7 +22,7 @@ export class PersistentVolumesPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Storage'); sideNav.navToSideMenuEntryByLabel('PersistentVolumes'); } diff --git a/cypress/e2e/po/pages/explorer/services.po.ts b/cypress/e2e/po/pages/explorer/services.po.ts index 6266356c8e6..0aca6ad8a21 100644 --- a/cypress/e2e/po/pages/explorer/services.po.ts +++ b/cypress/e2e/po/pages/explorer/services.po.ts @@ -22,7 +22,7 @@ export class ServicesPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Service Discovery'); sideNav.navToSideMenuEntryByLabel('Ingresses'); } diff --git a/cypress/e2e/po/pages/explorer/storage-classes.po.ts b/cypress/e2e/po/pages/explorer/storage-classes.po.ts index 12b74811383..4859841ac64 100644 --- a/cypress/e2e/po/pages/explorer/storage-classes.po.ts +++ b/cypress/e2e/po/pages/explorer/storage-classes.po.ts @@ -22,7 +22,7 @@ export class StorageClassesPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Storage'); sideNav.navToSideMenuEntryByLabel('StorageClasses'); } diff --git a/cypress/e2e/po/pages/explorer/workloads-pods.po.ts b/cypress/e2e/po/pages/explorer/workloads-pods.po.ts index 4f2fb95fd73..366d4f63f6d 100644 --- a/cypress/e2e/po/pages/explorer/workloads-pods.po.ts +++ b/cypress/e2e/po/pages/explorer/workloads-pods.po.ts @@ -23,7 +23,7 @@ export class WorkloadsPodsListPagePo extends PagePo { const sideNav = new ProductNavPo(); BurgerMenuPo.toggle(); - burgerMenu.clusters().contains(clusterId).click(); + burgerMenu.clusterNotPinnedList().contains(clusterId).click(); sideNav.navToSideMenuGroupByLabel('Workloads'); sideNav.navToSideMenuEntryByLabel('Pods'); } diff --git a/cypress/e2e/po/side-bars/burger-side-menu.po.ts b/cypress/e2e/po/side-bars/burger-side-menu.po.ts index b1eda4fc423..c9937b99391 100644 --- a/cypress/e2e/po/side-bars/burger-side-menu.po.ts +++ b/cypress/e2e/po/side-bars/burger-side-menu.po.ts @@ -127,16 +127,27 @@ export default class BurgerMenuPo extends ComponentPo { return this.self().find('.body .option'); } + /** + * Get all clusters, whether pinned, filtered or not + */ + allClusters(): Cypress.Chainable { + return this.self().find('.body .cluster.selector.option'); + } + + goToCluster(clusterId = 'local') { + return this.self().find('.cluster-name').contains(clusterId).click(); + } + /** * Get all the available cluster navigation links * @returns {Cypress.Chainable} */ - clusters(): Cypress.Chainable { + clusterNotPinnedList(): Cypress.Chainable { return this.self().find('.body .clustersList .cluster.selector.option'); } pinFirstCluster(): Cypress.Chainable { - return this.clusters().first().trigger('mouseover').find('.pin') + return this.clusterNotPinnedList().first().trigger('mouseover').find('.pin') .invoke('show') .click(); } @@ -150,11 +161,11 @@ export default class BurgerMenuPo extends ComponentPo { } getClusterDescription(): Cypress.Chainable { - return this.clusters().first().find('.description').invoke('text'); + return this.clusterNotPinnedList().first().find('.description').invoke('text'); } showClusterDescriptionTooltip(): Cypress.Chainable { - return this.clusters().first().find('.description').trigger('mouseenter'); + return this.clusterNotPinnedList().first().find('.description').trigger('mouseenter'); } getClusterDescriptionTooltipContent(): Cypress.Chainable { diff --git a/cypress/e2e/tests/navigation/page-actions.spec.ts b/cypress/e2e/tests/navigation/page-actions.spec.ts index 51287f60a3c..f5a9d6938af 100644 --- a/cypress/e2e/tests/navigation/page-actions.spec.ts +++ b/cypress/e2e/tests/navigation/page-actions.spec.ts @@ -9,18 +9,18 @@ describe('Page Actions', { tags: ['@navigation', '@adminUser', '@standardUser'] }); // TODO: Verify cause of race condition issue making navigation link not trigger - it.skip('Can restore hidden cards and displays welcome section', () => { - const homePage = new HomePagePo(); + // it.skip('Can restore hidden cards and displays welcome section', () => { + // const homePage = new HomePagePo(); - homePage - .checkIsCurrentPage(); - PageActions.open(); - const pageActionsPo = new PageActions(); + // homePage + // .checkIsCurrentPage(); + // PageActions.open(); + // const pageActionsPo = new PageActions(); - pageActionsPo.restoreLink().click(); + // pageActionsPo.restoreLink().click(); - homePage - .title() - .should('eq', 'Welcome to Rancher'); - }); + // homePage + // .title() + // .should('eq', 'Welcome to Rancher'); + // }); }); diff --git a/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts b/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts index 6334e82a524..a26e141ce04 100644 --- a/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts +++ b/cypress/e2e/tests/navigation/side-nav/main-side-menu.spec.ts @@ -102,7 +102,7 @@ describe('Side Menu: main', () => { it('Can display list of available clusters', { tags: ['@navigation', '@adminUser'] }, () => { const burgerMenuPo = new BurgerMenuPo(); - burgerMenuPo.clusters().should('exist'); + burgerMenuPo.clusterNotPinnedList().should('exist'); }); it('Pinned and unpinned cluster', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { @@ -123,27 +123,25 @@ describe('Side Menu: main', () => { it('Should show tooltip on mouse-hover when the menu is collapsed', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { const burgerMenuPo = new BurgerMenuPo(); - // Flake: Pinned and unpinned above succeeds (not pinned), but when we refresh page cluster is pinned (so not in `clusters()`) - // This bad state can result in lots of tests being broken (cannot navigate to local cluster) - burgerMenuPo.clusters().first().trigger('mouseover'); + burgerMenuPo.allClusters().first().trigger('mouseover'); BurgerMenuPo.checkIconTooltipOff(); BurgerMenuPo.toggle(); BurgerMenuPo.checkIconTooltipOn(); }); // TODO: #5966: Verify cause of race condition issue making navigation link not trigger - it.skip('Contains valid links', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { - const burgerMenuPo = new BurgerMenuPo(); - // Navigate through all the links - - burgerMenuPo.links().each((_, idx) => { - // Cant bind to looped element due DOM changes while opening/closing side bar - burgerMenuPo.links().eq(idx).should('be.visible').click({ force: true }) - .then((linkEl) => { - cy.location('href').should('exist'); - }); - }); - }); + // it.skip('Contains valid links', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { + // const burgerMenuPo = new BurgerMenuPo(); + // // Navigate through all the links + + // burgerMenuPo.links().each((_, idx) => { + // // Cant bind to looped element due DOM changes while opening/closing side bar + // burgerMenuPo.links().eq(idx).should('be.visible').click({ force: true }) + // .then((linkEl) => { + // cy.location('href').should('exist'); + // }); + // }); + // }); it('Check first item in global section is Cluster Management', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { HomePagePo.goTo(); diff --git a/cypress/e2e/tests/navigation/side-nav/product-side-nav.spec.ts b/cypress/e2e/tests/navigation/side-nav/product-side-nav.spec.ts index b3aa67a781e..937ea0c0f42 100644 --- a/cypress/e2e/tests/navigation/side-nav/product-side-nav.spec.ts +++ b/cypress/e2e/tests/navigation/side-nav/product-side-nav.spec.ts @@ -24,7 +24,7 @@ describe('Side navigation: Cluster ', { tags: ['@navigation', '@adminUser'] }, ( BurgerMenuPo.toggle(); const burgerMenuPo = new BurgerMenuPo(); - burgerMenuPo.clusters().eq(0).should('be.visible').click(); + burgerMenuPo.goToCluster('local').click(); }); it('Can access to first navigation link on click', () => { diff --git a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts index ebd1f22da13..cc96ee91bd6 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/cluster-dashboard.spec.ts @@ -53,12 +53,12 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi BurgerMenuPo.checkIfClusterMenuLinkIsHighlighted('local'); }); - it.skip('[Vue3 Skip]: has the correct title', () => { - clusterDashboard.goTo('local'); - clusterDashboard.waitForPage(undefined, 'cluster-events'); + // it.skip('[Vue3 Skip]: has the correct title', () => { + // clusterDashboard.goTo('local'); + // clusterDashboard.waitForPage(undefined, 'cluster-events'); - cy.title().should('eq', 'Rancher - local - Cluster Dashboard'); - }); + // cy.title().should('eq', 'Rancher - local - Cluster Dashboard'); + // }); it('shows fleet controller status', () => { ClusterDashboardPagePo.navTo(); @@ -156,7 +156,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi header.customBadge().should('contain', settings.description.new); const burgerMenu = new BurgerMenuPo(); - burgerMenu.clusters().first().find('span').should('contain', settings.iconText); + burgerMenu.clusterNotPinnedList().first().find('span').should('contain', settings.iconText); // Reset clusterDashboard.customizeAppearanceButton().click(); @@ -171,7 +171,7 @@ describe('Cluster Dashboard', { testIsolation: 'off', tags: ['@explorer', '@admi header.clusterIcon().children().should('have.class', 'cluster-local-logo'); header.clusterName().should('contain', 'local'); header.customBadge().should('not.exist'); - burgerMenu.clusters().first().find('svg').should('have.class', 'cluster-local-logo'); + burgerMenu.clusterNotPinnedList().first().find('svg').should('have.class', 'cluster-local-logo'); }); it('can view deployments', () => { diff --git a/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts b/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts index ed14f09d585..295181c1648 100644 --- a/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts @@ -42,36 +42,36 @@ describe('Cluster Tools', { tags: ['@explorer2', '@adminUser'] }, () => { }); }); - it.skip('can edit chart successfully', () => { - // Note: this test fails due to https://github.com/rancher/dashboard/issues/9940 - // skipping this test until issue is resolved - clusterTools.goTo(); - clusterTools.waitForPage(); - clusterTools.editChart(0); + // it.skip('can edit chart successfully', () => { + // // Note: this test fails due to https://github.com/rancher/dashboard/issues/9940 + // // skipping this test until issue is resolved + // clusterTools.goTo(); + // clusterTools.waitForPage(); + // clusterTools.editChart(0); - const installChart = new InstallChartPage(); + // const installChart = new InstallChartPage(); - installChart.nextPage(); + // installChart.nextPage(); - cy.intercept('POST', 'v1/catalog.cattle.io.clusterrepos/rancher-charts?action=upgrade').as('chartUpdate'); - installChart.installChart(); - cy.wait('@chartUpdate').its('response.statusCode').should('eq', 201); - clusterTools.waitForPage(); - cy.contains('Connected'); - }); + // cy.intercept('POST', 'v1/catalog.cattle.io.clusterrepos/rancher-charts?action=upgrade').as('chartUpdate'); + // installChart.installChart(); + // cy.wait('@chartUpdate').its('response.statusCode').should('eq', 201); + // clusterTools.waitForPage(); + // cy.contains('Connected'); + // }); - it.skip('can uninstall chart successfully', () => { - // Note: this test fails due to https://github.com/rancher/dashboard/issues/9940 - // skipping this test until issue is resolved - clusterTools.goTo(); - clusterTools.waitForPage(); - clusterTools.deleteChart(0); + // it.skip('can uninstall chart successfully', () => { + // // Note: this test fails due to https://github.com/rancher/dashboard/issues/9940 + // // skipping this test until issue is resolved + // clusterTools.goTo(); + // clusterTools.waitForPage(); + // clusterTools.deleteChart(0); - const promptRemove = new PromptRemove(); + // const promptRemove = new PromptRemove(); - cy.intercept('POST', '/v1/catalog.cattle.io.apps/default/rancher-alerting-drivers?action=uninstall').as('chartUninstall'); - promptRemove.remove(); - cy.wait('@chartUninstall').its('response.statusCode').should('eq', 201); - cy.contains('Disconnected'); - }); + // cy.intercept('POST', '/v1/catalog.cattle.io.apps/default/rancher-alerting-drivers?action=uninstall').as('chartUninstall'); + // promptRemove.remove(); + // cy.wait('@chartUninstall').its('response.statusCode').should('eq', 201); + // cy.contains('Disconnected'); + // }); }); diff --git a/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts b/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts index 2060372e1e1..a44cbf71800 100644 --- a/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/namespace-picker.spec.ts @@ -191,38 +191,38 @@ describe('Namespace picker', { testIsolation: 'off' }, () => { namespacePicker.checkIcon().should('have.length', 1); }); - it.skip('newly created project/namespace appears in namespace picker', { tags: ['@explorer2', '@adminUser'] }, () => { - const projName = `project${ +new Date() }`; - const nsName = `namespace${ +new Date() }`; - - // get user id - cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { - const userId = resp.body.data[0].id.trim(); - - // create project - cy.createProject(projName, 'local', userId).then((resp: Cypress.Response) => { - const projId = resp.body.id.trim(); - - // create ns - cy.createNamespaceInProject(nsName, projId); - - // check ns picker - namespacePicker.toggle(); - cy.contains(projName).should('be.visible'); - cy.contains(nsName).should('be.visible'); - - // delete project and ns - cy.deleteRancherResource('v1', 'namespaces', nsName); - cy.deleteRancherResource('v3', 'projects', projId); - - // check ns picker - cy.reload(); - namespacePicker.toggle(); - cy.contains(projName, { timeout: 10000 }).should('not.exist'); - cy.contains(nsName, { timeout: 10000 }).should('not.exist'); - }); - }); - }); + // it.skip('newly created project/namespace appears in namespace picker', { tags: ['@explorer2', '@adminUser'] }, () => { + // const projName = `project${ +new Date() }`; + // const nsName = `namespace${ +new Date() }`; + + // // get user id + // cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { + // const userId = resp.body.data[0].id.trim(); + + // // create project + // cy.createProject(projName, 'local', userId).then((resp: Cypress.Response) => { + // const projId = resp.body.id.trim(); + + // // create ns + // cy.createNamespaceInProject(nsName, projId); + + // // check ns picker + // namespacePicker.toggle(); + // cy.contains(projName).should('be.visible'); + // cy.contains(nsName).should('be.visible'); + + // // delete project and ns + // cy.deleteRancherResource('v1', 'namespaces', nsName); + // cy.deleteRancherResource('v3', 'projects', projId); + + // // check ns picker + // cy.reload(); + // namespacePicker.toggle(); + // cy.contains(projName, { timeout: 10000 }).should('not.exist'); + // cy.contains(nsName, { timeout: 10000 }).should('not.exist'); + // }); + // }); + // }); after('clean up', () => { cy.updateNamespaceFilter('local', 'none', '{"local":["all://user"]}'); diff --git a/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts b/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts index 734aa1ead97..fedb2e18151 100644 --- a/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts @@ -107,38 +107,38 @@ describe('Projects/Namespaces', { tags: ['@explorer2', '@adminUser'] }, () => { }); // https://github.com/rancher/dashboard/issues/11881 - it.skip('displays the most recent error after resolving a single error in a form with multiple errors', () => { - projectsNamespacesPage.createProjectButtonClick(); - - // Create the first error - projectsNamespacesPage.name().set('test-1234'); - projectsNamespacesPage.tabResourceQuotas().click(); - projectsNamespacesPage.btnAddResource().click(); - projectsNamespacesPage.inputProjectLimit().set('50'); - projectsNamespacesPage.buttonSubmit().click(); - - // Create a second error - projectsNamespacesPage.tabContainerDefaultResourceLimit().click(); - projectsNamespacesPage.inputCpuReservation().set('1000'); - projectsNamespacesPage.inputMemoryReservation().set('128'); - projectsNamespacesPage.inputCpuLimit().set('200'); - projectsNamespacesPage.inputMemoryLimit().set('64'); - projectsNamespacesPage.buttonSubmit().click(); - - // Assert that there is only a single error message - projectsNamespacesPage.bannerError(0).should('be.visible').contains('does not have all fields defined on a resourceQuota'); - projectsNamespacesPage.bannerError(0).should('have.length', 1); - projectsNamespacesPage.bannerError(1).should('have.length', 0); - - // resolve the first error - projectsNamespacesPage.tabResourceQuotas().click(); - projectsNamespacesPage.inputNamespaceDefaultLimit().set('50'); - projectsNamespacesPage.buttonSubmit().click(); - - // Click on Create again and assert that there is only a single error - projectsNamespacesPage.bannerError(0).should('be.visible').contains('admission webhook "rancher.cattle.io.projects.management.cattle.io" denied the request'); - projectsNamespacesPage.bannerError(0).should('have.length', 1); - projectsNamespacesPage.bannerError(1).should('have.length', 0); - }); - }); + // it.skip('displays the most recent error after resolving a single error in a form with multiple errors', () => { + // projectsNamespacesPage.createProjectButtonClick(); + + // // Create the first error + // projectsNamespacesPage.name().set('test-1234'); + // projectsNamespacesPage.tabResourceQuotas().click(); + // projectsNamespacesPage.btnAddResource().click(); + // projectsNamespacesPage.inputProjectLimit().set('50'); + // projectsNamespacesPage.buttonSubmit().click(); + + // // Create a second error + // projectsNamespacesPage.tabContainerDefaultResourceLimit().click(); + // projectsNamespacesPage.inputCpuReservation().set('1000'); + // projectsNamespacesPage.inputMemoryReservation().set('128'); + // projectsNamespacesPage.inputCpuLimit().set('200'); + // projectsNamespacesPage.inputMemoryLimit().set('64'); + // projectsNamespacesPage.buttonSubmit().click(); + + // // Assert that there is only a single error message + // projectsNamespacesPage.bannerError(0).should('be.visible').contains('does not have all fields defined on a resourceQuota'); + // projectsNamespacesPage.bannerError(0).should('have.length', 1); + // projectsNamespacesPage.bannerError(1).should('have.length', 0); + + // // resolve the first error + // projectsNamespacesPage.tabResourceQuotas().click(); + // projectsNamespacesPage.inputNamespaceDefaultLimit().set('50'); + // projectsNamespacesPage.buttonSubmit().click(); + + // // Click on Create again and assert that there is only a single error + // projectsNamespacesPage.bannerError(0).should('be.visible').contains('admission webhook "rancher.cattle.io.projects.management.cattle.io" denied the request'); + // projectsNamespacesPage.bannerError(0).should('have.length', 1); + // projectsNamespacesPage.bannerError(1).should('have.length', 0); + // }); + // }); }); diff --git a/cypress/e2e/tests/pages/extensions/extensions.spec.ts b/cypress/e2e/tests/pages/extensions/extensions.spec.ts index 1d656c58682..b03047e5852 100644 --- a/cypress/e2e/tests/pages/extensions/extensions.spec.ts +++ b/cypress/e2e/tests/pages/extensions/extensions.spec.ts @@ -246,227 +246,227 @@ describe('Extensions page', { tags: ['@extensions', '@adminUser'] }, () => { extensionsPo.extensionDetails().should('not.be.visible'); }); - it.skip('[Vue3 Skip]: Should install an extension', () => { - const extensionsPo = new ExtensionsPagePo(); - - extensionsPo.goTo(); - - extensionsPo.extensionTabAvailableClick(); - - // click on install button on card - extensionsPo.extensionCardInstallClick(EXTENSION_NAME); - extensionsPo.extensionInstallModal().should('be.visible'); - - // select version and click install - extensionsPo.installModalSelectVersionClick(2); - extensionsPo.installModalInstallClick(); + // it.skip('[Vue3 Skip]: Should install an extension', () => { + // const extensionsPo = new ExtensionsPagePo(); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // extensionsPo.goTo(); - // make sure extension card is in the installed tab - extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionCardClick(EXTENSION_NAME); - extensionsPo.extensionDetailsTitle().should('contain', EXTENSION_NAME); - extensionsPo.extensionDetailsCloseClick(); - }); - - it.skip('[Vue3 Skip]: Should not display installed extensions within the available tab', () => { - const extensionsPo = new ExtensionsPagePo(); + // extensionsPo.extensionTabAvailableClick(); - extensionsPo.goTo(); + // // click on install button on card + // extensionsPo.extensionCardInstallClick(EXTENSION_NAME); + // extensionsPo.extensionInstallModal().should('be.visible'); - // check for installed extension in "installed" tab - extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionCard(EXTENSION_NAME).should('be.visible'); + // // select version and click install + // extensionsPo.installModalSelectVersionClick(2); + // extensionsPo.installModalInstallClick(); - // check for installed extension in "available" tab - extensionsPo.extensionTabAvailableClick(); - extensionsPo.extensionCard(EXTENSION_NAME).should('not.exist'); - }); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - it.skip('[Vue3 Skip]: Should update an extension version', () => { - const extensionsPo = new ExtensionsPagePo(); + // // make sure extension card is in the installed tab + // extensionsPo.extensionTabInstalledClick(); + // extensionsPo.extensionCardClick(EXTENSION_NAME); + // extensionsPo.extensionDetailsTitle().should('contain', EXTENSION_NAME); + // extensionsPo.extensionDetailsCloseClick(); + // }); - extensionsPo.goTo(); + // it.skip('[Vue3 Skip]: Should not display installed extensions within the available tab', () => { + // const extensionsPo = new ExtensionsPagePo(); - extensionsPo.extensionTabInstalledClick(); + // extensionsPo.goTo(); - // click on update button on card - extensionsPo.extensionCardUpdateClick(EXTENSION_NAME); - extensionsPo.installModalInstallClick(); + // // check for installed extension in "installed" tab + // extensionsPo.extensionTabInstalledClick(); + // extensionsPo.extensionCard(EXTENSION_NAME).should('be.visible'); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // check for installed extension in "available" tab + // extensionsPo.extensionTabAvailableClick(); + // extensionsPo.extensionCard(EXTENSION_NAME).should('not.exist'); + // }); - // make sure extension card is not available anymore on the updates tab - // since we installed the latest version - extensionsPo.extensionTabUpdatesClick(); - extensionsPo.extensionCard(EXTENSION_NAME).should('not.exist'); - }); + // it.skip('[Vue3 Skip]: Should update an extension version', () => { + // const extensionsPo = new ExtensionsPagePo(); - it.skip('[Vue3 Skip]: Should rollback an extension version', () => { - const extensionsPo = new ExtensionsPagePo(); + // extensionsPo.goTo(); - extensionsPo.goTo(); + // extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionTabInstalledClick(); + // // click on update button on card + // extensionsPo.extensionCardUpdateClick(EXTENSION_NAME); + // extensionsPo.installModalInstallClick(); - // click on the rollback button on card - // this will rollback to the immediate previous version - extensionsPo.extensionCardRollbackClick(EXTENSION_NAME); - extensionsPo.installModalInstallClick(); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // make sure extension card is not available anymore on the updates tab + // // since we installed the latest version + // extensionsPo.extensionTabUpdatesClick(); + // extensionsPo.extensionCard(EXTENSION_NAME).should('not.exist'); + // }); - // make sure extension card is on the updates tab - extensionsPo.extensionTabUpdatesClick(); - extensionsPo.extensionCard(EXTENSION_NAME).should('be.visible'); - }); + // it.skip('[Vue3 Skip]: Should rollback an extension version', () => { + // const extensionsPo = new ExtensionsPagePo(); - it.skip('[Vue3 Skip]: An extension larger than 20mb, which will trigger chacheState disabled, should install and work fine', () => { - const extensionsPo = new ExtensionsPagePo(); + // extensionsPo.goTo(); - extensionsPo.goTo(); + // extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionTabAvailableClick(); + // // click on the rollback button on card + // // this will rollback to the immediate previous version + // extensionsPo.extensionCardRollbackClick(EXTENSION_NAME); + // extensionsPo.installModalInstallClick(); - // click on install button on card - extensionsPo.extensionCardInstallClick(DISABLED_CACHE_EXTENSION_NAME); - extensionsPo.extensionInstallModal().should('be.visible'); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - // click install - extensionsPo.installModalInstallClick(); + // // make sure extension card is on the updates tab + // extensionsPo.extensionTabUpdatesClick(); + // extensionsPo.extensionCard(EXTENSION_NAME).should('be.visible'); + // }); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // it.skip('[Vue3 Skip]: An extension larger than 20mb, which will trigger chacheState disabled, should install and work fine', () => { + // const extensionsPo = new ExtensionsPagePo(); - // make sure extension card is in the installed tab - extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionCardClick(DISABLED_CACHE_EXTENSION_NAME); - extensionsPo.extensionDetailsTitle().should('contain', DISABLED_CACHE_EXTENSION_NAME); - extensionsPo.extensionDetailsCloseClick(); + // extensionsPo.goTo(); - // check if extension is working fine - BurgerMenuPo.burgerMenuNavToMenubyLabel(DISABLED_CACHE_EXTENSION_MENU_LABEL); - cy.get('h1').should('have.text', DISABLED_CACHE_EXTENSION_TITLE); - }); + // extensionsPo.extensionTabAvailableClick(); - it.skip('[Vue3 Skip]: Should respect authentication when importing extension scripts', () => { - const extensionsPo = new ExtensionsPagePo(); + // // click on install button on card + // extensionsPo.extensionCardInstallClick(DISABLED_CACHE_EXTENSION_NAME); + // extensionsPo.extensionInstallModal().should('be.visible'); - extensionsPo.goTo(); + // // click install + // extensionsPo.installModalInstallClick(); - extensionsPo.extensionTabAvailableClick(); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - // Install unauthenticated extension - extensionsPo.extensionCardInstallClick(UNAUTHENTICATED_EXTENSION_NAME); - extensionsPo.extensionInstallModal().should('be.visible'); - extensionsPo.installModalInstallClick(); + // // make sure extension card is in the installed tab + // extensionsPo.extensionTabInstalledClick(); + // extensionsPo.extensionCardClick(DISABLED_CACHE_EXTENSION_NAME); + // extensionsPo.extensionDetailsTitle().should('contain', DISABLED_CACHE_EXTENSION_NAME); + // extensionsPo.extensionDetailsCloseClick(); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // check if extension is working fine + // BurgerMenuPo.burgerMenuNavToMenubyLabel(DISABLED_CACHE_EXTENSION_MENU_LABEL); + // cy.get('h1').should('have.text', DISABLED_CACHE_EXTENSION_TITLE); + // }); - // make sure both extensions have been imported - extensionsPo.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); - extensionsPo.extensionScriptImport(EXTENSION_NAME).should('exist'); + // it.skip('[Vue3 Skip]: Should respect authentication when importing extension scripts', () => { + // const extensionsPo = new ExtensionsPagePo(); - cy.logout(); + // extensionsPo.goTo(); - // make sure only the unauthenticated extension has been imported after logout - const loginPage = new LoginPagePo(); + // extensionsPo.extensionTabAvailableClick(); - loginPage.goTo(); - loginPage.waitForPage(); - loginPage.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); - loginPage.extensionScriptImport(EXTENSION_NAME).should('not.exist'); + // // Install unauthenticated extension + // extensionsPo.extensionCardInstallClick(UNAUTHENTICATED_EXTENSION_NAME); + // extensionsPo.extensionInstallModal().should('be.visible'); + // extensionsPo.installModalInstallClick(); - // make sure both extensions have been imported after logging in again - cy.login(undefined, undefined, false); - extensionsPo.goTo(); - extensionsPo.waitForPage(); - extensionsPo.waitForTitle(); - extensionsPo.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); - extensionsPo.extensionScriptImport(EXTENSION_NAME).should('exist'); - }); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - it.skip('[Vue3 Skip]: Should uninstall extensions', () => { - // Because we logged out in the previous test this one will also have to use an uncached login - cy.login(undefined, undefined, false); - const extensionsPo = new ExtensionsPagePo(); + // // make sure both extensions have been imported + // extensionsPo.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); + // extensionsPo.extensionScriptImport(EXTENSION_NAME).should('exist'); - extensionsPo.goTo(); + // cy.logout(); - extensionsPo.extensionTabInstalledClick(); + // // make sure only the unauthenticated extension has been imported after logout + // const loginPage = new LoginPagePo(); - // click on uninstall button on card - extensionsPo.extensionCardUninstallClick(EXTENSION_NAME); - extensionsPo.extensionUninstallModal().should('be.visible'); - extensionsPo.uninstallModaluninstallClick(); - extensionsPo.extensionReloadBanner().should('be.visible'); + // loginPage.goTo(); + // loginPage.waitForPage(); + // loginPage.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); + // loginPage.extensionScriptImport(EXTENSION_NAME).should('not.exist'); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // make sure both extensions have been imported after logging in again + // cy.login(undefined, undefined, false); + // extensionsPo.goTo(); + // extensionsPo.waitForPage(); + // extensionsPo.waitForTitle(); + // extensionsPo.extensionScriptImport(UNAUTHENTICATED_EXTENSION_NAME).should('exist'); + // extensionsPo.extensionScriptImport(EXTENSION_NAME).should('exist'); + // }); - // make sure extension card is in the available tab - extensionsPo.extensionTabAvailableClick(); - extensionsPo.extensionCardClick(EXTENSION_NAME); - extensionsPo.extensionDetailsTitle().should('contain', EXTENSION_NAME); - }); + // it.skip('[Vue3 Skip]: Should uninstall extensions', () => { + // // Because we logged out in the previous test this one will also have to use an uncached login + // cy.login(undefined, undefined, false); + // const extensionsPo = new ExtensionsPagePo(); - it.skip('[Vue3 Skip]: Should uninstall unathenticated extensions', () => { - // Because we logged out in the previous test this one will also have to use an uncached login - cy.login(undefined, undefined, false); - const extensionsPo = new ExtensionsPagePo(); + // extensionsPo.goTo(); - extensionsPo.goTo(); + // extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionTabInstalledClick(); + // // click on uninstall button on card + // extensionsPo.extensionCardUninstallClick(EXTENSION_NAME); + // extensionsPo.extensionUninstallModal().should('be.visible'); + // extensionsPo.uninstallModaluninstallClick(); + // extensionsPo.extensionReloadBanner().should('be.visible'); - // click on uninstall button on card - extensionsPo.extensionCardUninstallClick(UNAUTHENTICATED_EXTENSION_NAME); - extensionsPo.extensionUninstallModal().should('be.visible'); - extensionsPo.uninstallModaluninstallClick(); - extensionsPo.extensionReloadBanner().should('be.visible'); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // make sure extension card is in the available tab + // extensionsPo.extensionTabAvailableClick(); + // extensionsPo.extensionCardClick(EXTENSION_NAME); + // extensionsPo.extensionDetailsTitle().should('contain', EXTENSION_NAME); + // }); - // make sure extension card is in the available tab - extensionsPo.extensionTabAvailableClick(); - extensionsPo.extensionCardClick(UNAUTHENTICATED_EXTENSION_NAME); - extensionsPo.extensionDetailsTitle().should('contain', UNAUTHENTICATED_EXTENSION_NAME); - }); + // it.skip('[Vue3 Skip]: Should uninstall unathenticated extensions', () => { + // // Because we logged out in the previous test this one will also have to use an uncached login + // cy.login(undefined, undefined, false); + // const extensionsPo = new ExtensionsPagePo(); - it.skip('[Vue3 Skip]: Should uninstall un-cached extensions', () => { - // Because we logged out in the previous test this one will also have to use an uncached login - cy.login(undefined, undefined, false); - const extensionsPo = new ExtensionsPagePo(); + // extensionsPo.goTo(); - extensionsPo.goTo(); + // extensionsPo.extensionTabInstalledClick(); - extensionsPo.extensionTabInstalledClick(); + // // click on uninstall button on card + // extensionsPo.extensionCardUninstallClick(UNAUTHENTICATED_EXTENSION_NAME); + // extensionsPo.extensionUninstallModal().should('be.visible'); + // extensionsPo.uninstallModaluninstallClick(); + // extensionsPo.extensionReloadBanner().should('be.visible'); + + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); + + // // make sure extension card is in the available tab + // extensionsPo.extensionTabAvailableClick(); + // extensionsPo.extensionCardClick(UNAUTHENTICATED_EXTENSION_NAME); + // extensionsPo.extensionDetailsTitle().should('contain', UNAUTHENTICATED_EXTENSION_NAME); + // }); + + // it.skip('[Vue3 Skip]: Should uninstall un-cached extensions', () => { + // // Because we logged out in the previous test this one will also have to use an uncached login + // cy.login(undefined, undefined, false); + // const extensionsPo = new ExtensionsPagePo(); - // click on uninstall button on card - extensionsPo.extensionCardUninstallClick(DISABLED_CACHE_EXTENSION_NAME); - extensionsPo.extensionUninstallModal().should('be.visible'); - extensionsPo.uninstallModaluninstallClick(); + // extensionsPo.goTo(); + + // extensionsPo.extensionTabInstalledClick(); - // let's check the extension reload banner and reload the page - extensionsPo.extensionReloadBanner().should('be.visible'); - extensionsPo.extensionReloadClick(); + // // click on uninstall button on card + // extensionsPo.extensionCardUninstallClick(DISABLED_CACHE_EXTENSION_NAME); + // extensionsPo.extensionUninstallModal().should('be.visible'); + // extensionsPo.uninstallModaluninstallClick(); - // make sure extension card is in the available tab - extensionsPo.extensionTabAvailableClick(); - extensionsPo.extensionCardClick(DISABLED_CACHE_EXTENSION_NAME); - extensionsPo.extensionDetailsTitle().should('contain', DISABLED_CACHE_EXTENSION_NAME); - }); + // // let's check the extension reload banner and reload the page + // extensionsPo.extensionReloadBanner().should('be.visible'); + // extensionsPo.extensionReloadClick(); + + // // make sure extension card is in the available tab + // extensionsPo.extensionTabAvailableClick(); + // extensionsPo.extensionCardClick(DISABLED_CACHE_EXTENSION_NAME); + // extensionsPo.extensionDetailsTitle().should('contain', DISABLED_CACHE_EXTENSION_NAME); + // }); }); diff --git a/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts b/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts index dcdc0719741..6c5f6bf5700 100644 --- a/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts +++ b/cypress/e2e/tests/pages/fleet/gitrepo.spec.ts @@ -139,7 +139,7 @@ describe('Git Repo', { testIsolation: 'off', tags: ['@fleet', '@adminUser'] }, ( prefPage.languageDropdownMenu().clickOptionWithLabel('English'); cy.wait('@prefUpdateEnUs').then(({ response }) => { expect(response?.statusCode).to.eq(200); - expect(response?.body.data).to.have.property('locale', 'en-us'); + expect(response?.body.data).to.have.property('locale', 'en-us'); // Flake: This can sometimes be zh-hans.....?! }); prefPage.languageDropdownMenu().isClosed(); }) diff --git a/cypress/e2e/tests/pages/global-settings/branding.spec.ts b/cypress/e2e/tests/pages/global-settings/branding.spec.ts index 64068f1fc9c..d3926444b28 100644 --- a/cypress/e2e/tests/pages/global-settings/branding.spec.ts +++ b/cypress/e2e/tests/pages/global-settings/branding.spec.ts @@ -97,224 +97,224 @@ describe('Branding', { testIsolation: 'off' }, () => { cy.title({ timeout: 2000 }).should('eq', settings.privateLabel.original); }); - it.skip('[Vue3 Skip]: Logo', { tags: ['@globalSettings', '@adminUser'] }, () => { - const prefPage = new PreferencesPagePo(); - - BrandingPagePo.navTo(); - brandingPage.customLogoCheckbox().set(); - // to check custom box element width and height in order to prevent regression - // https://github.com/rancher/dashboard/issues/10000 - brandingPage.customLogoCheckbox().hasAppropriateWidth(); - brandingPage.customLogoCheckbox().hasAppropriateHeight(); - - // Upload Light Logo - brandingPage.uploadButton('Upload Light Logo') - .selectFile('cypress/e2e/blueprints/branding/logos/rancher-color.svg', { force: true }); - - // Upload Dark Logo - brandingPage.uploadButton('Upload Dark Logo') - .selectFile('cypress/e2e/blueprints/branding/logos/rancher-white.svg', { force: true }); - - // Apply - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-logo-light', 200); - - // Logo Preview - brandingPage.logoPreview('dark').scrollIntoView().should('be.visible'); - brandingPage.logoPreview('light').scrollIntoView().should('be.visible'); - - // Set dashboard theme to Dark and check top-level navigation header for updated logo in dark mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); - prefPage.themeButtons().set('Dark'); - cy.wait('@prefUpdateDark').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-dark"'); - expect(response?.body.data).to.have.property('theme', '"ui-dark"'); - }); - - cy.fixture('branding/logos/rancher-white.svg', 'base64').then((expectedBase64) => { - burgerMenu.headerBrandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - - BurgerMenuPo.toggle(); - burgerMenu.brandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - BurgerMenuPo.toggle(); - }); - // Set dashboard theme to Light and check top-level navigation header for updated logo in light mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); - prefPage.themeButtons().set('Light'); - cy.wait('@prefUpdateLight').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-light"'); - expect(response?.body.data).to.have.property('theme', '"ui-light"'); - }); - - cy.fixture('branding/logos/rancher-color.svg', 'base64').then((expectedBase64) => { - burgerMenu.headerBrandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - - BurgerMenuPo.toggle(); - burgerMenu.brandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - }); - - // Reset - BrandingPagePo.navTo(); - brandingPage.customLogoCheckbox().set(); - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-logo-light', 200); - - HomePagePo.navTo(); - burgerMenu.headerBrandLogoImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); - }); - - BurgerMenuPo.toggle(); - burgerMenu.brandLogoImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); - }); - }); - - it.skip('[Vue3 Skip]: Banner', { tags: ['@globalSettings', '@adminUser'] }, () => { - const prefPage = new PreferencesPagePo(); - - BrandingPagePo.navTo(); - brandingPage.customBannerCheckbox().set(); - brandingPage.customBannerCheckbox().hasAppropriateWidth(); - brandingPage.customBannerCheckbox().hasAppropriateHeight(); - - // Upload Light Banner - brandingPage.uploadButton('Upload Light Banner') - .selectFile('cypress/e2e/blueprints/branding/banners/banner-light.svg', { force: true }); - - // Upload Dark Banner - brandingPage.uploadButton('Upload Dark Banner') - .selectFile('cypress/e2e/blueprints/branding/banners/banner-dark.svg', { force: true }); - - // Apply - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-banner-light', 200); - - // Banner Preview - brandingPage.bannerPreview('dark').scrollIntoView().should('be.visible'); - brandingPage.bannerPreview('light').scrollIntoView().should('be.visible'); - - // Set dashboard theme to Light and check homepage for updated banner in dark mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); - prefPage.themeButtons().set('Dark'); - cy.wait('@prefUpdateDark').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-dark"'); - expect(response?.body.data).to.have.property('theme', '"ui-dark"'); - }); - - cy.fixture('branding/banners/banner-dark.svg', 'base64').then((expectedBase64) => { - homePage.goTo(); - homePage.getBrandBannerImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - }); - - // Set dashboard theme to Light and check homepage for updated banner in light mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); - prefPage.themeButtons().set('Light'); - cy.wait('@prefUpdateLight').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-light"'); - expect(response?.body.data).to.have.property('theme', '"ui-light"'); - }); - - cy.fixture('branding/banners/banner-light.svg', 'base64').then((expectedBase64) => { - homePage.goTo(); - homePage.getBrandBannerImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - }); - - // Reset - BrandingPagePo.navTo(); - brandingPage.customBannerCheckbox().set(); - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-banner-light', 200); - - homePage.goTo(); - homePage.getBrandBannerImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/banner.b321f7eb.svg'); - }); - }); - - it.skip('[Vue3 Skip]: Login Background', { tags: ['@globalSettings', '@adminUser'] }, () => { - const prefPage = new PreferencesPagePo(); - - BrandingPagePo.navTo(); - - brandingPage.customLoginBackgroundCheckbox().set(); - brandingPage.customLoginBackgroundCheckbox().hasAppropriateWidth(); - brandingPage.customLoginBackgroundCheckbox().hasAppropriateHeight(); - - // Upload Light Background - brandingPage.uploadButton('Upload Light Background') - .selectFile('cypress/e2e/blueprints/branding/backgrounds/login-landscape-light.svg', { force: true }); - - // Upload Dark Background - brandingPage.uploadButton('Upload Dark Background') - .selectFile('cypress/e2e/blueprints/branding/backgrounds/login-landscape-dark.svg', { force: true }); - - // Apply - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-login-background-light', 200); - - // Banner Preview - brandingPage.loginBackgroundPreview('dark').scrollIntoView().should('be.visible'); - brandingPage.loginBackgroundPreview('light').scrollIntoView().should('be.visible'); - - // Set dashboard theme to Dark and check login page for updated background in dark mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); - prefPage.themeButtons().set('Dark'); - cy.wait('@prefUpdateDark').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-dark"'); - expect(response?.body.data).to.have.property('theme', '"ui-dark"'); - }); - - cy.fixture('branding/backgrounds/login-landscape-dark.svg', 'base64').then((expectedBase64) => { - loginPage.goTo(); - loginPage.loginBackgroundImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - }); - - cy.login(); - HomePagePo.goToAndWaitForGet(); - - // Set dashboard theme to Dark and check login page for updated background in light mode - PreferencesPagePo.navTo(); - prefPage.themeButtons().checkVisible(); - cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); - prefPage.themeButtons().set('Light'); - cy.wait('@prefUpdateLight').then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('theme', '"ui-light"'); - expect(response?.body.data).to.have.property('theme', '"ui-light"'); - }); - - cy.fixture('branding/backgrounds/login-landscape-light.svg', 'base64').then((expectedBase64) => { - loginPage.goTo(); - loginPage.loginBackgroundImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); - }); - - cy.login(); - HomePagePo.goToAndWaitForGet(); - - // Reset - BrandingPagePo.navTo(); - brandingPage.customLoginBackgroundCheckbox().set(); - brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-login-background-light', 200); - - loginPage.goTo(); - loginPage.loginBackgroundImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/login-landscape.911b980e.svg'); - }); - - cy.login(); - HomePagePo.goToAndWaitForGet(); - }); + // it.skip('[Vue3 Skip]: Logo', { tags: ['@globalSettings', '@adminUser'] }, () => { + // const prefPage = new PreferencesPagePo(); + + // BrandingPagePo.navTo(); + // brandingPage.customLogoCheckbox().set(); + // // to check custom box element width and height in order to prevent regression + // // https://github.com/rancher/dashboard/issues/10000 + // brandingPage.customLogoCheckbox().hasAppropriateWidth(); + // brandingPage.customLogoCheckbox().hasAppropriateHeight(); + + // // Upload Light Logo + // brandingPage.uploadButton('Upload Light Logo') + // .selectFile('cypress/e2e/blueprints/branding/logos/rancher-color.svg', { force: true }); + + // // Upload Dark Logo + // brandingPage.uploadButton('Upload Dark Logo') + // .selectFile('cypress/e2e/blueprints/branding/logos/rancher-white.svg', { force: true }); + + // // Apply + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-logo-light', 200); + + // // Logo Preview + // brandingPage.logoPreview('dark').scrollIntoView().should('be.visible'); + // brandingPage.logoPreview('light').scrollIntoView().should('be.visible'); + + // // Set dashboard theme to Dark and check top-level navigation header for updated logo in dark mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); + // prefPage.themeButtons().set('Dark'); + // cy.wait('@prefUpdateDark').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-dark"'); + // expect(response?.body.data).to.have.property('theme', '"ui-dark"'); + // }); + + // cy.fixture('branding/logos/rancher-white.svg', 'base64').then((expectedBase64) => { + // burgerMenu.headerBrandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + + // BurgerMenuPo.toggle(); + // burgerMenu.brandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // BurgerMenuPo.toggle(); + // }); + // // Set dashboard theme to Light and check top-level navigation header for updated logo in light mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); + // prefPage.themeButtons().set('Light'); + // cy.wait('@prefUpdateLight').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-light"'); + // expect(response?.body.data).to.have.property('theme', '"ui-light"'); + // }); + + // cy.fixture('branding/logos/rancher-color.svg', 'base64').then((expectedBase64) => { + // burgerMenu.headerBrandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + + // BurgerMenuPo.toggle(); + // burgerMenu.brandLogoImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // }); + + // // Reset + // BrandingPagePo.navTo(); + // brandingPage.customLogoCheckbox().set(); + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-logo-light', 200); + + // HomePagePo.navTo(); + // burgerMenu.headerBrandLogoImage().should('be.visible').then((el) => { + // expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); + // }); + + // BurgerMenuPo.toggle(); + // burgerMenu.brandLogoImage().should('be.visible').then((el) => { + // expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); + // }); + // }); + + // it.skip('[Vue3 Skip]: Banner', { tags: ['@globalSettings', '@adminUser'] }, () => { + // const prefPage = new PreferencesPagePo(); + + // BrandingPagePo.navTo(); + // brandingPage.customBannerCheckbox().set(); + // brandingPage.customBannerCheckbox().hasAppropriateWidth(); + // brandingPage.customBannerCheckbox().hasAppropriateHeight(); + + // // Upload Light Banner + // brandingPage.uploadButton('Upload Light Banner') + // .selectFile('cypress/e2e/blueprints/branding/banners/banner-light.svg', { force: true }); + + // // Upload Dark Banner + // brandingPage.uploadButton('Upload Dark Banner') + // .selectFile('cypress/e2e/blueprints/branding/banners/banner-dark.svg', { force: true }); + + // // Apply + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-banner-light', 200); + + // // Banner Preview + // brandingPage.bannerPreview('dark').scrollIntoView().should('be.visible'); + // brandingPage.bannerPreview('light').scrollIntoView().should('be.visible'); + + // // Set dashboard theme to Light and check homepage for updated banner in dark mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); + // prefPage.themeButtons().set('Dark'); + // cy.wait('@prefUpdateDark').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-dark"'); + // expect(response?.body.data).to.have.property('theme', '"ui-dark"'); + // }); + + // cy.fixture('branding/banners/banner-dark.svg', 'base64').then((expectedBase64) => { + // homePage.goTo(); + // homePage.getBrandBannerImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // }); + + // // Set dashboard theme to Light and check homepage for updated banner in light mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); + // prefPage.themeButtons().set('Light'); + // cy.wait('@prefUpdateLight').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-light"'); + // expect(response?.body.data).to.have.property('theme', '"ui-light"'); + // }); + + // cy.fixture('branding/banners/banner-light.svg', 'base64').then((expectedBase64) => { + // homePage.goTo(); + // homePage.getBrandBannerImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // }); + + // // Reset + // BrandingPagePo.navTo(); + // brandingPage.customBannerCheckbox().set(); + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-banner-light', 200); + + // homePage.goTo(); + // homePage.getBrandBannerImage().should('be.visible').then((el) => { + // expect(el).to.have.attr('src').includes('/img/banner.b321f7eb.svg'); + // }); + // }); + + // it.skip('[Vue3 Skip]: Login Background', { tags: ['@globalSettings', '@adminUser'] }, () => { + // const prefPage = new PreferencesPagePo(); + + // BrandingPagePo.navTo(); + + // brandingPage.customLoginBackgroundCheckbox().set(); + // brandingPage.customLoginBackgroundCheckbox().hasAppropriateWidth(); + // brandingPage.customLoginBackgroundCheckbox().hasAppropriateHeight(); + + // // Upload Light Background + // brandingPage.uploadButton('Upload Light Background') + // .selectFile('cypress/e2e/blueprints/branding/backgrounds/login-landscape-light.svg', { force: true }); + + // // Upload Dark Background + // brandingPage.uploadButton('Upload Dark Background') + // .selectFile('cypress/e2e/blueprints/branding/backgrounds/login-landscape-dark.svg', { force: true }); + + // // Apply + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-login-background-light', 200); + + // // Banner Preview + // brandingPage.loginBackgroundPreview('dark').scrollIntoView().should('be.visible'); + // brandingPage.loginBackgroundPreview('light').scrollIntoView().should('be.visible'); + + // // Set dashboard theme to Dark and check login page for updated background in dark mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateDark'); + // prefPage.themeButtons().set('Dark'); + // cy.wait('@prefUpdateDark').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-dark"'); + // expect(response?.body.data).to.have.property('theme', '"ui-dark"'); + // }); + + // cy.fixture('branding/backgrounds/login-landscape-dark.svg', 'base64').then((expectedBase64) => { + // loginPage.goTo(); + // loginPage.loginBackgroundImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // }); + + // cy.login(); + // HomePagePo.goToAndWaitForGet(); + + // // Set dashboard theme to Dark and check login page for updated background in light mode + // PreferencesPagePo.navTo(); + // prefPage.themeButtons().checkVisible(); + // cy.intercept('PUT', 'v1/userpreferences/*').as('prefUpdateLight'); + // prefPage.themeButtons().set('Light'); + // cy.wait('@prefUpdateLight').then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('theme', '"ui-light"'); + // expect(response?.body.data).to.have.property('theme', '"ui-light"'); + // }); + + // cy.fixture('branding/backgrounds/login-landscape-light.svg', 'base64').then((expectedBase64) => { + // loginPage.goTo(); + // loginPage.loginBackgroundImage().should('be.visible').and('have.attr', 'src', `data:image/svg+xml;base64,${ expectedBase64 }`); + // }); + + // cy.login(); + // HomePagePo.goToAndWaitForGet(); + + // // Reset + // BrandingPagePo.navTo(); + // brandingPage.customLoginBackgroundCheckbox().set(); + // brandingPage.applyAndWait('/v1/management.cattle.io.settings/ui-login-background-light', 200); + + // loginPage.goTo(); + // loginPage.loginBackgroundImage().should('be.visible').then((el) => { + // expect(el).to.have.attr('src').includes('/img/login-landscape.911b980e.svg'); + // }); + + // cy.login(); + // HomePagePo.goToAndWaitForGet(); + // }); it('Favicon', { tags: ['@globalSettings', '@adminUser'] }, () => { BrandingPagePo.navTo(); diff --git a/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts b/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts index ab9558aeb24..c54c3c24cdb 100644 --- a/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts +++ b/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts @@ -375,8 +375,8 @@ describe('Cluster Manager', { testIsolation: 'off', tags: ['@manager', '@adminUs clusterList.sortableTable().rowElementWithName(rke1CustomName).should('exist'); }); - it.skip('can create new snapshots', () => { - }); + // it.skip('can create new snapshots', () => { + // }); it('can show snapshots list', () => { clusterList.goToClusterListAndGetClusterDetails(rke1CustomName).then((cluster) => { @@ -432,8 +432,8 @@ describe('Cluster Manager', { testIsolation: 'off', tags: ['@manager', '@adminUs }); }); - it.skip('can delete snapshots', () => { - }); + // it.skip('can delete snapshots', () => { + // }); it('can delete cluster', () => { clusterList.goTo(); diff --git a/cypress/e2e/tests/pages/manager/node-drivers.spec.ts b/cypress/e2e/tests/pages/manager/node-drivers.spec.ts index 1b38a5e0211..e9c6e1ce559 100644 --- a/cypress/e2e/tests/pages/manager/node-drivers.spec.ts +++ b/cypress/e2e/tests/pages/manager/node-drivers.spec.ts @@ -208,39 +208,39 @@ describe.skip('Node Drivers', { testIsolation: 'off', tags: ['@manager', '@admin createCluster.gridElementExistanceByName(openStackDriver, 'exist'); }); - it.skip('can deactivate drivers in bulk', () => { - // Skipping this test until issue is resolved https://github.com/rancher/dashboard/issues/10718 - NodeDriversPagePo.navTo(); - driversPage.waitForPage(); - driversPage.list().details(oracleDriver, 1).should('contain', 'Active'); - driversPage.list().details(openStackDriver, 1).should('contain', 'Active'); - driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) - .set(); - driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(openStackDriver) - .set(); - driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); - driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Deactivate') - .click(); - - cy.intercept('POST', '/v3/nodeDrivers/oci?action=deactivate').as('deactivateOracleDriver'); - cy.intercept('POST', '/v3/nodeDrivers/openstack?action=deactivate').as('deactivateopenStackDriver'); - - const deactivateDialog = new DeactivateDriverDialogPo(); - - deactivateDialog.deactivate(); - cy.wait('@deactivateopenStackDriver').its('response.statusCode').should('eq', 200); - cy.wait('@deactivateOracleDriver').its('response.statusCode').should('eq', 200); - driversPage.list().details(oracleDriver, 1).should('contain', 'Inactive'); - driversPage.list().details(openStackDriver, 1).should('contain', 'Inactive'); - - // check options on cluster create page - ClusterManagerListPagePo.navTo(); - clusterList.waitForPage(); - clusterList.createCluster(); - createCluster.waitForPage(); - createCluster.gridElementExistanceByName(oracleDriver, 'not.exist'); - createCluster.gridElementExistanceByName(openStackDriver, 'not.exist'); - }); + // it.skip('can deactivate drivers in bulk', () => { + // // Skipping this test until issue is resolved https://github.com/rancher/dashboard/issues/10718 + // NodeDriversPagePo.navTo(); + // driversPage.waitForPage(); + // driversPage.list().details(oracleDriver, 1).should('contain', 'Active'); + // driversPage.list().details(openStackDriver, 1).should('contain', 'Active'); + // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) + // .set(); + // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(openStackDriver) + // .set(); + // driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); + // driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Deactivate') + // .click(); + + // cy.intercept('POST', '/v3/nodeDrivers/oci?action=deactivate').as('deactivateOracleDriver'); + // cy.intercept('POST', '/v3/nodeDrivers/openstack?action=deactivate').as('deactivateopenStackDriver'); + + // const deactivateDialog = new DeactivateDriverDialogPo(); + + // deactivateDialog.deactivate(); + // cy.wait('@deactivateopenStackDriver').its('response.statusCode').should('eq', 200); + // cy.wait('@deactivateOracleDriver').its('response.statusCode').should('eq', 200); + // driversPage.list().details(oracleDriver, 1).should('contain', 'Inactive'); + // driversPage.list().details(openStackDriver, 1).should('contain', 'Inactive'); + + // // check options on cluster create page + // ClusterManagerListPagePo.navTo(); + // clusterList.waitForPage(); + // clusterList.createCluster(); + // createCluster.waitForPage(); + // createCluster.gridElementExistanceByName(oracleDriver, 'not.exist'); + // createCluster.gridElementExistanceByName(openStackDriver, 'not.exist'); + // }); it('can delete drivers in bulk', () => { NodeDriversPagePo.navTo(); diff --git a/cypress/e2e/tests/pages/user-menu/preferences.spec.ts b/cypress/e2e/tests/pages/user-menu/preferences.spec.ts index 73547881e5d..b0bdb131ab5 100644 --- a/cypress/e2e/tests/pages/user-menu/preferences.spec.ts +++ b/cypress/e2e/tests/pages/user-menu/preferences.spec.ts @@ -104,58 +104,58 @@ describe('User can update their preferences', () => { } }); - it.skip('[Vue3 Skip]: Can select login landing page', { tags: ['@userMenu', '@adminUser'] }, () => { - /* - Select each radio button and verify its highlighted - Validate http request's payload & response contain correct values per selection - Verify user is landing on correct page after login - Verify selection is preserved after logout/login - */ - - const landingPageOptions = [ - { - index: '0', value: '"home"', page: '/home' - }, - { - index: '1', value: '"last-visited"', page: 'c/_/manager/provisioning.cattle.io.cluster' - }, - { // This option only works when there is an existing local cluster - index: '2', value: '{\"name\":\"c-cluster\",\"params\":{\"cluster\":\"local\"}}', page: '/explore' - }, - ]; - - prefPage.goTo(); - prefPage.landingPageRadioBtn().checkVisible(); - landingPageOptions.forEach((key) => { - cy.intercept('PUT', 'v1/userpreferences/*').as(`prefUpdate${ key.value }`); - prefPage.landingPageRadioBtn().set(parseInt(key.index)); - cy.wait(`@prefUpdate${ key.value }`).then(({ request, response }) => { - expect(response?.statusCode).to.eq(200); - expect(request.body.data).to.have.property('after-login-route', key.value); - expect(response?.body.data).to.have.property('after-login-route', key.value); - }); - prefPage.landingPageRadioBtn().isChecked(parseInt(key.index)); - - // NOTE: Ideally we'd like to verify user is landing on correct page after login however there are issues with the login command - - // if key is 1, navigate to cluster manager page and then do validations, else just do validations - // if (parseInt(key.index) === 1) { - // cy.intercept('PUT', 'v1/userpreferences/*').as('userPref'); - // clusterManagerPage.goTo(); - // clusterManagerPage.list().checkVisible(); - // cy.wait('@userPref').its('response.statusCode').should('eq', 200); - // } - - // userMenu.toggle(); - // userMenu.isOpen(); - // userMenu.clickMenuItem('Log Out'); - // cy.login(); - // cy.visit(`${ Cypress.config().baseUrl }`); - // cy.url().should('include', value[1]); - // prefPage.goTo(); - // prefPage.landingPageRadioBtn().isChecked(key); - }); - }); + // it.skip('[Vue3 Skip]: Can select login landing page', { tags: ['@userMenu', '@adminUser'] }, () => { + // /* + // Select each radio button and verify its highlighted + // Validate http request's payload & response contain correct values per selection + // Verify user is landing on correct page after login + // Verify selection is preserved after logout/login + // */ + + // const landingPageOptions = [ + // { + // index: '0', value: '"home"', page: '/home' + // }, + // { + // index: '1', value: '"last-visited"', page: 'c/_/manager/provisioning.cattle.io.cluster' + // }, + // { // This option only works when there is an existing local cluster + // index: '2', value: '{\"name\":\"c-cluster\",\"params\":{\"cluster\":\"local\"}}', page: '/explore' + // }, + // ]; + + // prefPage.goTo(); + // prefPage.landingPageRadioBtn().checkVisible(); + // landingPageOptions.forEach((key) => { + // cy.intercept('PUT', 'v1/userpreferences/*').as(`prefUpdate${ key.value }`); + // prefPage.landingPageRadioBtn().set(parseInt(key.index)); + // cy.wait(`@prefUpdate${ key.value }`).then(({ request, response }) => { + // expect(response?.statusCode).to.eq(200); + // expect(request.body.data).to.have.property('after-login-route', key.value); + // expect(response?.body.data).to.have.property('after-login-route', key.value); + // }); + // prefPage.landingPageRadioBtn().isChecked(parseInt(key.index)); + + // // NOTE: Ideally we'd like to verify user is landing on correct page after login however there are issues with the login command + + // // if key is 1, navigate to cluster manager page and then do validations, else just do validations + // // if (parseInt(key.index) === 1) { + // // cy.intercept('PUT', 'v1/userpreferences/*').as('userPref'); + // // clusterManagerPage.goTo(); + // // clusterManagerPage.list().checkVisible(); + // // cy.wait('@userPref').its('response.statusCode').should('eq', 200); + // // } + + // // userMenu.toggle(); + // // userMenu.isOpen(); + // // userMenu.clickMenuItem('Log Out'); + // // cy.login(); + // // cy.visit(`${ Cypress.config().baseUrl }`); + // // cy.url().should('include', value[1]); + // // prefPage.goTo(); + // // prefPage.landingPageRadioBtn().isChecked(key); + // }); + // }); it('Can select date format', { tags: ['@userMenu', '@adminUser', '@standardUser'] }, () => { /* @@ -426,31 +426,31 @@ describe('User can update their preferences', () => { yamlEditor.keyboardMappingIndicator().checkNotExists(); }); - it.skip('[Vue3 Skip]: does show any indicator for non-default keyboard mapping', () => { - prefPage.goTo(); - prefPage.keymapButtons().checkVisible(); + // it.skip('[Vue3 Skip]: does show any indicator for non-default keyboard mapping', () => { + // prefPage.goTo(); + // prefPage.keymapButtons().checkVisible(); - prefPage.keymapButtons().set(VIM); - prefPage.keymapButtons().isSelected(VIM); + // prefPage.keymapButtons().set(VIM); + // prefPage.keymapButtons().isSelected(VIM); - const yamlEditor = new ResourceYamlEditorPagePo(RESOURCE_FOR_CREATE_YAML); + // const yamlEditor = new ResourceYamlEditorPagePo(RESOURCE_FOR_CREATE_YAML); - yamlEditor.goTo(); - yamlEditor.waitForPage(); + // yamlEditor.goTo(); + // yamlEditor.waitForPage(); - yamlEditor.keyboardMappingIndicator().checkExists(); - yamlEditor.keyboardMappingIndicator().checkVisible(); + // yamlEditor.keyboardMappingIndicator().checkExists(); + // yamlEditor.keyboardMappingIndicator().checkVisible(); - yamlEditor.keyboardMappingIndicator().showTooltip(); - yamlEditor.keyboardMappingIndicator().getTooltipContent().should('be.visible'); - yamlEditor.keyboardMappingIndicator().getTooltipContent().contains('Key mapping: Vim'); + // yamlEditor.keyboardMappingIndicator().showTooltip(); + // yamlEditor.keyboardMappingIndicator().getTooltipContent().should('be.visible'); + // yamlEditor.keyboardMappingIndicator().getTooltipContent().contains('Key mapping: Vim'); - // Reset keyboard mapping - prefPage.goTo(); - prefPage.keymapButtons().checkVisible(); + // // Reset keyboard mapping + // prefPage.goTo(); + // prefPage.keymapButtons().checkVisible(); - prefPage.keymapButtons().set(NORMAL_HUMAN); - }); + // prefPage.keymapButtons().set(NORMAL_HUMAN); + // }); }); it('Can select a Helm Charts option', { tags: ['@userMenu', '@adminUser', '@standardUser'] }, () => { diff --git a/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts b/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts index 2d1e23108ad..83608981674 100644 --- a/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts @@ -35,29 +35,29 @@ describe('AzureAD', { tags: ['@adminUser', '@usersAndAuths'] }, () => { azureadPo.mastheadTitle().should('include', `AzureAD`); }); - it.skip('[Vue3 Skip]: sends correct request to create standard Azure AD', () => { - cy.intercept('POST', 'v3/azureADConfigs/azuread?action=configureTest', (req) => { - expect(req.body.tenantId).to.equal(tenantId); - expect(req.body.applicationId).to.equal(applicationId); - expect(req.body.applicationSecret).to.equal(appSecret); - expect(req.body.endpoint).to.equal(defaultEndpoint); - expect(req.body.authEndpoint).to.equal(defaultAuthEndpoint); - expect(req.body.tokenEndpoint).to.equal(defaultTokenEndpoint); - expect(req.body.graphEndpoint).to.equal(defaultGraphEndpoint); + // it.skip('[Vue3 Skip]: sends correct request to create standard Azure AD', () => { + // cy.intercept('POST', 'v3/azureADConfigs/azuread?action=configureTest', (req) => { + // expect(req.body.tenantId).to.equal(tenantId); + // expect(req.body.applicationId).to.equal(applicationId); + // expect(req.body.applicationSecret).to.equal(appSecret); + // expect(req.body.endpoint).to.equal(defaultEndpoint); + // expect(req.body.authEndpoint).to.equal(defaultAuthEndpoint); + // expect(req.body.tokenEndpoint).to.equal(defaultTokenEndpoint); + // expect(req.body.graphEndpoint).to.equal(defaultGraphEndpoint); - req.reply(mockStatusCode, mockBody); - }).as('configureTest'); + // req.reply(mockStatusCode, mockBody); + // }).as('configureTest'); - // save should be disabled before values are filled - azureadPo.saveButton().expectToBeDisabled(); - azureadPo.enterTenantId(tenantId); - azureadPo.enterApplicationId(applicationId); - azureadPo.enterApplicationSecret(appSecret); - // save should be enabled after values are filled - azureadPo.saveButton().expectToBeEnabled(); - azureadPo.save(); - cy.wait('@configureTest'); - }); + // // save should be disabled before values are filled + // azureadPo.saveButton().expectToBeDisabled(); + // azureadPo.enterTenantId(tenantId); + // azureadPo.enterApplicationId(applicationId); + // azureadPo.enterApplicationSecret(appSecret); + // // save should be enabled after values are filled + // azureadPo.saveButton().expectToBeEnabled(); + // azureadPo.save(); + // cy.wait('@configureTest'); + // }); it('sends correct request to create custom Azure AD', () => { cy.intercept('POST', 'v3/azureADConfigs/azuread?action=configureTest', (req) => { From e2ba31946d02f125d7cc17fbcf8cf7f7ed19d547 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 15:27:43 +0000 Subject: [PATCH 18/35] improve tableRowsPerPageAndNamespaceFilter --- .../support/commands/rancher-api-commands.ts | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 9f4b56381a9..3320723ec84 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -517,7 +517,7 @@ Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId if (!testFn(resp)) { retries = retries - 1; if (retries === 0) { - return Promise.reject(`Failed wait for expected value for ${ url }`); + return Promise.reject(new Error(`Failed wait for expected value for ${ url }`)); } cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting @@ -548,7 +548,7 @@ Cypress.Commands.add('waitForRancherResources', (prefix, resourceType, expectedR retries = retries - 1; if (retries === 0) return resp; // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(3000); + cy.wait(1000); retry(); } }); @@ -857,30 +857,30 @@ Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:stri cy.setRancherResource('v1', 'userpreferences', userId, payload); cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => { - const compare = (core, subset) => { - const entries = Object.entries(subset); - - for (let i = 0; i < entries.length; i++) { - const [key, subsetValue] = entries[i]; - const coreValue = core[key]; - - if (typeof subsetValue === 'object') { - if (!compare(coreValue, subsetValue)) { - return false; - } - } else if (subsetValue !== coreValue) { - return false; - } - } - - return true; - }; - return compare(resp?.body, payload); }); }); }); +const compare = (core, subset) => { + const entries = Object.entries(subset); + + for (let i = 0; i < entries.length; i++) { + const [key, subsetValue] = entries[i]; + const coreValue = core[key]; + + if (typeof subsetValue === 'object') { + if (!compare(coreValue, subsetValue)) { + return false; + } + } else if (subsetValue !== coreValue) { + return false; + } + } + + return true; +}; + /** * Create token (API Keys) */ @@ -990,8 +990,7 @@ Cypress.Commands.add('fetchRevision', () => { Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, clusterName: string, groupBy: string, namespaceFilter: string) => { return cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { const userId = resp.body.data[0].id.trim(); - - cy.setRancherResource('v1', `userpreferences`, userId, { + const payload = { id: `${ userId }`, type: 'userpreference', data: { @@ -1000,6 +999,12 @@ Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, cluste 'group-by': groupBy, 'ns-by-cluster': namespaceFilter } + }; + + cy.setRancherResource('v1', `userpreferences`, userId, payload); + + cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => { + return compare(resp?.body, payload); }); }); }); From 44bbe58a2993b5651604168bf33b20a5bd6d460e Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 18:00:59 +0000 Subject: [PATCH 19/35] fix project-namespace --- .../pages/explorer2/project-namespace.spec.ts | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts b/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts index fedb2e18151..cb3d086a27d 100644 --- a/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/project-namespace.spec.ts @@ -107,38 +107,38 @@ describe('Projects/Namespaces', { tags: ['@explorer2', '@adminUser'] }, () => { }); // https://github.com/rancher/dashboard/issues/11881 - // it.skip('displays the most recent error after resolving a single error in a form with multiple errors', () => { - // projectsNamespacesPage.createProjectButtonClick(); - - // // Create the first error - // projectsNamespacesPage.name().set('test-1234'); - // projectsNamespacesPage.tabResourceQuotas().click(); - // projectsNamespacesPage.btnAddResource().click(); - // projectsNamespacesPage.inputProjectLimit().set('50'); - // projectsNamespacesPage.buttonSubmit().click(); - - // // Create a second error - // projectsNamespacesPage.tabContainerDefaultResourceLimit().click(); - // projectsNamespacesPage.inputCpuReservation().set('1000'); - // projectsNamespacesPage.inputMemoryReservation().set('128'); - // projectsNamespacesPage.inputCpuLimit().set('200'); - // projectsNamespacesPage.inputMemoryLimit().set('64'); - // projectsNamespacesPage.buttonSubmit().click(); - - // // Assert that there is only a single error message - // projectsNamespacesPage.bannerError(0).should('be.visible').contains('does not have all fields defined on a resourceQuota'); - // projectsNamespacesPage.bannerError(0).should('have.length', 1); - // projectsNamespacesPage.bannerError(1).should('have.length', 0); - - // // resolve the first error - // projectsNamespacesPage.tabResourceQuotas().click(); - // projectsNamespacesPage.inputNamespaceDefaultLimit().set('50'); - // projectsNamespacesPage.buttonSubmit().click(); + // it.skip('displays the most recent error after resolving a single error in a form with multiple errors', () => { + // projectsNamespacesPage.createProjectButtonClick(); + + // // Create the first error + // projectsNamespacesPage.name().set('test-1234'); + // projectsNamespacesPage.tabResourceQuotas().click(); + // projectsNamespacesPage.btnAddResource().click(); + // projectsNamespacesPage.inputProjectLimit().set('50'); + // projectsNamespacesPage.buttonSubmit().click(); + + // // Create a second error + // projectsNamespacesPage.tabContainerDefaultResourceLimit().click(); + // projectsNamespacesPage.inputCpuReservation().set('1000'); + // projectsNamespacesPage.inputMemoryReservation().set('128'); + // projectsNamespacesPage.inputCpuLimit().set('200'); + // projectsNamespacesPage.inputMemoryLimit().set('64'); + // projectsNamespacesPage.buttonSubmit().click(); + + // // Assert that there is only a single error message + // projectsNamespacesPage.bannerError(0).should('be.visible').contains('does not have all fields defined on a resourceQuota'); + // projectsNamespacesPage.bannerError(0).should('have.length', 1); + // projectsNamespacesPage.bannerError(1).should('have.length', 0); + + // // resolve the first error + // projectsNamespacesPage.tabResourceQuotas().click(); + // projectsNamespacesPage.inputNamespaceDefaultLimit().set('50'); + // projectsNamespacesPage.buttonSubmit().click(); // // Click on Create again and assert that there is only a single error // projectsNamespacesPage.bannerError(0).should('be.visible').contains('admission webhook "rancher.cattle.io.projects.management.cattle.io" denied the request'); // projectsNamespacesPage.bannerError(0).should('have.length', 1); // projectsNamespacesPage.bannerError(1).should('have.length', 0); // }); - // }); + }); }); From 1b3581d8292078c650bc8031ffd4c263eb2023ca Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Thu, 31 Oct 2024 20:05:20 +0000 Subject: [PATCH 20/35] more fixes... --- .../e2e/blueprints/explorer/rbac/roles-get.ts | 20 +- .../pages/explorer/api/api-services.spec.ts | 13 +- .../more-resources/rbac/roles.spec.ts | 13 +- .../pages/explorer2/workloads/pods.spec.ts | 218 +++++++++--------- cypress/e2e/tests/setup/rancher-setup.spec.ts | 3 +- cypress/globals.d.ts | 2 +- .../support/commands/rancher-api-commands.ts | 21 +- 7 files changed, 149 insertions(+), 141 deletions(-) diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index c601640440e..53c62f00f17 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -10,7 +10,7 @@ const rolesGetResponseEmpty = { }; // GET /v1/rbac.authorization.k8s.io.roles - small set of roles data -const rolesResponseSmallSet = { +const rolesResponseSmallSet = (namespace = 'kube-system') => ({ type: 'collection', links: { self: 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, createTypes: { 'rbac.authorization.k8s.io.role': 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, @@ -87,13 +87,13 @@ const rolesResponseSmallSet = { ] }, { - id: 'kube-system/extension-apiserver-authentication-reader', + id: `${ namespace }/extension-apiserver-authentication-reader`, type: 'rbac.authorization.k8s.io.role', links: { - remove: 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles/kube-system/extension-apiserver-authentication-reader', - self: 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles/kube-system/extension-apiserver-authentication-reader', - update: 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles/kube-system/extension-apiserver-authentication-reader', - view: 'https://localhost:8005/apis/rbac.authorization.k8s.io/v1/namespaces/kube-system/roles/extension-apiserver-authentication-reader' + remove: `https://localhost:8005/v1/rbac.authorization.k8s.io.roles/${ namespace }/extension-apiserver-authentication-reader`, + self: `https://localhost:8005/v1/rbac.authorization.k8s.io.roles/${ namespace }/extension-apiserver-authentication-reader`, + update: `https://localhost:8005/v1/rbac.authorization.k8s.io.roles/${ namespace }/extension-apiserver-authentication-reader`, + view: `https://localhost:8005/apis/rbac.authorization.k8s.io/v1/namespaces/${ namespace }/roles/extension-apiserver-authentication-reader` }, apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'Role', @@ -109,7 +109,7 @@ const rolesResponseSmallSet = { ], labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, name: 'extension-apiserver-authentication-reader', - namespace: 'kube-system', + namespace, relationships: null, state: { error: false, @@ -139,7 +139,7 @@ const rolesResponseSmallSet = { ] }, ] -}; +}); function reply(statusCode: number, body: any) { return (req) => { @@ -154,6 +154,6 @@ export function rolesNoData(): Cypress.Chainable { return cy.intercept('GET', '/v1/rbac.authorization.k8s.io.roles?*', reply(200, rolesGetResponseEmpty)).as('rolesNoData'); } -export function generateRolesDataSmall(): Cypress.Chainable { - return cy.intercept('GET', '/v1/rbac.authorization.k8s.io.roles?*', reply(200, rolesResponseSmallSet)).as('rolesDataSmall'); +export function generateRolesDataSmall(as: string, namespace?: string): Cypress.Chainable { + return cy.intercept('GET', '/v1/rbac.authorization.k8s.io.roles?*', reply(200, rolesResponseSmallSet(namespace))).as(as); } diff --git a/cypress/e2e/tests/pages/explorer/api/api-services.spec.ts b/cypress/e2e/tests/pages/explorer/api/api-services.spec.ts index 4bff4f2107e..09116afa5c9 100644 --- a/cypress/e2e/tests/pages/explorer/api/api-services.spec.ts +++ b/cypress/e2e/tests/pages/explorer/api/api-services.spec.ts @@ -15,14 +15,17 @@ describe('Cluster Explorer', { tags: ['@explorer', '@adminUser'] }, () => { apiServicesPage.title().should('contain', 'APIServices'); const sortableTable = apiServicesPage.sortableTable(); + const count = 3; - sortableTable.rowElements().its('length').then((count: number) => { - cy.keyboardControls({ shiftKey: true, key: 'j' }, count + 2); + sortableTable.rowElements().should(($els) => { + expect($els.length).to.be.greaterThan(count - 1); + }); - sortableTable.selectedCountText().should('contain', `${ count } selected`); + cy.keyboardControls({ shiftKey: true, key: 'j' }, count); - sortableTable.selectedCount().should('eq', count); - }); + sortableTable.selectedCountText().should('contain', `${ count } selected`); + + sortableTable.selectedCount().should('eq', count); }); }); }); diff --git a/cypress/e2e/tests/pages/explorer/more-resources/rbac/roles.spec.ts b/cypress/e2e/tests/pages/explorer/more-resources/rbac/roles.spec.ts index 766a398ec44..6d70587a112 100644 --- a/cypress/e2e/tests/pages/explorer/more-resources/rbac/roles.spec.ts +++ b/cypress/e2e/tests/pages/explorer/more-resources/rbac/roles.spec.ts @@ -31,10 +31,10 @@ describe('Roles', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, ( }); it('flat list: validate roles table', () => { - generateRolesDataSmall(); + generateRolesDataSmall('rolesDataSmall1'); rolesPage.goTo(); rolesPage.waitForPage(); - cy.wait('@rolesDataSmall'); + cy.wait('@rolesDataSmall1'); // check table headers are visible const expectedHeaders = ['State', 'Name', 'Namespace', 'Created At']; @@ -52,10 +52,12 @@ describe('Roles', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, ( }); it('group by namespace: validate roles table', () => { - generateRolesDataSmall(); + const ns = 'saddsfdsf'; + + generateRolesDataSmall('rolesDataSmall2', ns); rolesPage.goTo(); rolesPage.waitForPage(); - cy.wait('@rolesDataSmall'); + cy.wait('@rolesDataSmall2'); // group by namespace rolesPage.list().resourceTable().sortableTable().groupByButtons(1) @@ -73,10 +75,9 @@ describe('Roles', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, ( rolesPage.list().resourceTable().sortableTable().checkVisible(); rolesPage.list().resourceTable().sortableTable().checkLoadingIndicatorNotVisible(); rolesPage.list().resourceTable().sortableTable().noRowsShouldNotExist(); - rolesPage.list().resourceTable().sortableTable().groupElementWithName('Namespace: kube-system') + rolesPage.list().resourceTable().sortableTable().groupElementWithName(`Namespace: ${ ns }`) .scrollIntoView() .should('be.visible'); - rolesPage.list().resourceTable().sortableTable().checkRowCount(false, 2); }); after('clean up', () => { diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 85c154db76b..162ba45132a 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -18,7 +18,6 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( const podNamesList = []; let nsName1: string; let nsName2: string; - let initialCount: number; let rootResourceName: string; before('set up', () => { @@ -26,11 +25,6 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( rootResourceName = root; }); - cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', '{\"local\":[]}'); - cy.getRancherResource('v1', 'pods').then((resp: Cypress.Response) => { - initialCount = resp.body.count; - }); - cy.createE2EResourceName('ns1').then((ns1) => { nsName1 = ns1; // create namespace @@ -48,17 +42,19 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( i++; } - }); - cy.createE2EResourceName('ns2').then((ns2) => { - nsName2 = ns2; + cy.createE2EResourceName('ns2').then((ns2) => { + nsName2 = ns2; - // create namespace - cy.createNamespace(nsName2); + // create namespace + cy.createNamespace(nsName2); + + // create unique pod for filtering/sorting test + cy.createPod(nsName2, uniquePod, 'nginx:alpine', true, { createNameOptions: { prefixContext: true } }).then((resp) => { + uniquePod = resp.body.metadata.name; + }); - // create unique pod for filtering/sorting test - cy.createPod(nsName2, uniquePod, 'nginx:alpine', true, { createNameOptions: { prefixContext: true } }).then((resp) => { - uniquePod = resp.body.metadata.name; + cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', `{\"local\":[\"ns://${ nsName1 }\",\"ns://${ nsName2 }\"]}`); }); }); }); @@ -68,9 +64,9 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( workloadsPodPage.waitForPage(); // check pods count - const count = initialCount + 26; + const count = podNamesList.length + 1; - cy.waitForRancherResources('v1', 'pods', count).then((resp: Cypress.Response) => { + cy.waitForRancherResources('v1', 'pods', count - 1, true).then((resp: Cypress.Response) => { // pagination is visible workloadsPodPage.sortableTable().pagination().checkVisible(); @@ -181,6 +177,8 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); it('pagination is hidden', () => { + cy.tableRowsPerPageAndNamespaceFilter(10, 'local', 'none', '{"local":[]}'); + // generate small set of pods data generatePodsDataSmall(); HomePagePo.goTo(); // this is needed here for the intercept to work @@ -204,135 +202,135 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); }); - describe('Should open a terminal', () => { - beforeEach(() => { - workloadsPodPage.goTo(); - }); + // describe('Should open a terminal', () => { + // beforeEach(() => { + // workloadsPodPage.goTo(); + // }); - it('should open a pod shell', () => { - const shellPodPo = new PodPo(); + // it('should open a pod shell', () => { + // const shellPodPo = new PodPo(); - shellPodPo.openPodShell(); - }); - }); + // shellPodPo.openPodShell(); + // }); + // }); - describe('When cloning a pod', () => { - const { name: origPodName, namespace } = createPodBlueprint.metadata; - const { name: clonePodName } = clonePodBlueprint.metadata; + // describe('When cloning a pod', () => { + // const { name: origPodName, namespace } = createPodBlueprint.metadata; + // const { name: clonePodName } = clonePodBlueprint.metadata; - beforeEach(() => { - cy.intercept('GET', `/v1/pods/${ namespace }/${ origPodName }?exclude=metadata.managedFields`).as('origPod'); - cy.intercept('GET', `/v1/pods/${ namespace }/${ clonePodName }?exclude=metadata.managedFields`).as('clonedPod'); + // beforeEach(() => { + // cy.intercept('GET', `/v1/pods/${ namespace }/${ origPodName }?exclude=metadata.managedFields`).as('origPod'); + // cy.intercept('GET', `/v1/pods/${ namespace }/${ clonePodName }?exclude=metadata.managedFields`).as('clonedPod'); - workloadsPodPage.goTo(); + // workloadsPodPage.goTo(); - const createPodPo = new PodPo(); + // const createPodPo = new PodPo(); - createPodPo.createPodViaKubectl(createPodBlueprint); - }); + // createPodPo.createPodViaKubectl(createPodBlueprint); + // }); - it(`Should have same spec as the original pod`, () => { - const cloneCreatePodPage = new WorkLoadsPodDetailsPagePo(origPodName, { mode: 'clone' }); + // it(`Should have same spec as the original pod`, () => { + // const cloneCreatePodPage = new WorkLoadsPodDetailsPagePo(origPodName, { mode: 'clone' }); - cloneCreatePodPage.goTo(); + // cloneCreatePodPage.goTo(); - let origPodSpec: any; + // let origPodSpec: any; - cy.wait('@origPod', { timeout: 20000 }) - .then(({ response }) => { - expect(response?.statusCode).to.eq(200); - origPodSpec = response?.body.spec; - expect(origPodSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); - }); + // cy.wait('@origPod', { timeout: 20000 }) + // .then(({ response }) => { + // expect(response?.statusCode).to.eq(200); + // origPodSpec = response?.body.spec; + // expect(origPodSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); + // }); - const createClonePo = new PodPo(); + // const createClonePo = new PodPo(); - // Each pod need a unique name - createClonePo.nameNsDescription().name().set(clonePodName); - createClonePo.save(); + // // Each pod need a unique name + // createClonePo.nameNsDescription().name().set(clonePodName); + // createClonePo.save(); - workloadsPodPage.waitForPage(); - workloadsPodPage.list().checkVisible(); - workloadsPodPage.list().resourceTable().sortableTable().filter(clonePodName); - workloadsPodPage.list().resourceTable().sortableTable().rowWithName(clonePodName) - .checkExists(); + // workloadsPodPage.waitForPage(); + // workloadsPodPage.list().checkVisible(); + // workloadsPodPage.list().resourceTable().sortableTable().filter(clonePodName); + // workloadsPodPage.list().resourceTable().sortableTable().rowWithName(clonePodName) + // .checkExists(); - // Simple test to assert we haven't broken Pods detail page - // https://github.com/rancher/dashboard/issues/10490 - const clonedPodPage = new WorkLoadsPodDetailsPagePo(clonePodName); + // // Simple test to assert we haven't broken Pods detail page + // // https://github.com/rancher/dashboard/issues/10490 + // const clonedPodPage = new WorkLoadsPodDetailsPagePo(clonePodName); - clonedPodPage.goTo();// Needs to be goTo to ensure http request is fired - clonedPodPage.waitForPage(); + // clonedPodPage.goTo();// Needs to be goTo to ensure http request is fired + // clonedPodPage.waitForPage(); - cy.wait('@clonedPod', { timeout: 20000 }) - .then(({ response }) => { - expect(response?.statusCode).to.eq(200); + // cy.wait('@clonedPod', { timeout: 20000 }) + // .then(({ response }) => { + // expect(response?.statusCode).to.eq(200); - const clonedSpec = response?.body?.spec; + // const clonedSpec = response?.body?.spec; - // In Dashboard adds empty affinity object by default - // Remove this to compare - if (!Object.keys(clonedSpec.affinity).length) { - delete clonedSpec.affinity; - } + // // In Dashboard adds empty affinity object by default + // // Remove this to compare + // if (!Object.keys(clonedSpec.affinity).length) { + // delete clonedSpec.affinity; + // } - expect(clonedSpec).to.deep.eq(origPodSpec); - expect(clonedSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); - }); - }); - }); + // expect(clonedSpec).to.deep.eq(origPodSpec); + // expect(clonedSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); + // }); + // }); + // }); - describe.skip('[Vue3 Skip]: should delete pod', () => { - const podName = `pod-${ Date.now() }`; + // describe.skip('[Vue3 Skip]: should delete pod', () => { + // const podName = `pod-${ Date.now() }`; - beforeEach(() => { - workloadsPodPage.goTo(); - }); + // beforeEach(() => { + // workloadsPodPage.goTo(); + // }); - it('dialog should open/close as expected', () => { - const podCreatePage = new WorkloadsPodsCreatePagePo('local'); + // it('dialog should open/close as expected', () => { + // const podCreatePage = new WorkloadsPodsCreatePagePo('local'); - podCreatePage.goTo(); + // podCreatePage.goTo(); - podCreatePage.createWithUI(podName, 'nginx', 'default'); + // podCreatePage.createWithUI(podName, 'nginx', 'default'); - // Should be on the list view - const podsListPage = new WorkloadsPodsListPagePo('local'); + // // Should be on the list view + // const podsListPage = new WorkloadsPodsListPagePo('local'); - // Filter the list to just show the newly created pod - podsListPage.list().resourceTable().sortableTable().filter(podName); - podsListPage.list().resourceTable().sortableTable().checkRowCount(false, 1); + // // Filter the list to just show the newly created pod + // podsListPage.list().resourceTable().sortableTable().filter(podName); + // podsListPage.list().resourceTable().sortableTable().checkRowCount(false, 1); - // Open action menu and delete for the first item - podsListPage.list().resourceTable().sortableTable().rowActionMenuOpen(podName) - .getMenuItem('Delete') - .click(); + // // Open action menu and delete for the first item + // podsListPage.list().resourceTable().sortableTable().rowActionMenuOpen(podName) + // .getMenuItem('Delete') + // .click(); - let dialog = new PromptRemove(); + // let dialog = new PromptRemove(); - dialog.checkExists(); - dialog.checkVisible(); + // dialog.checkExists(); + // dialog.checkVisible(); - dialog.cancel(); - dialog.checkNotExists(); + // dialog.cancel(); + // dialog.checkNotExists(); - podsListPage.list().resourceTable().sortableTable().checkRowCount(false, 1); + // podsListPage.list().resourceTable().sortableTable().checkRowCount(false, 1); - // Open action menu and delete for the first item - podsListPage.list().resourceTable().sortableTable().rowActionMenuOpen(podName) - .getMenuItem('Delete') - .click(); + // // Open action menu and delete for the first item + // podsListPage.list().resourceTable().sortableTable().rowActionMenuOpen(podName) + // .getMenuItem('Delete') + // .click(); - dialog = new PromptRemove(); + // dialog = new PromptRemove(); - dialog.checkExists(); - dialog.checkVisible(); - dialog.remove(); - dialog.checkNotExists(); + // dialog.checkExists(); + // dialog.checkVisible(); + // dialog.remove(); + // dialog.checkNotExists(); - podsListPage.list().resourceTable().sortableTable().checkRowCount(true, 1, true); + // podsListPage.list().resourceTable().sortableTable().checkRowCount(true, 1, true); - podsListPage.list().resourceTable().sortableTable().resetFilter(); - }); - }); + // podsListPage.list().resourceTable().sortableTable().resetFilter(); + // }); + // }); }); diff --git a/cypress/e2e/tests/setup/rancher-setup.spec.ts b/cypress/e2e/tests/setup/rancher-setup.spec.ts index 3d4c4d7a897..3aabbede828 100644 --- a/cypress/e2e/tests/setup/rancher-setup.spec.ts +++ b/cypress/e2e/tests/setup/rancher-setup.spec.ts @@ -107,7 +107,8 @@ describe('Rancher setup', { tags: ['@adminUserSetup', '@standardUserSetup', '@se clusterId: 'local', projectName: 'Default', role: 'project-member', - } + }, + password: Cypress.env('password') }); }); }); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index a11189d2691..f1abff0fc6f 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -94,7 +94,7 @@ declare global { setRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, body: any): Chainable; createRancherResource(prefix: 'v3' | 'v1', resourceType: string, body: any): Chainable; waitForRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, testFn: (resp: any) => boolean): Chainable; - waitForRancherResources(prefix: 'v3' | 'v1', resourceType: string, expectedResourcesTotal: number): Chainable; + waitForRancherResources(prefix: 'v3' | 'v1', resourceType: string, expectedResourcesTotal: number, greaterThan: boolean): Chainable; deleteRancherResource(prefix: 'v3' | 'v1' | 'k8s', resourceType: string, resourceId: string, failOnStatusCode?: boolean): Chainable; deleteNodeTemplate(nodeTemplateId: string, timeout?: number, failOnStatusCode?: boolean) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 3320723ec84..e73adaa7235 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -529,7 +529,7 @@ Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId return retry(); }); -Cypress.Commands.add('waitForRancherResources', (prefix, resourceType, expectedResourcesTotal) => { +Cypress.Commands.add('waitForRancherResources', (prefix, resourceType, expectedResourcesTotal, greaterThan) => { const url = `${ Cypress.env('api') }/${ prefix }/${ resourceType }`; let retries = 20; @@ -543,14 +543,19 @@ Cypress.Commands.add('waitForRancherResources', (prefix, resourceType, expectedR }, }) .then((resp) => { - if (resp.body.count === expectedResourcesTotal) return resp; - else { - retries = retries - 1; - if (retries === 0) return resp; - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(1000); - retry(); + if (greaterThan) { + if (resp.body.count > expectedResourcesTotal) { + return resp; + } + } else if (resp.body.count === expectedResourcesTotal) { + return resp; } + + retries = retries - 1; + if (retries === 0) return resp; + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); + retry(); }); }; From baba55ee53bbd3d99aa24948ca340e7e5cdc3cb7 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 08:49:43 +0000 Subject: [PATCH 21/35] Revert "Dont include junk revision in mock resources" This reverts commit 9aaaabb02c8f78454355714329b9910d46065821. --- .../machine-deployments-edit.yml | 1 + .../cluster_management/machine-sets-edit.yml | 1 + .../cluster_management/machines-edit.yml | 1 + .../pod-security-admissions-payload.ts | 12 +- .../e2e/blueprints/explorer/cluster/events.ts | 27 +-- .../explorer/core/service-accounts-get.ts | 11 +- .../blueprints/explorer/fleet/contents-get.ts | 20 +- .../api/custom-resource-definition-get.ts | 12 +- .../rbac/cluster-role-bindings-get.ts | 8 +- .../explorer/rbac/cluster-roles-get.ts | 14 +- .../explorer/rbac/role-bindings-get.ts | 11 +- .../e2e/blueprints/explorer/rbac/roles-get.ts | 13 +- .../storage/persistent-volume-claims-get.ts | 3 + .../storage/persistent-volumes-get.ts | 3 + .../explorer/storage/storage-classes-get.ts | 3 + .../deployments/deployment-create.ts | 3 +- .../workloads/deployments/deployment-get.ts | 3 +- .../workloads/deployments/deplyment-list.ts | 41 ++-- .../explorer/workloads/pods/pods-get.ts | 9 +- .../horizontal-pod-autoscalers-get.ts | 3 + .../service-discovery/ingresses-get.ts | 16 +- .../service-discovery/services-get.ts | 17 +- .../fleet/cluster-registration-tokens-get.ts | 5 +- .../e2e/blueprints/fleet/workspaces-get.ts | 7 +- .../global_settings/home-links-response.ts | 14 +- ...tal-ocean-cluster-provisioning-response.ts | 4 +- .../manager/machine-pool-config-response.ts | 3 +- cypress/e2e/blueprints/nav/edit-cluster.ts | 28 +-- cypress/e2e/blueprints/nav/fake-cluster.ts | 66 ++++--- .../other-products/opa-gatekeeper.js | 25 ++- .../other-products/v2-monitoring.js | 176 +++++++++++------- .../e2e/blueprints/roles/global-roles-get.ts | 6 +- .../explorer/dashboard/certificates.spec.ts | 9 +- .../e2e/tests/pages/manager/mock-responses.ts | 3 +- 34 files changed, 372 insertions(+), 206 deletions(-) diff --git a/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml index 550edf51b52..45a107e2f3a 100644 --- a/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml @@ -24,6 +24,7 @@ metadata: time: '2023-12-07T18:14:50Z' name: e2e-machinedeployment-name-1701972886077 namespace: default + resourceVersion: '22851' uid: f5bf052d-7bbf-483a-a20a-b2f6e48d1e15 spec: clusterName: local diff --git a/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml index e3014679c57..c38d55c00b5 100644 --- a/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml @@ -25,6 +25,7 @@ metadata: time: '2023-12-06T23:46:28Z' name: e2e-machine-name-1701906098950 namespace: default + resourceVersion: '647485' uid: 98380f64-0706-4522-8dc2-b91a7f012dcf spec: clusterName: local diff --git a/cypress/e2e/blueprints/cluster_management/machines-edit.yml b/cypress/e2e/blueprints/cluster_management/machines-edit.yml index be4fc9aa762..5b8289e504e 100644 --- a/cypress/e2e/blueprints/cluster_management/machines-edit.yml +++ b/cypress/e2e/blueprints/cluster_management/machines-edit.yml @@ -21,6 +21,7 @@ metadata: time: '2023-12-06T22:21:54Z' name: e2e-machine-name-1701901308645 namespace: default + resourceVersion: '609444' uid: 7d61939a-b44a-4113-a7d1-9db2eda08811 spec: bootstrap: diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts index 7cb4eb41bc1..d817fce64fc 100644 --- a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -10,8 +10,10 @@ export const createPayloadData = { usernames: ['admin', 'user'], runtimeClasses: ['myclass1', 'myclass2'], namespaces: ['ingress-nginx', 'kube-system'] } }, - kind: 'PodSecurityAdmissionConfigurationTemplate', - metadata: { fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465' }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { + fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: '831667' + }, description: 'e2e-pod-security-admission-1705617529465-description' }; @@ -27,7 +29,9 @@ export const updatePayloadData = { usernames: ['admin1', 'user1'], runtimeClasses: ['myclass3', 'myclass4'], namespaces: ['cattle-system', 'cattle-epinio-system'] } }, - kind: 'PodSecurityAdmissionConfigurationTemplate', - metadata: { fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961' }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { + fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: '938739' + }, description: 'e2e-pod-security-admission-1705628550961-description-edit' }; diff --git a/cypress/e2e/blueprints/explorer/cluster/events.ts b/cypress/e2e/blueprints/explorer/cluster/events.ts index ebdf3a750f7..32e7cf41688 100644 --- a/cypress/e2e/blueprints/explorer/cluster/events.ts +++ b/cypress/e2e/blueprints/explorer/cluster/events.ts @@ -37,10 +37,11 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + resourceVersion: '0', + state: { error: false, message: 'Resource is current', name: 'active', @@ -67,10 +68,11 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + resourceVersion: '0', + state: { error: false, message: 'Resource is current', name: 'active', @@ -97,10 +99,11 @@ const eventsGetResponseSmallSet = { 1, 'fleet-agent-0.17d80b90a6d2c7ab' ], - name: 'fleet-agent-0.17d80b90a6d2c7ab', - namespace: 'cattle-fleet-local-system', - relationships: null, - state: { + name: 'fleet-agent-0.17d80b90a6d2c7ab', + namespace: 'cattle-fleet-local-system', + relationships: null, + resourceVersion: '0', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts index 12f7b52514e..b6009faf76c 100644 --- a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts +++ b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts @@ -5,6 +5,7 @@ const serviceAccGetResponseEmpty = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', + revision: '129651', count: 0, data: [] }; @@ -16,6 +17,7 @@ const serviceAcctResponseSmallSet = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', + revision: '129651', count: 3, data: [ { @@ -53,7 +55,8 @@ const serviceAcctResponseSmallSet = { state: 'succeeded' } ], - state: { + resourceVersion: '7124', + state: { error: false, message: 'Resource is current', name: 'active', @@ -101,7 +104,8 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '9344', + state: { error: false, message: 'Resource is current', name: 'active', @@ -161,7 +165,8 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '9342', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts index 2d7dfe30a51..cc478e1acdf 100644 --- a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts +++ b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts @@ -5,6 +5,7 @@ const fleetContentsGetResponseEmpty = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const fleetContentsResponseSmallSet = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', + revision: '123', count: 2, data: [ { @@ -36,10 +38,11 @@ const fleetContentsResponseSmallSet = { 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', '27h' ], - generation: 1, - name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', - relationships: null, - state: { + generation: 1, + name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', + relationships: null, + resourceVersion: '4380255', + state: { error: false, message: 'Resource is current', name: 'active', @@ -67,10 +70,11 @@ const fleetContentsResponseSmallSet = { 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', '9d' ], - generation: 1, - name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', - relationships: null, - state: { + generation: 1, + name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', + relationships: null, + resourceVersion: '8041', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts index 1fb3c6f50d5..37ce83b7b69 100644 --- a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts +++ b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts @@ -25,10 +25,11 @@ const crdsGetResponseSmallSet = { 'users.management.cattle.io', '2024-06-27T20:32:20Z' ], - generation: 1, - name: 'users.management.cattle.io', - relationships: null, - state: { + generation: 1, + name: 'users.management.cattle.io', + relationships: null, + resourceVersion: '4473', + state: { error: false, message: 'CRD is established', name: 'active', @@ -128,7 +129,8 @@ const crdsGetResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '1417', + state: { error: false, message: 'CRD is established', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts index 7369fef70be..b00ce702991 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts @@ -5,6 +5,7 @@ const clusterRoleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const clusterRoleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', + revision: '123', count: 2, data: [ { @@ -56,7 +58,8 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '434584', + state: { error: false, message: 'Resource is current', name: 'active', @@ -115,7 +118,8 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '5149', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts index 977809658f8..8067016d05a 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts @@ -5,6 +5,7 @@ const clusterRolesGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const clusterRolesResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', + revision: '123', count: 2, data: [ { @@ -44,10 +46,11 @@ const clusterRolesResponseSmallSet = { finalizers: [ 'wrangler.cattle.io/auth-prov-v2-crole' ], - labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, - name: 'admin', - relationships: null, - state: { + labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, + name: 'admin', + relationships: null, + resourceVersion: '4878', + state: { error: false, message: 'Resource is current', name: 'active', @@ -91,7 +94,8 @@ const clusterRolesResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '4838', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts index 096362ed1c5..0be3c32a317 100644 --- a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts @@ -5,6 +5,7 @@ const roleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const roleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', + revision: '123', count: 3, data: [ { @@ -64,7 +66,8 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - state: { + resourceVersion: '445143', + state: { error: false, message: 'Resource is current', name: 'active', @@ -131,7 +134,8 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - state: { + resourceVersion: '4386433', + state: { error: false, message: 'Resource is current', name: 'active', @@ -199,7 +203,8 @@ const roleBindingResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '5141', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index 53c62f00f17..7e0ba219f58 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -16,6 +16,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ createTypes: { 'rbac.authorization.k8s.io.role': 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.role', + revision: '123', count: 2, data: [ { @@ -53,7 +54,8 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ state: 'deployed' } ], - state: { + resourceVersion: '6958', + state: { error: false, message: 'Resource is current', name: 'active', @@ -107,11 +109,12 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ finalizers: [ 'wrangler.cattle.io/auth-prov-v2-role' ], - labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, - name: 'extension-apiserver-authentication-reader', + labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, + name: 'extension-apiserver-authentication-reader', namespace, - relationships: null, - state: { + relationships: null, + resourceVersion: '4825', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index fc9ab398a24..1bae8831412 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -5,6 +5,7 @@ const persistentvolumeclaimsGetResponseEmpty = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const persistentvolumeclaimsResponseSmallSet = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', + revision: '123', count: 1, data: [{ id: 'cattle-system/test', @@ -32,6 +34,7 @@ const persistentvolumeclaimsResponseSmallSet = { name: 'test', namespace: 'cattle-system', relationships: null, + resourceVersion: '3952990', state: { error: false, message: '', name: 'pending', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts index 4335711fbc5..8e6e7006c18 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts @@ -5,6 +5,7 @@ const persistentvolumesGetResponseEmpty = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const persistentvolumesResponseSmallSet = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', + revision: '123', count: 1, data: [{ id: 'test', @@ -34,6 +36,7 @@ const persistentvolumesResponseSmallSet = { finalizers: ['kubernetes.io/pv-protection'], name: 'test', relationships: null, + resourceVersion: '3940365', state: { error: false, message: '', name: 'available', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts index 20d4f6cd9c4..b713209f68d 100644 --- a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts @@ -5,6 +5,7 @@ const pstorageclassesGetResponseEmpty = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const storageclassesResponseSmallSet = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', + revision: '123', count: 1, data: [{ id: 'test', @@ -31,6 +33,7 @@ const storageclassesResponseSmallSet = { fields: ['test', 'kubernetes.io/aws-ebs', 'Delete', 'Immediate', false, '7m47s'], name: 'test', relationships: null, + resourceVersion: '3958373', state: { error: false, message: 'Resource is current', name: 'active', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts index 06cd1b6ed7c..3d34689b7a7 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts @@ -209,7 +209,8 @@ export const deploymentCreateResponse = { rel: 'uses' } ], - state: { + resourceVersion: '12999795', + state: { error: false, message: 'replicas: 0/1', name: 'in-progress', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts index 896387a64f1..5518fe4f76e 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts @@ -154,7 +154,8 @@ export const deploymentGetResponse = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '12999825', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts index 9892d24fdd7..2ad01e3b301 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts @@ -4,6 +4,7 @@ export const deploymentCollection = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', + revision: '12999812', count: 15, data: [ @@ -163,7 +164,8 @@ export const deploymentCollection = { transitioning: true } ], - state: { + resourceVersion: '12999806', + state: { error: false, message: 'Deployment does not have minimum availability.', name: 'updating', @@ -253,6 +255,7 @@ export const deploymentCollectionResponseFull = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', + revision: '12999812', count: 15, data: [ { @@ -451,7 +454,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '6109', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -801,7 +805,8 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - state: { + resourceVersion: '3067', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -1107,7 +1112,8 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - state: { + resourceVersion: '3089', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -1385,7 +1391,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '787692', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -2057,7 +2064,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '787803', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -2695,7 +2703,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '787731', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3076,7 +3085,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '12995749', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3505,7 +3515,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '787962', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -3939,7 +3950,8 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - state: { + resourceVersion: '663180', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -4283,7 +4295,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '12900726', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', @@ -4547,7 +4560,8 @@ export const deploymentCollectionResponseFull = { transitioning: true } ], - state: { + resourceVersion: '12999806', + state: { error: false, message: 'Deployment does not have minimum availability.', name: 'updating', @@ -4936,7 +4950,8 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - state: { + resourceVersion: '1377', + state: { error: false, message: 'Deployment is available. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts index df3fe171484..d7c4eb30cd5 100644 --- a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts @@ -49,7 +49,8 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - state: { + resourceVersion: '541786', + state: { error: false, message: '', name: 'running', @@ -247,7 +248,8 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - state: { + resourceVersion: '541885', + state: { error: false, message: '', name: 'running', @@ -445,7 +447,8 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - state: { + resourceVersion: '541968', + state: { error: false, message: '', name: 'running', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts index e564e85119b..1dda9af3597 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts @@ -5,6 +5,7 @@ const horizontalpodautoscalerGetResponseEmpty = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const horizontalpodautoscalerGetResponseSmallSet = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', + revision: '123', count: 1, data: [ { @@ -33,6 +35,7 @@ const horizontalpodautoscalerGetResponseSmallSet = { name: 'test', namespace: 'cattle-system', relationships: null, + resourceVersion: '3839186', state: { error: true, message: 'the HPA was unable to compute the replica count: failed to get cpu utilization: missing request for cpu in container rancher of Pod rancher-6f5f99c7db-f8f86', name: 'pending', transitioning: false }, diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts index 36cdc9a661b..6b81f17cdf1 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts @@ -5,6 +5,7 @@ const ingressesGetReponseEmpty = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const ingressesGetResponseSmallSet = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', + revision: '123', count: 2, data: [ { @@ -65,7 +67,8 @@ const ingressesGetResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '4941', + state: { error: false, message: 'Resource is current', name: 'active', @@ -133,11 +136,12 @@ const ingressesGetResponseSmallSet = { '80', '26s' ], - generation: 1, - name: 'test', - namespace: 'default', - relationships: null, - state: { + generation: 1, + name: 'test', + namespace: 'default', + relationships: null, + resourceVersion: '5040682', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts index cb719e41a69..e80930b2c8f 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts @@ -5,6 +5,7 @@ const servicesGetReponseEmpty = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', + revision: '80155', count: 0, data: [] }; @@ -16,6 +17,7 @@ const servicesGetResponseSmallSet = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', + revision: '80155', count: 3, data: [ { @@ -74,7 +76,8 @@ const servicesGetResponseSmallSet = { message: 'Resource is current' } ], - state: { + resourceVersion: '4158', + state: { error: false, message: 'Service is ready', name: 'active', @@ -162,7 +165,8 @@ const servicesGetResponseSmallSet = { state: 'deployed' } ], - state: { + resourceVersion: '8539', + state: { error: false, message: 'Service is ready', name: 'active', @@ -220,10 +224,11 @@ const servicesGetResponseSmallSet = { component: 'apiserver', provider: 'kubernetes' }, - name: 'kubernetes', - namespace: 'default', - relationships: null, - state: { + name: 'kubernetes', + namespace: 'default', + relationships: null, + resourceVersion: '224', + state: { error: false, message: 'Service is ready', name: 'active', diff --git a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts index 4775922b21f..af8bf4348c6 100644 --- a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts +++ b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts @@ -5,6 +5,7 @@ const clusterRegistrationTokensGetReponseEmpty = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', + revision: '123', count: 0, data: [] }; @@ -16,6 +17,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', + revision: '123', count: 1, data: [ { @@ -82,7 +84,8 @@ const clusterRegistrationTokensGetResponseSmallSet = { message: 'Resource is always ready' } ], - state: { + resourceVersion: '396332', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/fleet/workspaces-get.ts b/cypress/e2e/blueprints/fleet/workspaces-get.ts index c39d43729ff..c6e5fb922b9 100644 --- a/cypress/e2e/blueprints/fleet/workspaces-get.ts +++ b/cypress/e2e/blueprints/fleet/workspaces-get.ts @@ -4,6 +4,7 @@ const fleetworkspacesGetResponseSmallSet = { links: { self: 'https://yonasb29h3.qa.rancher.space/v1/management.cattle.io.fleetworkspaces' }, actions: {}, resourceType: 'management.cattle.io.fleetworkspace', + revision: '123', count: 2, data: [ { @@ -33,7 +34,8 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - state: { + resourceVersion: '4483', + state: { error: false, message: 'Resource is current', name: 'active', @@ -79,7 +81,8 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - state: { + resourceVersion: '5284', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/global_settings/home-links-response.ts b/cypress/e2e/blueprints/global_settings/home-links-response.ts index 4d0b971bb0e..43d1e7132b4 100644 --- a/cypress/e2e/blueprints/global_settings/home-links-response.ts +++ b/cypress/e2e/blueprints/global_settings/home-links-response.ts @@ -34,9 +34,10 @@ export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:s time: '2024-01-31T19:58:38Z' } ], - name: 'ui-custom-links', - relationships: null, - state: { + name: 'ui-custom-links', + relationships: null, + resourceVersion: '820268', + state: { error: false, message: 'Resource is current', name: 'active', @@ -85,9 +86,10 @@ export function removeCustomLinksResponse():object { time: '2024-01-31T19:58:38Z' } ], - name: 'ui-custom-links', - relationships: null, - state: { + name: 'ui-custom-links', + relationships: null, + resourceVersion: '820268', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts index 8122e2f1efa..df6a176ac3f 100644 --- a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts +++ b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts @@ -5,6 +5,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud createTypes: { 'provisioning.cattle.io.cluster': 'https://localhost:8005/v1/provisioning.cattle.io.clusters' }, actions: {}, resourceType: 'provisioning.cattle.io.cluster', + revision: '9258713', count: 9, data: [ { @@ -144,7 +145,8 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud message: 'Resource is always ready' } ], - state: { + resourceVersion: '9258672', + state: { error: false, message: 'Resource is Ready', name: 'active', diff --git a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts index 1f8e5e0d6cc..92fa33e7430 100644 --- a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts +++ b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts @@ -62,7 +62,8 @@ export function machinePoolConfigResponse(clusterName:string, machinePoolId:stri message: 'Resource is current' } ], - state: { + resourceVersion: '9683918', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/nav/edit-cluster.ts b/cypress/e2e/blueprints/nav/edit-cluster.ts index 216e0d1ff3c..49ac529fed3 100644 --- a/cypress/e2e/blueprints/nav/edit-cluster.ts +++ b/cypress/e2e/blueprints/nav/edit-cluster.ts @@ -44,7 +44,8 @@ export function generateFakeNodeDriversReply():any { message: 'Resource is current' } ], - state: { + resourceVersion: '2429', + state: { error: false, message: '', name: 'active', @@ -243,7 +244,8 @@ export function generateFakeMachineConfigReply(provClusterId:string, machinePool message: 'Resource is current' } ], - state: { + resourceVersion: '141967', + state: { error: false, message: 'Resource is current', name: 'active', @@ -290,11 +292,12 @@ export function generateFakeSecretsReply():any { 2, '9m31s' ], - generateName: 'registryconfig-auth-', - name: 'registryconfig-auth-reg1', - namespace: 'fleet-default', - relationships: null, - state: { + generateName: 'registryconfig-auth-', + name: 'registryconfig-auth-reg1', + namespace: 'fleet-default', + relationships: null, + resourceVersion: '526944', + state: { error: false, message: 'Resource is always ready', name: 'active', @@ -327,11 +330,12 @@ export function generateFakeSecretsReply():any { 2, '9m31s' ], - generateName: 'registryconfig-auth-', - name: 'registryconfig-auth-reg2', - namespace: 'fleet-default', - relationships: null, - state: { + generateName: 'registryconfig-auth-', + name: 'registryconfig-auth-reg2', + namespace: 'fleet-default', + relationships: null, + resourceVersion: '526944', + state: { error: false, message: 'Resource is always ready', name: 'active', diff --git a/cypress/e2e/blueprints/nav/fake-cluster.ts b/cypress/e2e/blueprints/nav/fake-cluster.ts index 5a648abc2aa..a40e3dfa3df 100644 --- a/cypress/e2e/blueprints/nav/fake-cluster.ts +++ b/cypress/e2e/blueprints/nav/fake-cluster.ts @@ -159,7 +159,8 @@ function generateProvClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - state: { + resourceVersion: '7555', + state: { error: false, message: 'Resource is Ready', name: 'active', @@ -504,7 +505,8 @@ function generateMgmtClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - state: { + resourceVersion: '8138', + state: { error: false, message: 'Resource is Ready', name: 'active', @@ -1100,7 +1102,8 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - state: { + resourceVersion: '2689', + state: { error: false, message: '', name: 'active', @@ -1149,9 +1152,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'kubernetes.io/metadata.name': 'cattle-fleet-system', 'objectset.rio.cattle.io/hash': 'f399d0b310fbfb28e9667312fdc7a33954e2b8c8' }, - name: 'cattle-fleet-system', - relationships: null, - state: { + name: 'cattle-fleet-system', + relationships: null, + resourceVersion: '2965', + state: { error: false, message: '', name: 'active', @@ -1199,9 +1203,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'cattle-impersonation-system' }, - name: 'cattle-impersonation-system', - relationships: null, - state: { + name: 'cattle-impersonation-system', + relationships: null, + resourceVersion: '2649', + state: { error: false, message: '', name: 'active', @@ -1264,7 +1269,8 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is current' } ], - state: { + resourceVersion: '2683', + state: { error: false, message: '', name: 'active', @@ -1309,9 +1315,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-rs8ps', 'kubernetes.io/metadata.name': 'default' }, - name: 'default', - relationships: null, - state: { + name: 'default', + relationships: null, + resourceVersion: '2622', + state: { error: false, message: '', name: 'active', @@ -1357,9 +1364,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-node-lease' }, - name: 'kube-node-lease', - relationships: null, - state: { + name: 'kube-node-lease', + relationships: null, + resourceVersion: '2631', + state: { error: false, message: '', name: 'active', @@ -1405,9 +1413,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-public' }, - name: 'kube-public', - relationships: null, - state: { + name: 'kube-public', + relationships: null, + resourceVersion: '2634', + state: { error: false, message: '', name: 'active', @@ -1452,9 +1461,10 @@ function generateFakeNamespacesReply(mgmtClusterId) { 'field.cattle.io/projectId': 'p-jwd4v', 'kubernetes.io/metadata.name': 'kube-system' }, - name: 'kube-system', - relationships: null, - state: { + name: 'kube-system', + relationships: null, + resourceVersion: '2711', + state: { error: false, message: '', name: 'active', @@ -1513,7 +1523,8 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - state: { + resourceVersion: '2605', + state: { error: false, message: '', name: 'active', @@ -1572,7 +1583,8 @@ function generateFakeNamespacesReply(mgmtClusterId) { state: 'deployed' } ], - state: { + resourceVersion: '2652', + state: { error: false, message: '', name: 'active', @@ -1681,7 +1693,8 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - state: { + resourceVersion: '1251', + state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', name: 'active', @@ -2240,7 +2253,8 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - state: { + resourceVersion: '2182', + state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', name: 'active', diff --git a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js index 17b2c44f0d7..6a06607d392 100644 --- a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js +++ b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js @@ -778,6 +778,7 @@ const allowedReposGet = { createTypes: { 'constraints.gatekeeper.sh.k8sallowedrepos': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8sallowedrepos' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8sallowedrepos', + revision: '35356', data: [] }; @@ -787,6 +788,7 @@ const requiredLabelsGet = { createTypes: { 'constraints.gatekeeper.sh.k8srequiredlabels': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8srequiredlabels' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8srequiredlabels', + revision: '35356', data: [] }; @@ -796,6 +798,7 @@ const constraintTemplatesGet = { createTypes: { 'templates.gatekeeper.sh.constrainttemplate': 'https://localhost:8005/k8s/clusters/local/v1/templates.gatekeeper.sh.constrainttemplates' }, actions: {}, resourceType: 'templates.gatekeeper.sh.constrainttemplate', + revision: '36243', count: 2, data: [ { @@ -819,11 +822,12 @@ const constraintTemplatesGet = { 'k8sallowedrepos', '36m' ], - generation: 1, - labels: { 'app.kubernetes.io/managed-by': 'Helm' }, - name: 'k8sallowedrepos', - relationships: null, - state: { + generation: 1, + labels: { 'app.kubernetes.io/managed-by': 'Helm' }, + name: 'k8sallowedrepos', + relationships: null, + resourceVersion: '27313', + state: { error: false, message: 'Resource is current', name: 'active', @@ -919,11 +923,12 @@ const constraintTemplatesGet = { 'k8srequiredlabels', '36m' ], - generation: 1, - labels: { 'app.kubernetes.io/managed-by': 'Helm' }, - name: 'k8srequiredlabels', - relationships: null, - state: { + generation: 1, + labels: { 'app.kubernetes.io/managed-by': 'Helm' }, + name: 'k8srequiredlabels', + relationships: null, + resourceVersion: '27315', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index 4607db41e91..ca8a34b5d02 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -5,6 +5,7 @@ const podMonitorsGet = { createTypes: { 'monitoring.coreos.com.podmonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.podmonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.podmonitor', + revision: '7091', data: [] }; @@ -15,6 +16,7 @@ const serviceMonitorsGet = { createTypes: { 'monitoring.coreos.com.servicemonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.servicemonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.servicemonitor', + revision: '7091', count: 14, data: [ { @@ -97,7 +99,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3944', + state: { error: false, message: 'Resource is current', name: 'active', @@ -220,7 +223,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3938', + state: { error: false, message: 'Resource is current', name: 'active', @@ -346,7 +350,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3941', + state: { error: false, message: 'Resource is current', name: 'active', @@ -480,7 +485,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3945', + state: { error: false, message: 'Resource is current', name: 'active', @@ -609,7 +615,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3947', + state: { error: false, message: 'Resource is current', name: 'active', @@ -738,7 +745,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3943', + state: { error: false, message: 'Resource is current', name: 'active', @@ -873,7 +881,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3950', + state: { error: false, message: 'Resource is current', name: 'active', @@ -995,7 +1004,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3942', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1132,7 +1142,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3939', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1262,7 +1273,8 @@ const serviceMonitorsGet = { state: 'deployed' } ], - state: { + resourceVersion: '3946', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1376,10 +1388,11 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-apiserver', - namespace: 'default', - relationships: null, - state: { + name: 'rancher-monitoring-apiserver', + namespace: 'default', + relationships: null, + resourceVersion: '3952', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1511,10 +1524,11 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-coredns', - namespace: 'kube-system', - relationships: null, - state: { + name: 'rancher-monitoring-coredns', + namespace: 'kube-system', + relationships: null, + resourceVersion: '3940', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1627,10 +1641,11 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-ingress-nginx', - namespace: 'kube-system', - relationships: null, - state: { + name: 'rancher-monitoring-ingress-nginx', + namespace: 'kube-system', + relationships: null, + resourceVersion: '3949', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1753,10 +1768,11 @@ const serviceMonitorsGet = { time: '2024-04-03T09:17:26Z' } ], - name: 'rancher-monitoring-kubelet', - namespace: 'kube-system', - relationships: null, - state: { + name: 'rancher-monitoring-kubelet', + namespace: 'kube-system', + relationships: null, + resourceVersion: '3948', + state: { error: false, message: 'Resource is current', name: 'active', @@ -1913,6 +1929,7 @@ const alertManagerConfigsGet = { createTypes: { 'monitoring.coreos.com.alertmanagerconfig': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.alertmanagerconfigs' }, actions: {}, resourceType: 'monitoring.coreos.com.alertmanagerconfig', + revision: '9702', data: [ { id: 'default/test-alert', @@ -1955,10 +1972,11 @@ const alertManagerConfigsGet = { time: '2024-04-03T13:09:28Z' } ], - name: 'test-alert', - namespace: 'default', - relationships: null, - state: { + name: 'test-alert', + namespace: 'default', + relationships: null, + resourceVersion: '95805', + state: { error: false, message: 'Resource is current', name: 'active', @@ -2170,7 +2188,8 @@ const rancherMonitoringAlertmanagerGet = { message: 'Resource is always ready' } ], - state: { + resourceVersion: '4368', + state: { error: false, message: 'Resource is current', name: 'active', @@ -2324,10 +2343,11 @@ const alertManagerRancherMonitoringAlertmanagerGet = { time: '2024-04-03T09:17:25Z' } ], - name: 'alertmanager-rancher-monitoring-alertmanager', - namespace: 'cattle-monitoring-system', - relationships: null, - state: { + name: 'alertmanager-rancher-monitoring-alertmanager', + namespace: 'cattle-monitoring-system', + relationships: null, + resourceVersion: '3573', + state: { error: false, message: 'Resource is always ready', name: 'active', @@ -2344,6 +2364,7 @@ const prometheusRulesGet = { createTypes: { 'monitoring.coreos.com.prometheusrule': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheusrules' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheusrule', + revision: '11253', count: 27, data: [ { @@ -2428,7 +2449,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3932', + state: { error: false, message: 'Resource is current', name: 'active', @@ -2616,7 +2638,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3907', + state: { error: false, message: 'Resource is current', name: 'active', @@ -2727,7 +2750,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3933', + state: { error: false, message: 'Resource is current', name: 'active', @@ -2978,7 +3002,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3912', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3109,7 +3134,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3916', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3282,7 +3308,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3927', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3454,7 +3481,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3922', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3624,7 +3652,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3920', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3740,7 +3769,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3915', + state: { error: false, message: 'Resource is current', name: 'active', @@ -3900,7 +3930,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3909', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4008,7 +4039,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3910', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4132,7 +4164,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3928', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4276,7 +4309,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3917', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4391,7 +4425,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3931', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4655,7 +4690,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3908', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4843,7 +4879,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3926', + state: { error: false, message: 'Resource is current', name: 'active', @@ -4998,7 +5035,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3935', + state: { error: false, message: 'Resource is current', name: 'active', @@ -5120,7 +5158,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3925', + state: { error: false, message: 'Resource is current', name: 'active', @@ -5285,7 +5324,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3923', + state: { error: false, message: 'Resource is current', name: 'active', @@ -5396,7 +5436,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3930', + state: { error: false, message: 'Resource is current', name: 'active', @@ -5507,7 +5548,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3929', + state: { error: false, message: 'Resource is current', name: 'active', @@ -5746,7 +5788,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3919', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6041,7 +6084,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3918', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6185,7 +6229,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3924', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6296,7 +6341,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3921', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6416,7 +6462,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3911', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6747,7 +6794,8 @@ const prometheusRulesGet = { state: 'deployed' } ], - state: { + resourceVersion: '3934', + state: { error: false, message: 'Resource is current', name: 'active', @@ -6852,6 +6900,7 @@ const prometheusesGet = { createTypes: { 'monitoring.coreos.com.prometheus': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheuses' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheus', + revision: '11828', count: 1, data: [ { @@ -7084,7 +7133,8 @@ const prometheusesGet = { state: 'deployed' } ], - state: { + resourceVersion: '4515', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/blueprints/roles/global-roles-get.ts b/cypress/e2e/blueprints/roles/global-roles-get.ts index 7d41056d838..b0c606f637c 100644 --- a/cypress/e2e/blueprints/roles/global-roles-get.ts +++ b/cypress/e2e/blueprints/roles/global-roles-get.ts @@ -51,7 +51,8 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - state: { + resourceVersion: '5497', + state: { error: false, message: 'Resource is current', name: 'active', @@ -144,7 +145,8 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - state: { + resourceVersion: '5484', + state: { error: false, message: 'Resource is current', name: 'active', diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index d925ab7cd4a..47833c56482 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -28,10 +28,11 @@ const expiredCert = { 2, '11s' ], - name: certName, - namespace: certNs, - relationships: null, - state: { + name: certName, + namespace: certNs, + relationships: null, + resourceVersion: '17963647', + state: { error: false, message: 'Resource is always ready', name: 'active', diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index d379025f221..6335ee40bbf 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -29,7 +29,8 @@ export function nodeDriveResponse(addCloudCredential: boolean, driver: string): }, { toId: `${ driver }config`, toType: 'management.cattle.io.dynamicschema', rel: 'owner', state: 'active', message: 'Resource is current' }], - state: { + resourceVersion: '3117786', + state: { error: false, message: '', name: 'active', transitioning: false }, uid: 'c4da5a49-ecc5-4d74-88a8-1a991a586adb' From 7bb4347ea311f7fc7f766a20b06f50ee193dac8b Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 08:59:59 +0000 Subject: [PATCH 22/35] real revision fix --- .../pod-security-admissions-payload.ts | 4 +- .../e2e/blueprints/explorer/cluster/events.ts | 6 +- .../explorer/core/service-accounts-get.ts | 10 +- .../blueprints/explorer/fleet/contents-get.ts | 8 +- .../api/custom-resource-definition-get.ts | 4 +- .../rbac/cluster-role-bindings-get.ts | 8 +- .../explorer/rbac/cluster-roles-get.ts | 8 +- .../explorer/rbac/role-bindings-get.ts | 10 +- .../e2e/blueprints/explorer/rbac/roles-get.ts | 6 +- .../storage/persistent-volume-claims-get.ts | 4 +- .../storage/persistent-volumes-get.ts | 4 +- .../explorer/storage/storage-classes-get.ts | 4 +- .../deployments/deployment-create.ts | 2 +- .../workloads/deployments/deployment-get.ts | 2 +- .../workloads/deployments/deplyment-list.ts | 30 +++--- .../explorer/workloads/pods/pods-get.ts | 6 +- .../horizontal-pod-autoscalers-get.ts | 4 +- .../service-discovery/ingresses-get.ts | 8 +- .../service-discovery/services-get.ts | 10 +- .../fleet/cluster-registration-tokens-get.ts | 6 +- .../e2e/blueprints/fleet/workspaces-get.ts | 6 +- .../global_settings/home-links-response.ts | 4 +- ...tal-ocean-cluster-provisioning-response.ts | 4 +- .../manager/machine-pool-config-response.ts | 2 +- cypress/e2e/blueprints/nav/edit-cluster.ts | 8 +- cypress/e2e/blueprints/nav/fake-cluster.ts | 28 ++--- .../other-products/opa-gatekeeper.js | 10 +- .../other-products/v2-monitoring.js | 100 +++++++++--------- .../e2e/blueprints/roles/global-roles-get.ts | 4 +- .../explorer/dashboard/certificates.spec.ts | 2 +- .../e2e/tests/pages/manager/mock-responses.ts | 2 +- 31 files changed, 157 insertions(+), 157 deletions(-) diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts index d817fce64fc..d183fc95598 100644 --- a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -12,7 +12,7 @@ export const createPayloadData = { }, kind: 'PodSecurityAdmissionConfigurationTemplate', metadata: { - fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: '831667' + fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: Number.MAX_VALUE }, description: 'e2e-pod-security-admission-1705617529465-description' }; @@ -31,7 +31,7 @@ export const updatePayloadData = { }, kind: 'PodSecurityAdmissionConfigurationTemplate', metadata: { - fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: '938739' + fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: Number.MAX_VALUE }, description: 'e2e-pod-security-admission-1705628550961-description-edit' }; diff --git a/cypress/e2e/blueprints/explorer/cluster/events.ts b/cypress/e2e/blueprints/explorer/cluster/events.ts index 32e7cf41688..d6c47e1ed9e 100644 --- a/cypress/e2e/blueprints/explorer/cluster/events.ts +++ b/cypress/e2e/blueprints/explorer/cluster/events.ts @@ -40,7 +40,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: '0', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -71,7 +71,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: '0', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -102,7 +102,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: '0', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts index b6009faf76c..d2e224ec3c7 100644 --- a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts +++ b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts @@ -5,7 +5,7 @@ const serviceAccGetResponseEmpty = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: '129651', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const serviceAcctResponseSmallSet = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: '129651', + revision: Number.MAX_VALUE, count: 3, data: [ { @@ -55,7 +55,7 @@ const serviceAcctResponseSmallSet = { state: 'succeeded' } ], - resourceVersion: '7124', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -104,7 +104,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '9344', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -165,7 +165,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '9342', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts index cc478e1acdf..54c775733aa 100644 --- a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts +++ b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts @@ -5,7 +5,7 @@ const fleetContentsGetResponseEmpty = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const fleetContentsResponseSmallSet = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -41,7 +41,7 @@ const fleetContentsResponseSmallSet = { generation: 1, name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', relationships: null, - resourceVersion: '4380255', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -73,7 +73,7 @@ const fleetContentsResponseSmallSet = { generation: 1, name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', relationships: null, - resourceVersion: '8041', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts index 37ce83b7b69..62e66f768b7 100644 --- a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts +++ b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts @@ -28,7 +28,7 @@ const crdsGetResponseSmallSet = { generation: 1, name: 'users.management.cattle.io', relationships: null, - resourceVersion: '4473', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'CRD is established', @@ -129,7 +129,7 @@ const crdsGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '1417', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'CRD is established', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts index b00ce702991..8bce6fd3844 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts @@ -5,7 +5,7 @@ const clusterRoleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const clusterRoleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -58,7 +58,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '434584', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -118,7 +118,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '5149', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts index 8067016d05a..0cfbf005eba 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts @@ -5,7 +5,7 @@ const clusterRolesGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const clusterRolesResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -49,7 +49,7 @@ const clusterRolesResponseSmallSet = { labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, name: 'admin', relationships: null, - resourceVersion: '4878', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -94,7 +94,7 @@ const clusterRolesResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '4838', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts index 0be3c32a317..507932c375b 100644 --- a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts @@ -5,7 +5,7 @@ const roleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const roleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: '123', + revision: Number.MAX_VALUE, count: 3, data: [ { @@ -66,7 +66,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '445143', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -134,7 +134,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '4386433', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -203,7 +203,7 @@ const roleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '5141', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index 7e0ba219f58..6f6c0b4613c 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -16,7 +16,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ createTypes: { 'rbac.authorization.k8s.io.role': 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.role', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -54,7 +54,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ state: 'deployed' } ], - resourceVersion: '6958', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -113,7 +113,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ name: 'extension-apiserver-authentication-reader', namespace, relationships: null, - resourceVersion: '4825', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index 1bae8831412..d30bf06193d 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -5,7 +5,7 @@ const persistentvolumeclaimsGetResponseEmpty = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const persistentvolumeclaimsResponseSmallSet = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: '123', + revision: Number.MAX_VALUE, count: 1, data: [{ id: 'cattle-system/test', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts index 8e6e7006c18..d545c9e03c3 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts @@ -5,7 +5,7 @@ const persistentvolumesGetResponseEmpty = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const persistentvolumesResponseSmallSet = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: '123', + revision: Number.MAX_VALUE, count: 1, data: [{ id: 'test', diff --git a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts index b713209f68d..5e3cda9ddde 100644 --- a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts @@ -5,7 +5,7 @@ const pstorageclassesGetResponseEmpty = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const storageclassesResponseSmallSet = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: '123', + revision: Number.MAX_VALUE, count: 1, data: [{ id: 'test', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts index 3d34689b7a7..58466046df9 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts @@ -209,7 +209,7 @@ export const deploymentCreateResponse = { rel: 'uses' } ], - resourceVersion: '12999795', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'replicas: 0/1', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts index 5518fe4f76e..0a532386c9e 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts @@ -154,7 +154,7 @@ export const deploymentGetResponse = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12999825', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts index 2ad01e3b301..ee6905153b7 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts @@ -4,7 +4,7 @@ export const deploymentCollection = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: '12999812', + revision: Number.MAX_VALUE, count: 15, data: [ @@ -164,7 +164,7 @@ export const deploymentCollection = { transitioning: true } ], - resourceVersion: '12999806', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment does not have minimum availability.', @@ -255,7 +255,7 @@ export const deploymentCollectionResponseFull = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: '12999812', + revision: Number.MAX_VALUE, count: 15, data: [ { @@ -454,7 +454,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '6109', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -805,7 +805,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '3067', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -1112,7 +1112,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '3089', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -1391,7 +1391,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787692', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -2064,7 +2064,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787803', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -2703,7 +2703,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787731', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3085,7 +3085,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12995749', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3515,7 +3515,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '787962', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3950,7 +3950,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: '663180', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -4295,7 +4295,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '12900726', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -4560,7 +4560,7 @@ export const deploymentCollectionResponseFull = { transitioning: true } ], - resourceVersion: '12999806', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment does not have minimum availability.', @@ -4950,7 +4950,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: '1377', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Deployment is available. Replicas: 1', diff --git a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts index d7c4eb30cd5..1fc4e67258b 100644 --- a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts @@ -49,7 +49,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541786', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -248,7 +248,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541885', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -447,7 +447,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '541968', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts index 1dda9af3597..4c1278c4728 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts @@ -5,7 +5,7 @@ const horizontalpodautoscalerGetResponseEmpty = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const horizontalpodautoscalerGetResponseSmallSet = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: '123', + revision: Number.MAX_VALUE, count: 1, data: [ { diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts index 6b81f17cdf1..ce5b945f30f 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts @@ -5,7 +5,7 @@ const ingressesGetReponseEmpty = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const ingressesGetResponseSmallSet = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -67,7 +67,7 @@ const ingressesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '4941', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -140,7 +140,7 @@ const ingressesGetResponseSmallSet = { name: 'test', namespace: 'default', relationships: null, - resourceVersion: '5040682', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts index e80930b2c8f..4640e051ac5 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts @@ -5,7 +5,7 @@ const servicesGetReponseEmpty = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: '80155', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const servicesGetResponseSmallSet = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: '80155', + revision: Number.MAX_VALUE, count: 3, data: [ { @@ -76,7 +76,7 @@ const servicesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '4158', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Service is ready', @@ -165,7 +165,7 @@ const servicesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: '8539', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Service is ready', @@ -227,7 +227,7 @@ const servicesGetResponseSmallSet = { name: 'kubernetes', namespace: 'default', relationships: null, - resourceVersion: '224', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Service is ready', diff --git a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts index af8bf4348c6..c319258b0cb 100644 --- a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts +++ b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts @@ -5,7 +5,7 @@ const clusterRegistrationTokensGetReponseEmpty = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: '123', + revision: Number.MAX_VALUE, count: 0, data: [] }; @@ -17,7 +17,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: '123', + revision: Number.MAX_VALUE, count: 1, data: [ { @@ -84,7 +84,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: '396332', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/fleet/workspaces-get.ts b/cypress/e2e/blueprints/fleet/workspaces-get.ts index c6e5fb922b9..85325000c02 100644 --- a/cypress/e2e/blueprints/fleet/workspaces-get.ts +++ b/cypress/e2e/blueprints/fleet/workspaces-get.ts @@ -4,7 +4,7 @@ const fleetworkspacesGetResponseSmallSet = { links: { self: 'https://yonasb29h3.qa.rancher.space/v1/management.cattle.io.fleetworkspaces' }, actions: {}, resourceType: 'management.cattle.io.fleetworkspace', - revision: '123', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -34,7 +34,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: '4483', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -81,7 +81,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: '5284', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/global_settings/home-links-response.ts b/cypress/e2e/blueprints/global_settings/home-links-response.ts index 43d1e7132b4..749babc92e4 100644 --- a/cypress/e2e/blueprints/global_settings/home-links-response.ts +++ b/cypress/e2e/blueprints/global_settings/home-links-response.ts @@ -36,7 +36,7 @@ export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:s ], name: 'ui-custom-links', relationships: null, - resourceVersion: '820268', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -88,7 +88,7 @@ export function removeCustomLinksResponse():object { ], name: 'ui-custom-links', relationships: null, - resourceVersion: '820268', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts index df6a176ac3f..cab74f7213e 100644 --- a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts +++ b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts @@ -5,7 +5,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud createTypes: { 'provisioning.cattle.io.cluster': 'https://localhost:8005/v1/provisioning.cattle.io.clusters' }, actions: {}, resourceType: 'provisioning.cattle.io.cluster', - revision: '9258713', + revision: Number.MAX_VALUE, count: 9, data: [ { @@ -145,7 +145,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud message: 'Resource is always ready' } ], - resourceVersion: '9258672', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is Ready', diff --git a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts index 92fa33e7430..53535a78f79 100644 --- a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts +++ b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts @@ -62,7 +62,7 @@ export function machinePoolConfigResponse(clusterName:string, machinePoolId:stri message: 'Resource is current' } ], - resourceVersion: '9683918', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/nav/edit-cluster.ts b/cypress/e2e/blueprints/nav/edit-cluster.ts index 49ac529fed3..73184f6f8a7 100644 --- a/cypress/e2e/blueprints/nav/edit-cluster.ts +++ b/cypress/e2e/blueprints/nav/edit-cluster.ts @@ -44,7 +44,7 @@ export function generateFakeNodeDriversReply():any { message: 'Resource is current' } ], - resourceVersion: '2429', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -244,7 +244,7 @@ export function generateFakeMachineConfigReply(provClusterId:string, machinePool message: 'Resource is current' } ], - resourceVersion: '141967', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -296,7 +296,7 @@ export function generateFakeSecretsReply():any { name: 'registryconfig-auth-reg1', namespace: 'fleet-default', relationships: null, - resourceVersion: '526944', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is always ready', @@ -334,7 +334,7 @@ export function generateFakeSecretsReply():any { name: 'registryconfig-auth-reg2', namespace: 'fleet-default', relationships: null, - resourceVersion: '526944', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is always ready', diff --git a/cypress/e2e/blueprints/nav/fake-cluster.ts b/cypress/e2e/blueprints/nav/fake-cluster.ts index a40e3dfa3df..d40815e54e2 100644 --- a/cypress/e2e/blueprints/nav/fake-cluster.ts +++ b/cypress/e2e/blueprints/nav/fake-cluster.ts @@ -159,7 +159,7 @@ function generateProvClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: '7555', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is Ready', @@ -505,7 +505,7 @@ function generateMgmtClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: '8138', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is Ready', @@ -1102,7 +1102,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: '2689', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1154,7 +1154,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'cattle-fleet-system', relationships: null, - resourceVersion: '2965', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1205,7 +1205,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'cattle-impersonation-system', relationships: null, - resourceVersion: '2649', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1269,7 +1269,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '2683', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1317,7 +1317,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'default', relationships: null, - resourceVersion: '2622', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1366,7 +1366,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-node-lease', relationships: null, - resourceVersion: '2631', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1415,7 +1415,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-public', relationships: null, - resourceVersion: '2634', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1463,7 +1463,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-system', relationships: null, - resourceVersion: '2711', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1523,7 +1523,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: '2605', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1583,7 +1583,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { state: 'deployed' } ], - resourceVersion: '2652', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', @@ -1693,7 +1693,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '1251', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', @@ -2253,7 +2253,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: '2182', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', diff --git a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js index 6a06607d392..bc7f36db3d4 100644 --- a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js +++ b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js @@ -778,7 +778,7 @@ const allowedReposGet = { createTypes: { 'constraints.gatekeeper.sh.k8sallowedrepos': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8sallowedrepos' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8sallowedrepos', - revision: '35356', + revision: Number.MAX_VALUE, data: [] }; @@ -788,7 +788,7 @@ const requiredLabelsGet = { createTypes: { 'constraints.gatekeeper.sh.k8srequiredlabels': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8srequiredlabels' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8srequiredlabels', - revision: '35356', + revision: Number.MAX_VALUE, data: [] }; @@ -798,7 +798,7 @@ const constraintTemplatesGet = { createTypes: { 'templates.gatekeeper.sh.constrainttemplate': 'https://localhost:8005/k8s/clusters/local/v1/templates.gatekeeper.sh.constrainttemplates' }, actions: {}, resourceType: 'templates.gatekeeper.sh.constrainttemplate', - revision: '36243', + revision: Number.MAX_VALUE, count: 2, data: [ { @@ -826,7 +826,7 @@ const constraintTemplatesGet = { labels: { 'app.kubernetes.io/managed-by': 'Helm' }, name: 'k8sallowedrepos', relationships: null, - resourceVersion: '27313', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -927,7 +927,7 @@ const constraintTemplatesGet = { labels: { 'app.kubernetes.io/managed-by': 'Helm' }, name: 'k8srequiredlabels', relationships: null, - resourceVersion: '27315', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index ca8a34b5d02..db0990ac711 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -5,7 +5,7 @@ const podMonitorsGet = { createTypes: { 'monitoring.coreos.com.podmonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.podmonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.podmonitor', - revision: '7091', + revision: Number.MAX_VALUE, data: [] }; @@ -16,7 +16,7 @@ const serviceMonitorsGet = { createTypes: { 'monitoring.coreos.com.servicemonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.servicemonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.servicemonitor', - revision: '7091', + revision: Number.MAX_VALUE, count: 14, data: [ { @@ -99,7 +99,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3944', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -223,7 +223,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3938', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -350,7 +350,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3941', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -485,7 +485,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3945', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -615,7 +615,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3947', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -745,7 +745,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3943', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -881,7 +881,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3950', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1004,7 +1004,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3942', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1142,7 +1142,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3939', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1273,7 +1273,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: '3946', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1391,7 +1391,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-apiserver', namespace: 'default', relationships: null, - resourceVersion: '3952', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1527,7 +1527,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-coredns', namespace: 'kube-system', relationships: null, - resourceVersion: '3940', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1644,7 +1644,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-ingress-nginx', namespace: 'kube-system', relationships: null, - resourceVersion: '3949', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1771,7 +1771,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-kubelet', namespace: 'kube-system', relationships: null, - resourceVersion: '3948', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -1929,7 +1929,7 @@ const alertManagerConfigsGet = { createTypes: { 'monitoring.coreos.com.alertmanagerconfig': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.alertmanagerconfigs' }, actions: {}, resourceType: 'monitoring.coreos.com.alertmanagerconfig', - revision: '9702', + revision: Number.MAX_VALUE data: [ { id: 'default/test-alert', @@ -1975,7 +1975,7 @@ const alertManagerConfigsGet = { name: 'test-alert', namespace: 'default', relationships: null, - resourceVersion: '95805', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -2188,7 +2188,7 @@ const rancherMonitoringAlertmanagerGet = { message: 'Resource is always ready' } ], - resourceVersion: '4368', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -2346,7 +2346,7 @@ const alertManagerRancherMonitoringAlertmanagerGet = { name: 'alertmanager-rancher-monitoring-alertmanager', namespace: 'cattle-monitoring-system', relationships: null, - resourceVersion: '3573', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is always ready', @@ -2364,7 +2364,7 @@ const prometheusRulesGet = { createTypes: { 'monitoring.coreos.com.prometheusrule': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheusrules' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheusrule', - revision: '11253', + revision: Number.MAX_VALUE count: 27, data: [ { @@ -2449,7 +2449,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3932', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -2638,7 +2638,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3907', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -2750,7 +2750,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3933', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3002,7 +3002,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3912', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3134,7 +3134,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3916', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3308,7 +3308,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3927', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3481,7 +3481,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3922', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3652,7 +3652,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3920', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3769,7 +3769,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3915', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -3930,7 +3930,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3909', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4039,7 +4039,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3910', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4164,7 +4164,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3928', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4309,7 +4309,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3917', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4425,7 +4425,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3931', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4690,7 +4690,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3908', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -4879,7 +4879,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3926', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5035,7 +5035,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3935', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5158,7 +5158,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3925', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5324,7 +5324,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3923', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5436,7 +5436,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3930', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5548,7 +5548,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3929', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -5788,7 +5788,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3919', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6084,7 +6084,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3918', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6229,7 +6229,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3924', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6341,7 +6341,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3921', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6462,7 +6462,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3911', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6794,7 +6794,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: '3934', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -6900,7 +6900,7 @@ const prometheusesGet = { createTypes: { 'monitoring.coreos.com.prometheus': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheuses' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheus', - revision: '11828', + revision: Number.MAX_VALUE count: 1, data: [ { @@ -7133,7 +7133,7 @@ const prometheusesGet = { state: 'deployed' } ], - resourceVersion: '4515', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/roles/global-roles-get.ts b/cypress/e2e/blueprints/roles/global-roles-get.ts index b0c606f637c..c74aa190c97 100644 --- a/cypress/e2e/blueprints/roles/global-roles-get.ts +++ b/cypress/e2e/blueprints/roles/global-roles-get.ts @@ -51,7 +51,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '5497', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', @@ -145,7 +145,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: '5484', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index 47833c56482..4fde924e30b 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -31,7 +31,7 @@ const expiredCert = { name: certName, namespace: certNs, relationships: null, - resourceVersion: '17963647', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: 'Resource is always ready', diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index 6335ee40bbf..754553e9d6a 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -29,7 +29,7 @@ export function nodeDriveResponse(addCloudCredential: boolean, driver: string): }, { toId: `${ driver }config`, toType: 'management.cattle.io.dynamicschema', rel: 'owner', state: 'active', message: 'Resource is current' }], - resourceVersion: '3117786', + resourceVersion: Number.MAX_VALUE, state: { error: false, message: '', name: 'active', transitioning: false }, From 62eacc3550a9a7b2c8dd45ae9b0e6d3bf7fdbd62 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 09:03:42 +0000 Subject: [PATCH 23/35] lint fixes are commenting out skip --- cypress/e2e/tests/navigation/page-actions.spec.ts | 2 +- .../e2e/tests/pages/explorer2/cluster-tools.spec.ts | 2 +- .../e2e/tests/pages/explorer2/workloads/pods.spec.ts | 9 +++++---- cypress/e2e/tests/pages/extensions/extensions.spec.ts | 10 +++++----- cypress/e2e/tests/pages/user-menu/preferences.spec.ts | 4 ++-- cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts | 8 ++++---- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/cypress/e2e/tests/navigation/page-actions.spec.ts b/cypress/e2e/tests/navigation/page-actions.spec.ts index f5a9d6938af..afcd77bbde6 100644 --- a/cypress/e2e/tests/navigation/page-actions.spec.ts +++ b/cypress/e2e/tests/navigation/page-actions.spec.ts @@ -1,4 +1,4 @@ -import PageActions from '@/cypress/e2e/po/side-bars/page-actions.po'; +// import PageActions from '@/cypress/e2e/po/side-bars/page-actions.po'; import HomePagePo from '@/cypress/e2e/po/pages/home.po'; describe('Page Actions', { tags: ['@navigation', '@adminUser', '@standardUser'] }, () => { diff --git a/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts b/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts index 295181c1648..b7918053ee1 100644 --- a/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/cluster-tools.spec.ts @@ -1,7 +1,7 @@ import ClusterToolsPagePo from '@/cypress/e2e/po/pages/explorer/cluster-tools.po'; import ClusterDashboardPagePo from '@/cypress/e2e/po/pages/explorer/cluster-dashboard.po'; import { InstallChartPage } from '@/cypress/e2e/po/pages/explorer/charts/install-charts.po'; -import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; +// import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; const clusterTools = new ClusterToolsPagePo('local'); diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 162ba45132a..89c921dacf7 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -1,7 +1,8 @@ -import { WorkloadsPodsListPagePo, WorkLoadsPodDetailsPagePo, WorkloadsPodsCreatePagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; -import { createPodBlueprint, clonePodBlueprint } from '@/cypress/e2e/blueprints/explorer/workload-pods'; -import PodPo from '@/cypress/e2e/po/components/workloads/pod.po'; -import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; +import { WorkloadsPodsListPagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; +// import { WorkloadsPodsListPagePo, WorkLoadsPodDetailsPagePo, WorkloadsPodsCreatePagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; +// import { createPodBlueprint, clonePodBlueprint } from '@/cypress/e2e/blueprints/explorer/workload-pods'; +// import PodPo from '@/cypress/e2e/po/components/workloads/pod.po'; +// import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; import HomePagePo from '@/cypress/e2e/po/pages/home.po'; import { generatePodsDataSmall } from '@/cypress/e2e/blueprints/explorer/workloads/pods/pods-get'; import SortableTablePo from '@/cypress/e2e/po/components/sortable-table.po'; diff --git a/cypress/e2e/tests/pages/extensions/extensions.spec.ts b/cypress/e2e/tests/pages/extensions/extensions.spec.ts index b03047e5852..a8104f908f8 100644 --- a/cypress/e2e/tests/pages/extensions/extensions.spec.ts +++ b/cypress/e2e/tests/pages/extensions/extensions.spec.ts @@ -2,12 +2,12 @@ import ExtensionsPagePo from '@/cypress/e2e/po/pages/extensions.po'; import RepositoriesPagePo from '@/cypress/e2e/po/pages/chart-repositories.po'; import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; import BurgerMenuPo from '@/cypress/e2e/po/side-bars/burger-side-menu.po'; -import { LoginPagePo } from '@/cypress/e2e/po/pages/login-page.po'; +// import { LoginPagePo } from '@/cypress/e2e/po/pages/login-page.po'; -const DISABLED_CACHE_EXTENSION_NAME = 'large-extension'; -const DISABLED_CACHE_EXTENSION_MENU_LABEL = 'Large-extension'; -const DISABLED_CACHE_EXTENSION_TITLE = 'Large extension demo (> 20mb) - cache testing'; -const UNAUTHENTICATED_EXTENSION_NAME = 'uk-locale'; +// const DISABLED_CACHE_EXTENSION_NAME = 'large-extension'; +// const DISABLED_CACHE_EXTENSION_MENU_LABEL = 'Large-extension'; +// const DISABLED_CACHE_EXTENSION_TITLE = 'Large extension demo (> 20mb) - cache testing'; +// const UNAUTHENTICATED_EXTENSION_NAME = 'uk-locale'; const EXTENSION_NAME = 'clock'; const UI_PLUGINS_PARTNERS_REPO_URL = 'https://github.com/rancher/partner-extensions'; const UI_PLUGINS_PARTNERS_REPO_NAME = 'partner-extensions'; diff --git a/cypress/e2e/tests/pages/user-menu/preferences.spec.ts b/cypress/e2e/tests/pages/user-menu/preferences.spec.ts index b0bdb131ab5..e04f856e9a6 100644 --- a/cypress/e2e/tests/pages/user-menu/preferences.spec.ts +++ b/cypress/e2e/tests/pages/user-menu/preferences.spec.ts @@ -16,8 +16,8 @@ const repoListPage = new RepositoriesPagePo('_', 'manager'); const repoList = repoListPage.list(); // const clusterManagerPage = new ClusterManagerListPagePo('_'); -const VIM = 'Vim'; -const NORMAL_HUMAN = 'Normal human'; +// const VIM = 'Vim'; +// const NORMAL_HUMAN = 'Normal human'; const RESOURCE_FOR_CREATE_YAML = 'resourcequota'; diff --git a/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts b/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts index 83608981674..22f6bede189 100644 --- a/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts +++ b/cypress/e2e/tests/pages/users-and-auth/azuread.spec.ts @@ -9,10 +9,10 @@ const tenantId = '564b6f53-ebf4-43c3-8077-44c56a44990a'; const applicationId = '18cca356-170e-4bd9-a4a4-2e349855f96b'; const appSecret = 'test'; const groupMembershipFilter = 'test'; -const defaultEndpoint = 'https://login.microsoftonline.com/'; -const defaultAuthEndpoint = 'https://login.microsoftonline.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/authorize'; -const defaultTokenEndpoint = 'https://login.microsoftonline.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/token'; -const defaultGraphEndpoint = 'https://graph.microsoft.com'; +// const defaultEndpoint = 'https://login.microsoftonline.com/'; +// const defaultAuthEndpoint = 'https://login.microsoftonline.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/authorize'; +// const defaultTokenEndpoint = 'https://login.microsoftonline.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/token'; +// const defaultGraphEndpoint = 'https://graph.microsoft.com'; const endpoint = 'https://login.test.com/'; const authEndpoint = 'https://login.test.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/authorize'; const tokenEndpoint = 'https://login.test.com/564b6f53-ebf4-43c3-8077-44c56a44990a/oauth2/v2.0/token'; From f121f906b3c570041d7c92003df3cc54aa58b6eb Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 09:25:25 +0000 Subject: [PATCH 24/35] use common resource revision --- .../pod-security-admissions-payload.ts | 6 +- .../e2e/blueprints/explorer/cluster/events.ts | 12 ++- .../explorer/core/service-accounts-get.ts | 12 ++- .../blueprints/explorer/fleet/contents-get.ts | 10 +- .../api/custom-resource-definition-get.ts | 8 +- .../rbac/cluster-role-bindings-get.ts | 10 +- .../explorer/rbac/cluster-roles-get.ts | 10 +- .../explorer/rbac/role-bindings-get.ts | 12 ++- .../e2e/blueprints/explorer/rbac/roles-get.ts | 8 +- .../storage/persistent-volume-claims-get.ts | 6 +- .../storage/persistent-volumes-get.ts | 6 +- .../explorer/storage/storage-classes-get.ts | 6 +- .../deployments/deployment-create.ts | 4 +- .../workloads/deployments/deployment-get.ts | 4 +- .../workloads/deployments/deplyment-list.ts | 32 +++--- .../explorer/workloads/pods/pods-get.ts | 8 +- .../horizontal-pod-autoscalers-get.ts | 6 +- .../service-discovery/ingresses-get.ts | 10 +- .../service-discovery/services-get.ts | 12 ++- .../fleet/cluster-registration-tokens-get.ts | 8 +- .../e2e/blueprints/fleet/workspaces-get.ts | 8 +- .../global_settings/home-links-response.ts | 6 +- ...tal-ocean-cluster-provisioning-response.ts | 6 +- .../manager/machine-pool-config-response.ts | 4 +- cypress/e2e/blueprints/nav/edit-cluster.ts | 10 +- cypress/e2e/blueprints/nav/fake-cluster.ts | 30 +++--- .../other-products/opa-gatekeeper.js | 12 ++- .../other-products/v2-monitoring.js | 102 +++++++++--------- .../e2e/blueprints/roles/global-roles-get.ts | 8 +- cypress/e2e/blueprints/users/users-get.ts | 4 +- .../explorer/dashboard/certificates.spec.ts | 3 +- .../e2e/tests/pages/manager/mock-responses.ts | 4 +- 32 files changed, 225 insertions(+), 162 deletions(-) diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts index d183fc95598..32af062ad07 100644 --- a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export const createPayloadData = { id: 'e2e-pod-security-admission-1705617529465', type: 'management.cattle.io.podsecurityadmissionconfigurationtemplate', @@ -12,7 +14,7 @@ export const createPayloadData = { }, kind: 'PodSecurityAdmissionConfigurationTemplate', metadata: { - fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: Number.MAX_VALUE + fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION }, description: 'e2e-pod-security-admission-1705617529465-description' }; @@ -31,7 +33,7 @@ export const updatePayloadData = { }, kind: 'PodSecurityAdmissionConfigurationTemplate', metadata: { - fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: Number.MAX_VALUE + fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION }, description: 'e2e-pod-security-admission-1705628550961-description-edit' }; diff --git a/cypress/e2e/blueprints/explorer/cluster/events.ts b/cypress/e2e/blueprints/explorer/cluster/events.ts index d6c47e1ed9e..d5c161f60f6 100644 --- a/cypress/e2e/blueprints/explorer/cluster/events.ts +++ b/cypress/e2e/blueprints/explorer/cluster/events.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/events - return empty events data const eventsGetEmptyEventsSet = { type: 'collection', @@ -5,7 +7,7 @@ const eventsGetEmptyEventsSet = { createTypes: { event: `${ Cypress.env('api') }/v1/events` }, actions: {}, resourceType: 'event', - revision: Number.MAX_VALUE, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests + revision: CYPRESS_SAFE_RESOURCE_REVISION, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests data: [] }; @@ -16,7 +18,7 @@ const eventsGetResponseSmallSet = { createTypes: { event: `${ Cypress.env('api') }/v1/events` }, actions: {}, resourceType: 'event', - revision: Number.MAX_VALUE, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests + revision: CYPRESS_SAFE_RESOURCE_REVISION, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests count: 3, data: [ { @@ -40,7 +42,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -71,7 +73,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -102,7 +104,7 @@ const eventsGetResponseSmallSet = { name: 'fleet-agent-0.17d80b90a6d2c7ab', namespace: 'cattle-fleet-local-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts index d2e224ec3c7..fc4b6782609 100644 --- a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts +++ b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/serviceaccounts - return empty service accounts data const serviceAccGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const serviceAccGetResponseEmpty = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const serviceAcctResponseSmallSet = { createTypes: { serviceaccount: 'https://yonasb29.qa.rancher.space/v1/serviceaccounts' }, actions: {}, resourceType: 'serviceaccount', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 3, data: [ { @@ -55,7 +57,7 @@ const serviceAcctResponseSmallSet = { state: 'succeeded' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -104,7 +106,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -165,7 +167,7 @@ const serviceAcctResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts index 54c775733aa..ca271b2dc71 100644 --- a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts +++ b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/fleet.cattle.io.contents - return empty contents data const fleetContentsGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const fleetContentsGetResponseEmpty = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const fleetContentsResponseSmallSet = { createTypes: { 'fleet.cattle.io.content': 'https://yonasb29head.qa.rancher.space/v1/fleet.cattle.io.contents' }, actions: {}, resourceType: 'fleet.cattle.io.content', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -41,7 +43,7 @@ const fleetContentsResponseSmallSet = { generation: 1, name: 's-65075fe21d0e5087693027a2fdbb5ed559295ed1ffeb5957f98d77decb4a5', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -73,7 +75,7 @@ const fleetContentsResponseSmallSet = { generation: 1, name: 's-807cc7bcb0de2dae39c913c375f676238d021519258d34913ccc842519c63', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts index 62e66f768b7..74faa2d45aa 100644 --- a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts +++ b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/apiextensions.k8s.io.customresourcedefinitions - small set of crds data const crdsGetResponseSmallSet = { type: 'collection', @@ -5,7 +7,7 @@ const crdsGetResponseSmallSet = { createTypes: { 'apiextensions.k8s.io.customresourcedefinition': 'https://yonasb29head.qa.rancher.space/v1/apiextensions.k8s.io.customresourcedefinitions' }, actions: {}, resourceType: 'apiextensions.k8s.io.customresourcedefinition', - revision: Number.MAX_VALUE, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests + revision: CYPRESS_SAFE_RESOURCE_REVISION, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests count: 2, data: [ { @@ -28,7 +30,7 @@ const crdsGetResponseSmallSet = { generation: 1, name: 'users.management.cattle.io', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'CRD is established', @@ -129,7 +131,7 @@ const crdsGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'CRD is established', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts index 8bce6fd3844..2f2f5926c88 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/rbac.authorization.k8s.io.clusterrolebinding - return empty cluster role binding data const clusterRoleBindingGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const clusterRoleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const clusterRoleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterrolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrolebinding', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -58,7 +60,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -118,7 +120,7 @@ const clusterRoleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts index 0cfbf005eba..2da56ea0744 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/rbac.authorization.k8s.io.clusterrolebinding - return empty cluster roles data const clusterRolesGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const clusterRolesGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const clusterRolesResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.clusterrole': 'https://yonasb29h3.qa.rancher.space/v1/rbac.authorization.k8s.io.clusterroles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.clusterrole', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -49,7 +51,7 @@ const clusterRolesResponseSmallSet = { labels: { 'kubernetes.io/bootstrapping': 'rbac-defaults' }, name: 'admin', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -94,7 +96,7 @@ const clusterRolesResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts index 507932c375b..c3d04a42719 100644 --- a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/rbac.authorization.k8s.io.rolebindings- return empty role binding data const roleBindingGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const roleBindingGetResponseEmpty = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const roleBindingResponseSmallSet = { createTypes: { 'rbac.authorization.k8s.io.rolebinding': 'https://yonasb29head.qa.rancher.space/v1/rbac.authorization.k8s.io.rolebindings' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.rolebinding', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 3, data: [ { @@ -66,7 +68,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -134,7 +136,7 @@ const roleBindingResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -203,7 +205,7 @@ const roleBindingResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index 6f6c0b4613c..6708a873a37 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/rbac.authorization.k8s.io.roles - return empty roles data const rolesGetResponseEmpty = { type: 'collection', @@ -16,7 +18,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ createTypes: { 'rbac.authorization.k8s.io.role': 'https://localhost:8005/v1/rbac.authorization.k8s.io.roles' }, actions: {}, resourceType: 'rbac.authorization.k8s.io.role', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -54,7 +56,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -113,7 +115,7 @@ const rolesResponseSmallSet = (namespace = 'kube-system') => ({ name: 'extension-apiserver-authentication-reader', namespace, relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index d30bf06193d..ac17f553784 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/persistentvolumeclaim- return empty persistentvolumeclaims data const persistentvolumeclaimsGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const persistentvolumeclaimsGetResponseEmpty = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const persistentvolumeclaimsResponseSmallSet = { createTypes: { persistentvolumeclaim: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumeclaims' }, actions: {}, resourceType: 'persistentvolumeclaim', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [{ id: 'cattle-system/test', diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts index d545c9e03c3..567e77e8465 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/persistentvolumes- return empty persistentvolumes data const persistentvolumesGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const persistentvolumesGetResponseEmpty = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const persistentvolumesResponseSmallSet = { createTypes: { persistentvolume: 'https://yonasb29head.qa.rancher.space/v1/persistentvolumes' }, actions: {}, resourceType: 'persistentvolume', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [{ id: 'test', diff --git a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts index 5e3cda9ddde..bc05698581d 100644 --- a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/storage.k8s.io.storageclasses- return empty storageclasses data const pstorageclassesGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const pstorageclassesGetResponseEmpty = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const storageclassesResponseSmallSet = { createTypes: { 'storage.k8s.io.storageclass': 'https://yonasb29head.qa.rancher.space/v1/storage.k8s.io.storageclasses' }, actions: {}, resourceType: 'storage.k8s.io.storageclass', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [{ id: 'test', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts index 58466046df9..fd5b64d5ca5 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export const createDeploymentBlueprint = { apiVersion: 'apps/v1', kind: 'Deployment', @@ -209,7 +211,7 @@ export const deploymentCreateResponse = { rel: 'uses' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'replicas: 0/1', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts index 0a532386c9e..3b2dde12577 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export const deploymentGetResponse = { id: 'default/test-deployment', links: { @@ -154,7 +156,7 @@ export const deploymentGetResponse = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts index ee6905153b7..e1285ffb942 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts @@ -1,10 +1,12 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export const deploymentCollection = { type: 'collection', links: { self: 'https://localhost:8005/v1/apps.deployments' }, createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 15, data: [ @@ -164,7 +166,7 @@ export const deploymentCollection = { transitioning: true } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment does not have minimum availability.', @@ -255,7 +257,7 @@ export const deploymentCollectionResponseFull = { createTypes: { 'apps.deployment': 'https://localhost:8005/v1/apps.deployments' }, actions: {}, resourceType: 'apps.deployment', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 15, data: [ { @@ -454,7 +456,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -805,7 +807,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -1112,7 +1114,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -1391,7 +1393,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -2064,7 +2066,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -2703,7 +2705,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3085,7 +3087,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3515,7 +3517,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -3950,7 +3952,7 @@ export const deploymentCollectionResponseFull = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -4295,7 +4297,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', @@ -4560,7 +4562,7 @@ export const deploymentCollectionResponseFull = { transitioning: true } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment does not have minimum availability.', @@ -4950,7 +4952,7 @@ export const deploymentCollectionResponseFull = { message: 'ReplicaSet is available. Replicas: 1' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Deployment is available. Replicas: 1', diff --git a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts index 1fc4e67258b..f4be057043c 100644 --- a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/pods - small set of pods data const podsGetResponseSmallSet = { type: 'collection', @@ -49,7 +51,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -248,7 +250,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -447,7 +449,7 @@ const podsGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts index 4c1278c4728..bc7b4bb06e7 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/autoscaling.horizontalpodautoscalers - return empty horizontalpodautoscalers data const horizontalpodautoscalerGetResponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const horizontalpodautoscalerGetResponseEmpty = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const horizontalpodautoscalerGetResponseSmallSet = { createTypes: { 'autoscaling.horizontalpodautoscaler': 'https://yonasb29head.qa.rancher.space/v1/autoscaling.horizontalpodautoscalers' }, actions: {}, resourceType: 'autoscaling.horizontalpodautoscaler', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [ { diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts index ce5b945f30f..4cd47405362 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/networking.k8s.io.ingresses - return empty ingresses data const ingressesGetReponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const ingressesGetReponseEmpty = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const ingressesGetResponseSmallSet = { createTypes: { 'networking.k8s.io.ingress': 'https://yonasb29head.qa.rancher.space/v1/networking.k8s.io.ingresses' }, actions: {}, resourceType: 'networking.k8s.io.ingress', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -67,7 +69,7 @@ const ingressesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -140,7 +142,7 @@ const ingressesGetResponseSmallSet = { name: 'test', namespace: 'default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts index 4640e051ac5..b5312a4b4f3 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/services - return empty services data const servicesGetReponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const servicesGetReponseEmpty = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const servicesGetResponseSmallSet = { createTypes: { service: 'https://yonasb29.qa.rancher.space/v1/services' }, actions: {}, resourceType: 'service', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 3, data: [ { @@ -76,7 +78,7 @@ const servicesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Service is ready', @@ -165,7 +167,7 @@ const servicesGetResponseSmallSet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Service is ready', @@ -227,7 +229,7 @@ const servicesGetResponseSmallSet = { name: 'kubernetes', namespace: 'default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Service is ready', diff --git a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts index c319258b0cb..9f027fbcc0f 100644 --- a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts +++ b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/fleet.cattle.io.clusterregistrationtokens - return empty clusterregistrationtokens data const clusterRegistrationTokensGetReponseEmpty = { type: 'collection', @@ -5,7 +7,7 @@ const clusterRegistrationTokensGetReponseEmpty = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 0, data: [] }; @@ -17,7 +19,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { createTypes: { 'fleet.cattle.io.clusterregistrationtoken': 'https://yonasb29h3.qa.rancher.space/v1/fleet.cattle.io.clusterregistrationtokens' }, actions: {}, resourceType: 'fleet.cattle.io.clusterregistrationtoken', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [ { @@ -84,7 +86,7 @@ const clusterRegistrationTokensGetResponseSmallSet = { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/fleet/workspaces-get.ts b/cypress/e2e/blueprints/fleet/workspaces-get.ts index 85325000c02..7f54d23387d 100644 --- a/cypress/e2e/blueprints/fleet/workspaces-get.ts +++ b/cypress/e2e/blueprints/fleet/workspaces-get.ts @@ -1,10 +1,12 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/management.cattle.io.fleetworkspaces - small set of fleet workspaces data const fleetworkspacesGetResponseSmallSet = { type: 'collection', links: { self: 'https://yonasb29h3.qa.rancher.space/v1/management.cattle.io.fleetworkspaces' }, actions: {}, resourceType: 'management.cattle.io.fleetworkspace', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -34,7 +36,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -81,7 +83,7 @@ const fleetworkspacesGetResponseSmallSet = { state: 'active' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/global_settings/home-links-response.ts b/cypress/e2e/blueprints/global_settings/home-links-response.ts index 749babc92e4..620d0aeda82 100644 --- a/cypress/e2e/blueprints/global_settings/home-links-response.ts +++ b/cypress/e2e/blueprints/global_settings/home-links-response.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:string):object { return { id: 'ui-custom-links', @@ -36,7 +38,7 @@ export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:s ], name: 'ui-custom-links', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -88,7 +90,7 @@ export function removeCustomLinksResponse():object { ], name: 'ui-custom-links', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts index cab74f7213e..02fe3d1b809 100644 --- a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts +++ b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloudCredName: string, machinePoolId: string):object { return { type: 'collection', @@ -5,7 +7,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud createTypes: { 'provisioning.cattle.io.cluster': 'https://localhost:8005/v1/provisioning.cattle.io.clusters' }, actions: {}, resourceType: 'provisioning.cattle.io.cluster', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 9, data: [ { @@ -145,7 +147,7 @@ export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloud message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is Ready', diff --git a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts index 53535a78f79..be92e98de21 100644 --- a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts +++ b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export function machinePoolConfigResponse(clusterName:string, machinePoolId:string ):object { return { id: `fleet-default/nc-${ clusterName }-pool1-${ machinePoolId }`, @@ -62,7 +64,7 @@ export function machinePoolConfigResponse(clusterName:string, machinePoolId:stri message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/nav/edit-cluster.ts b/cypress/e2e/blueprints/nav/edit-cluster.ts index 73184f6f8a7..8605f3ea237 100644 --- a/cypress/e2e/blueprints/nav/edit-cluster.ts +++ b/cypress/e2e/blueprints/nav/edit-cluster.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // /v1/management.cattle.io.nodedrivers?* export function generateFakeNodeDriversReply():any { return { @@ -44,7 +46,7 @@ export function generateFakeNodeDriversReply():any { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -244,7 +246,7 @@ export function generateFakeMachineConfigReply(provClusterId:string, machinePool message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -296,7 +298,7 @@ export function generateFakeSecretsReply():any { name: 'registryconfig-auth-reg1', namespace: 'fleet-default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is always ready', @@ -334,7 +336,7 @@ export function generateFakeSecretsReply():any { name: 'registryconfig-auth-reg2', namespace: 'fleet-default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is always ready', diff --git a/cypress/e2e/blueprints/nav/fake-cluster.ts b/cypress/e2e/blueprints/nav/fake-cluster.ts index d40815e54e2..23464f6fb4f 100644 --- a/cypress/e2e/blueprints/nav/fake-cluster.ts +++ b/cypress/e2e/blueprints/nav/fake-cluster.ts @@ -14,6 +14,8 @@ import { generateFakeSecretsReply } from './edit-cluster.ts'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GENERAL DATA NOT CONFIGURABLE, for now... const MACHINE_POOL_ID = '995mj'; const CLOUD_CRED_ID = 'srb7v'; @@ -159,7 +161,7 @@ function generateProvClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is Ready', @@ -505,7 +507,7 @@ function generateMgmtClusterObj(provClusterId, mgmtClusterId) { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is Ready', @@ -1102,7 +1104,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1154,7 +1156,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'cattle-fleet-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1205,7 +1207,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'cattle-impersonation-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1269,7 +1271,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1317,7 +1319,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1366,7 +1368,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-node-lease', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1415,7 +1417,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-public', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1463,7 +1465,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { }, name: 'kube-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1523,7 +1525,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { message: 'Resource is Ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1583,7 +1585,7 @@ function generateFakeNamespacesReply(mgmtClusterId) { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', @@ -1693,7 +1695,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', @@ -2253,7 +2255,7 @@ function generateFakeDaemonsetsReply(mgmtClusterId) { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'All replicas scheduled as expected. Replicas: 1', diff --git a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js index bc7f36db3d4..41b07170e2a 100644 --- a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js +++ b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + const k8sSchemas = [ { id: 'status.gatekeeper.sh.expansiontemplatepodstatus', @@ -778,7 +780,7 @@ const allowedReposGet = { createTypes: { 'constraints.gatekeeper.sh.k8sallowedrepos': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8sallowedrepos' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8sallowedrepos', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, data: [] }; @@ -788,7 +790,7 @@ const requiredLabelsGet = { createTypes: { 'constraints.gatekeeper.sh.k8srequiredlabels': 'https://localhost:8005/k8s/clusters/local/v1/constraints.gatekeeper.sh.k8srequiredlabels' }, actions: {}, resourceType: 'constraints.gatekeeper.sh.k8srequiredlabels', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, data: [] }; @@ -798,7 +800,7 @@ const constraintTemplatesGet = { createTypes: { 'templates.gatekeeper.sh.constrainttemplate': 'https://localhost:8005/k8s/clusters/local/v1/templates.gatekeeper.sh.constrainttemplates' }, actions: {}, resourceType: 'templates.gatekeeper.sh.constrainttemplate', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 2, data: [ { @@ -826,7 +828,7 @@ const constraintTemplatesGet = { labels: { 'app.kubernetes.io/managed-by': 'Helm' }, name: 'k8sallowedrepos', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -927,7 +929,7 @@ const constraintTemplatesGet = { labels: { 'app.kubernetes.io/managed-by': 'Helm' }, name: 'k8srequiredlabels', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index db0990ac711..aa6e1827de4 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /k8s/clusters/local/v1/monitoring.coreos.com.podmonitors const podMonitorsGet = { type: 'collection', @@ -5,7 +7,7 @@ const podMonitorsGet = { createTypes: { 'monitoring.coreos.com.podmonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.podmonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.podmonitor', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, data: [] }; @@ -16,7 +18,7 @@ const serviceMonitorsGet = { createTypes: { 'monitoring.coreos.com.servicemonitor': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.servicemonitors' }, actions: {}, resourceType: 'monitoring.coreos.com.servicemonitor', - revision: Number.MAX_VALUE, + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 14, data: [ { @@ -99,7 +101,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -223,7 +225,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -350,7 +352,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -485,7 +487,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -615,7 +617,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -745,7 +747,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -881,7 +883,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1004,7 +1006,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1142,7 +1144,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1273,7 +1275,7 @@ const serviceMonitorsGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1391,7 +1393,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-apiserver', namespace: 'default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1527,7 +1529,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-coredns', namespace: 'kube-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1644,7 +1646,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-ingress-nginx', namespace: 'kube-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1771,7 +1773,7 @@ const serviceMonitorsGet = { name: 'rancher-monitoring-kubelet', namespace: 'kube-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -1929,7 +1931,7 @@ const alertManagerConfigsGet = { createTypes: { 'monitoring.coreos.com.alertmanagerconfig': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.alertmanagerconfigs' }, actions: {}, resourceType: 'monitoring.coreos.com.alertmanagerconfig', - revision: Number.MAX_VALUE + revision: CYPRESS_SAFE_RESOURCE_REVISION data: [ { id: 'default/test-alert', @@ -1975,7 +1977,7 @@ const alertManagerConfigsGet = { name: 'test-alert', namespace: 'default', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -2188,7 +2190,7 @@ const rancherMonitoringAlertmanagerGet = { message: 'Resource is always ready' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -2346,7 +2348,7 @@ const alertManagerRancherMonitoringAlertmanagerGet = { name: 'alertmanager-rancher-monitoring-alertmanager', namespace: 'cattle-monitoring-system', relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is always ready', @@ -2364,7 +2366,7 @@ const prometheusRulesGet = { createTypes: { 'monitoring.coreos.com.prometheusrule': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheusrules' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheusrule', - revision: Number.MAX_VALUE + revision: CYPRESS_SAFE_RESOURCE_REVISION count: 27, data: [ { @@ -2449,7 +2451,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -2638,7 +2640,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -2750,7 +2752,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3002,7 +3004,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3134,7 +3136,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3308,7 +3310,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3481,7 +3483,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3652,7 +3654,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3769,7 +3771,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -3930,7 +3932,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4039,7 +4041,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4164,7 +4166,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4309,7 +4311,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4425,7 +4427,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4690,7 +4692,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -4879,7 +4881,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5035,7 +5037,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5158,7 +5160,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5324,7 +5326,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5436,7 +5438,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5548,7 +5550,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -5788,7 +5790,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6084,7 +6086,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6229,7 +6231,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6341,7 +6343,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6462,7 +6464,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6794,7 +6796,7 @@ const prometheusRulesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -6900,7 +6902,7 @@ const prometheusesGet = { createTypes: { 'monitoring.coreos.com.prometheus': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheuses' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheus', - revision: Number.MAX_VALUE + revision: CYPRESS_SAFE_RESOURCE_REVISION count: 1, data: [ { @@ -7133,7 +7135,7 @@ const prometheusesGet = { state: 'deployed' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/roles/global-roles-get.ts b/cypress/e2e/blueprints/roles/global-roles-get.ts index c74aa190c97..058c34fe357 100644 --- a/cypress/e2e/blueprints/roles/global-roles-get.ts +++ b/cypress/e2e/blueprints/roles/global-roles-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v1/management.cattle.io.globalroles - small set of pods data const globalRolesGetResponseSmallSet = { type: 'collection', @@ -5,7 +7,7 @@ const globalRolesGetResponseSmallSet = { createTypes: { 'management.cattle.io.globalrole': 'https://yonasb29head.qa.rancher.space/v1/management.cattle.io.globalroles' }, actions: {}, resourceType: 'management.cattle.io.globalrole', - revision: Number.MAX_VALUE, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests + revision: CYPRESS_SAFE_RESOURCE_REVISION, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests count: 2, data: [ { @@ -51,7 +53,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', @@ -145,7 +147,7 @@ const globalRolesGetResponseSmallSet = { message: 'Resource is current' } ], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is current', diff --git a/cypress/e2e/blueprints/users/users-get.ts b/cypress/e2e/blueprints/users/users-get.ts index 90bed6d1e4f..2ba645c37d1 100644 --- a/cypress/e2e/blueprints/users/users-get.ts +++ b/cypress/e2e/blueprints/users/users-get.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + // GET /v3/users - small set of users data const usersGetResponseSmallSet = { type: 'collection', @@ -43,7 +45,7 @@ const usersGetResponseSmallSet = { uuid: null }, resourceType: 'user', - revision: Number.MAX_VALUE, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests + revision: CYPRESS_SAFE_RESOURCE_REVISION, // The UI will use this point in history to start watching for changes from. If it's too low (than the global system revision) we will spam with requests data: [ { actions: { diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index 4fde924e30b..9d8ab9b4b06 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -1,6 +1,7 @@ import ClusterDashboardPagePo from '@/cypress/e2e/po/pages/explorer/cluster-dashboard.po'; import { SecretsPagePo } from '@/cypress/e2e/po/pages/explorer/secrets.po'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; const certName = 'expired'; const certNs = 'defaut'; @@ -31,7 +32,7 @@ const expiredCert = { name: certName, namespace: certNs, relationships: null, - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: 'Resource is always ready', diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index 754553e9d6a..cc3f81878f3 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -1,3 +1,5 @@ +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; + export function nodeDriveResponse(addCloudCredential: boolean, driver: string): any { return { type: 'collection', @@ -29,7 +31,7 @@ export function nodeDriveResponse(addCloudCredential: boolean, driver: string): }, { toId: `${ driver }config`, toType: 'management.cattle.io.dynamicschema', rel: 'owner', state: 'active', message: 'Resource is current' }], - resourceVersion: Number.MAX_VALUE, + resourceVersion: CYPRESS_SAFE_RESOURCE_REVISION, state: { error: false, message: '', name: 'active', transitioning: false }, From 86759e11ab08f8d43d2cb7c36823ade30d0d9a9d Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 09:25:38 +0000 Subject: [PATCH 25/35] safer userpref check --- cypress/support/commands/rancher-api-commands.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index e73adaa7235..9d1454e44ba 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -859,10 +859,8 @@ Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:stri const payload = groupByPayload(userId, clusterName, groupBy, namespaceFilter); - cy.setRancherResource('v1', 'userpreferences', userId, payload); - - cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => { - return compare(resp?.body, payload); + cy.setRancherResource('v1', 'userpreferences', userId, payload).then(() => { + return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)); }); }); }); @@ -879,6 +877,8 @@ const compare = (core, subset) => { return false; } } else if (subsetValue !== coreValue) { + cy.log('Compare: ', subsetValue, '!==', coreValue); + return false; } } @@ -1006,10 +1006,8 @@ Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, cluste } }; - cy.setRancherResource('v1', `userpreferences`, userId, payload); - - cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => { - return compare(resp?.body, payload); + cy.setRancherResource('v1', 'userpreferences', userId, payload).then(() => { + return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)); }); }); }); From f5beb84dee3a30abd2de7ef360d3d38821395863 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 09:41:50 +0000 Subject: [PATCH 26/35] fix standard user tests --- cypress/e2e/tests/setup/rancher-setup.spec.ts | 2 +- cypress/globals.d.ts | 3 ++- cypress/support/commands/commands.ts | 6 +++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/tests/setup/rancher-setup.spec.ts b/cypress/e2e/tests/setup/rancher-setup.spec.ts index 3aabbede828..8e584e895a7 100644 --- a/cypress/e2e/tests/setup/rancher-setup.spec.ts +++ b/cypress/e2e/tests/setup/rancher-setup.spec.ts @@ -109,6 +109,6 @@ describe('Rancher setup', { tags: ['@adminUserSetup', '@standardUserSetup', '@se role: 'project-member', }, password: Cypress.env('password') - }); + }, { createNameOptions: { onlyContext: true } }); }); }); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index f1abff0fc6f..99a4750e29f 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -57,7 +57,8 @@ export type CreateAmazonRke2ClusterWithoutMachineConfigParams = { } export interface CreateResourceNameOptions { - prefixContext: boolean + onlyContext?: boolean + prefixContext?: boolean } declare global { diff --git a/cypress/support/commands/commands.ts b/cypress/support/commands/commands.ts index 1363c4efd97..9d0ecee30bc 100644 --- a/cypress/support/commands/commands.ts +++ b/cypress/support/commands/commands.ts @@ -73,7 +73,11 @@ Cypress.Commands.add('getRootE2EResourceName', () => { /** * Create resource name */ -Cypress.Commands.add('createE2EResourceName', (context, options = { prefixContext: false }) => { +Cypress.Commands.add('createE2EResourceName', (context, options = { prefixContext: false, onlyContext: false }) => { + if (options?.onlyContext) { + return cy.wrap(context); + } + return cy.getRootE2EResourceName().then((root) => options?.prefixContext ? `${ context }-${ root }` : `${ root }-${ context }`); }); From ad8fbf7d98becaec19ceb97077dcfe8195e231d0 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 09:43:39 +0000 Subject: [PATCH 27/35] more linting --- cypress/e2e/blueprints/other-products/v2-monitoring.js | 6 +++--- cypress/e2e/tests/pages/global-settings/branding.spec.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index aa6e1827de4..b50c5fde06b 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -1931,7 +1931,7 @@ const alertManagerConfigsGet = { createTypes: { 'monitoring.coreos.com.alertmanagerconfig': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.alertmanagerconfigs' }, actions: {}, resourceType: 'monitoring.coreos.com.alertmanagerconfig', - revision: CYPRESS_SAFE_RESOURCE_REVISION + revision: CYPRESS_SAFE_RESOURCE_REVISION, data: [ { id: 'default/test-alert', @@ -2366,7 +2366,7 @@ const prometheusRulesGet = { createTypes: { 'monitoring.coreos.com.prometheusrule': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheusrules' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheusrule', - revision: CYPRESS_SAFE_RESOURCE_REVISION + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 27, data: [ { @@ -6902,7 +6902,7 @@ const prometheusesGet = { createTypes: { 'monitoring.coreos.com.prometheus': 'https://209.97.184.234.sslip.io/k8s/clusters/local/v1/monitoring.coreos.com.prometheuses' }, actions: {}, resourceType: 'monitoring.coreos.com.prometheus', - revision: CYPRESS_SAFE_RESOURCE_REVISION + revision: CYPRESS_SAFE_RESOURCE_REVISION, count: 1, data: [ { diff --git a/cypress/e2e/tests/pages/global-settings/branding.spec.ts b/cypress/e2e/tests/pages/global-settings/branding.spec.ts index d3926444b28..2a894a26cfa 100644 --- a/cypress/e2e/tests/pages/global-settings/branding.spec.ts +++ b/cypress/e2e/tests/pages/global-settings/branding.spec.ts @@ -3,7 +3,7 @@ import { SettingsPagePo } from '@/cypress/e2e/po/pages/global-settings/settings. import HomePagePo from '@/cypress/e2e/po/pages/home.po'; import BurgerMenuPo from '@/cypress/e2e/po/side-bars/burger-side-menu.po'; import ProductNavPo from '@/cypress/e2e/po/side-bars/product-side-nav.po'; -import PreferencesPagePo from '@/cypress/e2e/po/pages/preferences.po'; +// import PreferencesPagePo from '@/cypress/e2e/po/pages/preferences.po'; import { LoginPagePo } from '@/cypress/e2e/po/pages/login-page.po'; const loginPage = new LoginPagePo(); From 2afda2a14a6e79ed6ea748681eb7e7a2a6cb031d Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 10:00:24 +0000 Subject: [PATCH 28/35] because why not --- cypress/e2e/blueprints/blueprint.utils.ts | 1 + .../cluster_management/pod-security-admissions-payload.ts | 2 +- cypress/e2e/blueprints/explorer/cluster/events.ts | 2 +- cypress/e2e/blueprints/explorer/core/service-accounts-get.ts | 2 +- cypress/e2e/blueprints/explorer/fleet/contents-get.ts | 2 +- .../more-resources/api/custom-resource-definition-get.ts | 2 +- .../e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts | 2 +- cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts | 2 +- cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts | 2 +- cypress/e2e/blueprints/explorer/rbac/roles-get.ts | 2 +- .../blueprints/explorer/storage/persistent-volume-claims-get.ts | 2 +- .../e2e/blueprints/explorer/storage/persistent-volumes-get.ts | 2 +- cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts | 2 +- .../explorer/workloads/deployments/deployment-create.ts | 2 +- .../blueprints/explorer/workloads/deployments/deployment-get.ts | 2 +- .../blueprints/explorer/workloads/deployments/deplyment-list.ts | 2 +- cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts | 2 +- .../service-discovery/horizontal-pod-autoscalers-get.ts | 2 +- .../explorer/workloads/service-discovery/ingresses-get.ts | 2 +- .../explorer/workloads/service-discovery/services-get.ts | 2 +- cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts | 2 +- cypress/e2e/blueprints/fleet/workspaces-get.ts | 2 +- cypress/e2e/blueprints/global_settings/home-links-response.ts | 2 +- .../manager/digital-ocean-cluster-provisioning-response.ts | 2 +- cypress/e2e/blueprints/manager/machine-pool-config-response.ts | 2 +- cypress/e2e/blueprints/nav/edit-cluster.ts | 2 +- cypress/e2e/blueprints/nav/fake-cluster.ts | 2 +- cypress/e2e/blueprints/other-products/opa-gatekeeper.js | 2 +- cypress/e2e/blueprints/other-products/v2-monitoring.js | 2 +- cypress/e2e/blueprints/roles/global-roles-get.ts | 2 +- cypress/e2e/blueprints/users/users-get.ts | 2 +- cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts | 2 +- cypress/e2e/tests/pages/manager/mock-responses.ts | 2 +- 33 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 cypress/e2e/blueprints/blueprint.utils.ts diff --git a/cypress/e2e/blueprints/blueprint.utils.ts b/cypress/e2e/blueprints/blueprint.utils.ts new file mode 100644 index 00000000000..e6ac6cae1da --- /dev/null +++ b/cypress/e2e/blueprints/blueprint.utils.ts @@ -0,0 +1 @@ +export const CYPRESS_SAFE_RESOURCE_REVISION = 999999999; diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts index 32af062ad07..03013093d8c 100644 --- a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; export const createPayloadData = { id: 'e2e-pod-security-admission-1705617529465', diff --git a/cypress/e2e/blueprints/explorer/cluster/events.ts b/cypress/e2e/blueprints/explorer/cluster/events.ts index d5c161f60f6..0d2ef6a86a9 100644 --- a/cypress/e2e/blueprints/explorer/cluster/events.ts +++ b/cypress/e2e/blueprints/explorer/cluster/events.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/events - return empty events data const eventsGetEmptyEventsSet = { diff --git a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts index fc4b6782609..3b3d9226e17 100644 --- a/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts +++ b/cypress/e2e/blueprints/explorer/core/service-accounts-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/serviceaccounts - return empty service accounts data const serviceAccGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts index ca271b2dc71..d48ac3cb231 100644 --- a/cypress/e2e/blueprints/explorer/fleet/contents-get.ts +++ b/cypress/e2e/blueprints/explorer/fleet/contents-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/fleet.cattle.io.contents - return empty contents data const fleetContentsGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts index 74faa2d45aa..9a4e4c6c775 100644 --- a/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts +++ b/cypress/e2e/blueprints/explorer/more-resources/api/custom-resource-definition-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; // GET /v1/apiextensions.k8s.io.customresourcedefinitions - small set of crds data const crdsGetResponseSmallSet = { diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts index 2f2f5926c88..cabd973eec5 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-role-bindings-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/rbac.authorization.k8s.io.clusterrolebinding - return empty cluster role binding data const clusterRoleBindingGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts index 2da56ea0744..ae554d62fe0 100644 --- a/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/cluster-roles-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/rbac.authorization.k8s.io.clusterrolebinding - return empty cluster roles data const clusterRolesGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts index c3d04a42719..62c88453890 100644 --- a/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/role-bindings-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/rbac.authorization.k8s.io.rolebindings- return empty role binding data const roleBindingGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts index 6708a873a37..25181d3d231 100644 --- a/cypress/e2e/blueprints/explorer/rbac/roles-get.ts +++ b/cypress/e2e/blueprints/explorer/rbac/roles-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/rbac.authorization.k8s.io.roles - return empty roles data const rolesGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts index ac17f553784..deed8ff5485 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volume-claims-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/persistentvolumeclaim- return empty persistentvolumeclaims data const persistentvolumeclaimsGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts index 567e77e8465..4db44a01697 100644 --- a/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/persistent-volumes-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/persistentvolumes- return empty persistentvolumes data const persistentvolumesGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts index bc05698581d..23f4aba4932 100644 --- a/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts +++ b/cypress/e2e/blueprints/explorer/storage/storage-classes-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../blueprint.utils'; // GET /v1/storage.k8s.io.storageclasses- return empty storageclasses data const pstorageclassesGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts index fd5b64d5ca5..401b76a25cb 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-create.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; export const createDeploymentBlueprint = { apiVersion: 'apps/v1', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts index 3b2dde12577..50b0329fe33 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deployment-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; export const deploymentGetResponse = { id: 'default/test-deployment', diff --git a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts index e1285ffb942..5f3ef26fc8e 100644 --- a/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts +++ b/cypress/e2e/blueprints/explorer/workloads/deployments/deplyment-list.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; export const deploymentCollection = { type: 'collection', diff --git a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts index f4be057043c..f1d63e32cdc 100644 --- a/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/pods/pods-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; // GET /v1/pods - small set of pods data const podsGetResponseSmallSet = { diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts index bc7b4bb06e7..51b7b030c25 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/horizontal-pod-autoscalers-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; // GET /v1/autoscaling.horizontalpodautoscalers - return empty horizontalpodautoscalers data const horizontalpodautoscalerGetResponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts index 4cd47405362..037e4eb4e09 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/ingresses-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; // GET /v1/networking.k8s.io.ingresses - return empty ingresses data const ingressesGetReponseEmpty = { diff --git a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts index b5312a4b4f3..5b4edc0f6f4 100644 --- a/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts +++ b/cypress/e2e/blueprints/explorer/workloads/service-discovery/services-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../../../blueprint.utils'; // GET /v1/services - return empty services data const servicesGetReponseEmpty = { diff --git a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts index 9f027fbcc0f..13725a084e1 100644 --- a/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts +++ b/cypress/e2e/blueprints/fleet/cluster-registration-tokens-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GET /v1/fleet.cattle.io.clusterregistrationtokens - return empty clusterregistrationtokens data const clusterRegistrationTokensGetReponseEmpty = { diff --git a/cypress/e2e/blueprints/fleet/workspaces-get.ts b/cypress/e2e/blueprints/fleet/workspaces-get.ts index 7f54d23387d..ca55a53d013 100644 --- a/cypress/e2e/blueprints/fleet/workspaces-get.ts +++ b/cypress/e2e/blueprints/fleet/workspaces-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GET /v1/management.cattle.io.fleetworkspaces - small set of fleet workspaces data const fleetworkspacesGetResponseSmallSet = { diff --git a/cypress/e2e/blueprints/global_settings/home-links-response.ts b/cypress/e2e/blueprints/global_settings/home-links-response.ts index 620d0aeda82..989b8bf3e86 100644 --- a/cypress/e2e/blueprints/global_settings/home-links-response.ts +++ b/cypress/e2e/blueprints/global_settings/home-links-response.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; export function applyCustomLinksResponse(customLinkName: string, customLinkUrl:string):object { return { diff --git a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts index 02fe3d1b809..0ea06f9de0a 100644 --- a/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts +++ b/cypress/e2e/blueprints/manager/digital-ocean-cluster-provisioning-response.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; export function clusterProvDigitalOceanSingleResponse(clusterName: string, cloudCredName: string, machinePoolId: string):object { return { diff --git a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts index be92e98de21..ab86dc70ed1 100644 --- a/cypress/e2e/blueprints/manager/machine-pool-config-response.ts +++ b/cypress/e2e/blueprints/manager/machine-pool-config-response.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; export function machinePoolConfigResponse(clusterName:string, machinePoolId:string ):object { return { diff --git a/cypress/e2e/blueprints/nav/edit-cluster.ts b/cypress/e2e/blueprints/nav/edit-cluster.ts index 8605f3ea237..fb90d99f6bb 100644 --- a/cypress/e2e/blueprints/nav/edit-cluster.ts +++ b/cypress/e2e/blueprints/nav/edit-cluster.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // /v1/management.cattle.io.nodedrivers?* export function generateFakeNodeDriversReply():any { diff --git a/cypress/e2e/blueprints/nav/fake-cluster.ts b/cypress/e2e/blueprints/nav/fake-cluster.ts index 23464f6fb4f..8391e69528d 100644 --- a/cypress/e2e/blueprints/nav/fake-cluster.ts +++ b/cypress/e2e/blueprints/nav/fake-cluster.ts @@ -14,7 +14,7 @@ import { generateFakeSecretsReply } from './edit-cluster.ts'; -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GENERAL DATA NOT CONFIGURABLE, for now... const MACHINE_POOL_ID = '995mj'; diff --git a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js index 41b07170e2a..061a93e150d 100644 --- a/cypress/e2e/blueprints/other-products/opa-gatekeeper.js +++ b/cypress/e2e/blueprints/other-products/opa-gatekeeper.js @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; const k8sSchemas = [ { diff --git a/cypress/e2e/blueprints/other-products/v2-monitoring.js b/cypress/e2e/blueprints/other-products/v2-monitoring.js index b50c5fde06b..ad2709ea198 100644 --- a/cypress/e2e/blueprints/other-products/v2-monitoring.js +++ b/cypress/e2e/blueprints/other-products/v2-monitoring.js @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GET /k8s/clusters/local/v1/monitoring.coreos.com.podmonitors const podMonitorsGet = { diff --git a/cypress/e2e/blueprints/roles/global-roles-get.ts b/cypress/e2e/blueprints/roles/global-roles-get.ts index 058c34fe357..43cb057d39b 100644 --- a/cypress/e2e/blueprints/roles/global-roles-get.ts +++ b/cypress/e2e/blueprints/roles/global-roles-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GET /v1/management.cattle.io.globalroles - small set of pods data const globalRolesGetResponseSmallSet = { diff --git a/cypress/e2e/blueprints/users/users-get.ts b/cypress/e2e/blueprints/users/users-get.ts index 2ba645c37d1..582eda01f02 100644 --- a/cypress/e2e/blueprints/users/users-get.ts +++ b/cypress/e2e/blueprints/users/users-get.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; // GET /v3/users - small set of users data const usersGetResponseSmallSet = { diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index 9d8ab9b4b06..7bcb17ac2cd 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -1,7 +1,7 @@ import ClusterDashboardPagePo from '@/cypress/e2e/po/pages/explorer/cluster-dashboard.po'; import { SecretsPagePo } from '@/cypress/e2e/po/pages/explorer/secrets.po'; -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; const certName = 'expired'; const certNs = 'defaut'; diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index cc3f81878f3..dac6f02338c 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; export function nodeDriveResponse(addCloudCredential: boolean, driver: string): any { return { From daf99d58bb010922219473cf8ec871e2233436cf Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 10:32:04 +0000 Subject: [PATCH 29/35] fixes/improvements --- .../explorer/dashboard/certificates.spec.ts | 2 +- .../e2e/tests/pages/manager/mock-responses.ts | 2 +- .../support/commands/rancher-api-commands.ts | 20 +++++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts index 7bcb17ac2cd..9d8ab9b4b06 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/certificates.spec.ts @@ -1,7 +1,7 @@ import ClusterDashboardPagePo from '@/cypress/e2e/po/pages/explorer/cluster-dashboard.po'; import { SecretsPagePo } from '@/cypress/e2e/po/pages/explorer/secrets.po'; -import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; const certName = 'expired'; const certNs = 'defaut'; diff --git a/cypress/e2e/tests/pages/manager/mock-responses.ts b/cypress/e2e/tests/pages/manager/mock-responses.ts index dac6f02338c..cc3f81878f3 100644 --- a/cypress/e2e/tests/pages/manager/mock-responses.ts +++ b/cypress/e2e/tests/pages/manager/mock-responses.ts @@ -1,4 +1,4 @@ -import { CYPRESS_SAFE_RESOURCE_REVISION } from '../blueprint.utils'; +import { CYPRESS_SAFE_RESOURCE_REVISION } from '@/cypress/e2e/blueprints/blueprint.utils'; export function nodeDriveResponse(addCloudCredential: boolean, driver: string): any { return { diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 9d1454e44ba..c330c8a36c7 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -517,6 +517,8 @@ Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId if (!testFn(resp)) { retries = retries - 1; if (retries === 0) { + cy.log(`waitForRancherResource: Failed to wait for updated state for ${ url }`); + return Promise.reject(new Error(`Failed wait for expected value for ${ url }`)); } cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting @@ -867,6 +869,7 @@ Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:stri const compare = (core, subset) => { const entries = Object.entries(subset); + let result = true; for (let i = 0; i < entries.length; i++) { const [key, subsetValue] = entries[i]; @@ -874,16 +877,25 @@ const compare = (core, subset) => { if (typeof subsetValue === 'object') { if (!compare(coreValue, subsetValue)) { - return false; + cy.log(`Compare Failed: Key: "${ key }"`); + + result = false; + break; } } else if (subsetValue !== coreValue) { - cy.log('Compare: ', subsetValue, '!==', coreValue); + cy.log(`Compare Failed: Key: "${ key }". Comparison "${ subsetValue }" !== "` + `${ coreValue }"`); - return false; + result = false; + break; } } - return true; + if (!result) { + cy.log(`Compare Failed: Result: Actual State ${ JSON.stringify(core) }`); + cy.log(`Compare Failed: Result: Expected Sub-state ${ JSON.stringify(subset) }`); + } + + return result; }; /** From 0588ce63cd80b983e3ddd6b14b74f7297d987700 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 11:08:32 +0000 Subject: [PATCH 30/35] Add retry to updateNamespaceFilter --- .../horizontal-pod-autoscalers.spec.ts | 7 ++--- cypress/globals.d.ts | 2 +- .../support/commands/rancher-api-commands.ts | 27 ++++++++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts index 142fe423c0e..2fd6984c29a 100644 --- a/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts +++ b/cypress/e2e/tests/pages/explorer/service-discovery/horizontal-pod-autoscalers.spec.ts @@ -9,15 +9,16 @@ describe('HorizontalPodAutoscalers', { testIsolation: 'off', tags: ['@explorer', }); describe('List', { tags: ['@vai', '@adminUser'] }, () => { + before('set up', () => { + cy.updateNamespaceFilter('local', 'none', '{\"local\":[]}'); + }); + it('validate HorizontalPodAutoscalers table in empty state', () => { horizontalPodAutoScalersNoData(); horizontalPodAutoscalersPage.goTo(); horizontalPodAutoscalersPage.waitForPage(); cy.wait('@horizontalpodautoscalerNoData'); - // Flake: Doing this in one place via api in a before block somehow doesn't stick - horizontalPodAutoscalersPage.header().selectNamespaceFilterOption('All Namespaces'); - const expectedHeaders = ['State', 'Name', 'Workload', 'Minimum Replicas', 'Maximum Replicas', 'Current Replicas', 'Age']; horizontalPodAutoscalersPage.list().resourceTable().sortableTable().tableHeaderRow() diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 99a4750e29f..9ec0302d248 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -107,7 +107,7 @@ declare global { * @param groupBy to update list view to 'flat list', 'group by namespaces', or 'group by node' ('none', 'metadata.namespace', or 'role') * @param namespaceFilter to filter by 'only user namespaces', 'all namespace', etc. ('{"local":["all://user"]}', '{\"local\":[]}', etc.) */ - updateNamespaceFilter(clusterName: string, groupBy:string, namespaceFilter: string): Chainable; + updateNamespaceFilter(clusterName: string, groupBy:string, namespaceFilter: string, iteration?: number): Chainable; /** * Wrapper for cy.get() to simply define the data-testid value that allows you to pass a matcher to find the element. diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index c330c8a36c7..edbd7cc3c74 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -458,6 +458,8 @@ Cypress.Commands.add('setRancherResource', (prefix, resourceType, resourceId, bo }) .then((resp) => { expect(resp.status).to.eq(200); + + return resp; }); }); @@ -519,12 +521,14 @@ Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId if (retries === 0) { cy.log(`waitForRancherResource: Failed to wait for updated state for ${ url }`); - return Promise.reject(new Error(`Failed wait for expected value for ${ url }`)); + return false; } cy.wait(1500); // eslint-disable-line cypress/no-unnecessary-waiting return retry(); } + + return true; }); }; @@ -855,14 +859,31 @@ Cypress.Commands.add('createAmazonMachineConfig', (instanceType, region, vpcId, }); // update resource list view preference -Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:string, namespaceFilter: string) => { +Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:string, namespaceFilter: string, iteration = 0) => { return cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { const userId = resp.body.data[0].id.trim(); const payload = groupByPayload(userId, clusterName, groupBy, namespaceFilter); + cy.log(`updateNamespaceFilter: /v1/userpreferences/${ userId }. Payload: ${ JSON.stringify(payload) }`); + cy.setRancherResource('v1', 'userpreferences', userId, payload).then(() => { - return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)); + return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)) + .then((res) => { + if (res) { + cy.log(`updateNamespaceFilter: Success!`); + } else { + if (iteration < 3) { + cy.log(`updateNamespaceFilter: Failed! Going to retry...`); + + return cy.updateNamespaceFilter(clusterName, groupBy, namespaceFilter, iteration + 1); + } + + cy.log(`updateNamespaceFilter: Failed! Giving up...`); + + return Promise.reject(new Error('updateNamespaceFilter failed')); + } + }); }); }); }); From a9a79caa7729cf7249688197c32ea0eaa81ad452 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 12:03:36 +0000 Subject: [PATCH 31/35] improve CRD list check for count --- cypress/e2e/po/components/pagination.po.ts | 12 +++++ .../e2e/po/side-bars/product-side-nav.po.ts | 12 ++++- .../api/custom-resource-definitions.spec.ts | 46 +++++++++++++------ cypress/globals.d.ts | 2 +- .../support/commands/rancher-api-commands.ts | 5 +- 5 files changed, 56 insertions(+), 21 deletions(-) diff --git a/cypress/e2e/po/components/pagination.po.ts b/cypress/e2e/po/components/pagination.po.ts index c42d6179e9c..ba97cff5847 100644 --- a/cypress/e2e/po/components/pagination.po.ts +++ b/cypress/e2e/po/components/pagination.po.ts @@ -1,4 +1,5 @@ import ComponentPo from '@/cypress/e2e/po/components/component.po'; +import ProductNavPo from '~/cypress/e2e/po/side-bars/product-side-nav.po'; export default class PaginationPo extends ComponentPo { constructor(selector = 'div.paging') { @@ -24,4 +25,15 @@ export default class PaginationPo extends ComponentPo { paginationText() { return this.self().find('span').invoke('text'); } + + checkPaginationText(productNav: ProductNavPo, options: { + sideNameLabel: string, + expectedText: (count: number) => string + }) { + this.paginationText().then((el) => { + productNav.sideMenuEntryByLabelCount(options.sideNameLabel).then((count) => { + expect(el.trim()).to.eq(options.expectedText(count.trim())); + }); + }); + } } diff --git a/cypress/e2e/po/side-bars/product-side-nav.po.ts b/cypress/e2e/po/side-bars/product-side-nav.po.ts index 61eb6d3b5a2..57391d1881a 100644 --- a/cypress/e2e/po/side-bars/product-side-nav.po.ts +++ b/cypress/e2e/po/side-bars/product-side-nav.po.ts @@ -37,12 +37,20 @@ export default class ProductNavPo extends ComponentPo { return cy.get('.side-nav', LONG_TIMEOUT_OPT).should('exist').contains('.accordion.has-children', label, LONG_TIMEOUT_OPT).click(); } + sideMenuEntryByLabelCount(label: string): Cypress.Chainable { + return this.sideMenuEntryByLabel(label).parent().find('.count').should('exist') + .invoke('text'); + } + + sideMenuEntryByLabel(label: string): Cypress.Chainable { + return this.self().should('exist', LONG_TIMEOUT_OPT).find('.child.nav-type a .label').contains(label); + } + /** * Navigate to a side menu entry by label */ navToSideMenuEntryByLabel(label: string): Cypress.Chainable { - return this.self().should('exist', LONG_TIMEOUT_OPT).find('.child.nav-type a .label').contains(label) - .click({ force: true }); + return this.sideMenuEntryByLabel(label).click({ force: true }); } /** diff --git a/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts b/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts index 41958c7a5e8..c3da910c863 100644 --- a/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts +++ b/cypress/e2e/tests/pages/explorer/more-resources/api/custom-resource-definitions.spec.ts @@ -73,17 +73,23 @@ describe('CustomResourceDefinitions', { testIsolation: 'off', tags: ['@explorer' crdsPage.sortableTable().pagination().endButton().isEnabled(); // check text before navigation - crdsPage.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 10 of ${ count } CustomResourceDefinitions`); - }); + crdsPage.sortableTable().pagination().checkPaginationText( + crdsPage.productNav(), { + sideNameLabel: 'CustomResourceDefinitions', + expectedText: (count: number) => `1 - 10 of ${ count } CustomResourceDefinitions` + } + ); // navigate to next page - right button crdsPage.sortableTable().pagination().rightButton().click(); // check text and buttons after navigation - crdsPage.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`11 - 20 of ${ count } CustomResourceDefinitions`); - }); + crdsPage.sortableTable().pagination().checkPaginationText( + crdsPage.productNav(), { + sideNameLabel: 'CustomResourceDefinitions', + expectedText: (count: number) => `11 - 20 of ${ count } CustomResourceDefinitions` + } + ); crdsPage.sortableTable().pagination().beginningButton().isEnabled(); crdsPage.sortableTable().pagination().leftButton().isEnabled(); @@ -91,9 +97,13 @@ describe('CustomResourceDefinitions', { testIsolation: 'off', tags: ['@explorer' crdsPage.sortableTable().pagination().leftButton().click(); // check text and buttons after navigation - crdsPage.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 10 of ${ count } CustomResourceDefinitions`); - }); + crdsPage.sortableTable().pagination().checkPaginationText( + crdsPage.productNav(), { + sideNameLabel: 'CustomResourceDefinitions', + expectedText: (count: number) => `1 - 10 of ${ count } CustomResourceDefinitions` + } + ); + crdsPage.sortableTable().pagination().beginningButton().isDisabled(); crdsPage.sortableTable().pagination().leftButton().isDisabled(); @@ -109,17 +119,23 @@ describe('CustomResourceDefinitions', { testIsolation: 'off', tags: ['@explorer' } // check text after navigation - crdsPage.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.contain(`${ count - (lastPageCount) + 1 } - ${ count } of ${ count } CustomResourceDefinitions`); - }); + crdsPage.sortableTable().pagination().checkPaginationText( + crdsPage.productNav(), { + sideNameLabel: 'CustomResourceDefinitions', + expectedText: (count: number) => `${ count - (lastPageCount) + 1 } - ${ count } of ${ count } CustomResourceDefinitions` + } + ); // navigate to first page - beginning button crdsPage.sortableTable().pagination().beginningButton().click(); // check text and buttons after navigation - crdsPage.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 10 of ${ count } CustomResourceDefinitions`); - }); + crdsPage.sortableTable().pagination().checkPaginationText( + crdsPage.productNav(), { + sideNameLabel: 'CustomResourceDefinitions', + expectedText: (count: number) => `1 - 10 of ${ count } CustomResourceDefinitions` + } + ); crdsPage.sortableTable().pagination().beginningButton().isDisabled(); crdsPage.sortableTable().pagination().leftButton().isDisabled(); }); diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index 9ec0302d248..d6fbc067af0 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -94,7 +94,7 @@ declare global { getRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId?: string, expectedStatusCode?: number): Chainable; setRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, body: any): Chainable; createRancherResource(prefix: 'v3' | 'v1', resourceType: string, body: any): Chainable; - waitForRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, testFn: (resp: any) => boolean): Chainable; + waitForRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, testFn: (resp: any) => boolean, retries?: number): Chainable; waitForRancherResources(prefix: 'v3' | 'v1', resourceType: string, expectedResourcesTotal: number, greaterThan: boolean): Chainable; deleteRancherResource(prefix: 'v3' | 'v1' | 'k8s', resourceType: string, resourceId: string, failOnStatusCode?: boolean): Chainable; deleteNodeTemplate(nodeTemplateId: string, timeout?: number, failOnStatusCode?: boolean) diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index edbd7cc3c74..8e42919d63d 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -502,9 +502,8 @@ Cypress.Commands.add('createRancherResource', (prefix, resourceType, body) => { }); }); -Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId, testFn) => { +Cypress.Commands.add('waitForRancherResource', (prefix, resourceType, resourceId, testFn, retries = 20) => { const url = `${ Cypress.env('api') }/${ prefix }/${ resourceType }/${ resourceId }`; - let retries = 20; const retry = () => { cy.request({ @@ -868,7 +867,7 @@ Cypress.Commands.add('updateNamespaceFilter', (clusterName: string, groupBy:stri cy.log(`updateNamespaceFilter: /v1/userpreferences/${ userId }. Payload: ${ JSON.stringify(payload) }`); cy.setRancherResource('v1', 'userpreferences', userId, payload).then(() => { - return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)) + return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload), 5) .then((res) => { if (res) { cy.log(`updateNamespaceFilter: Success!`); From d0dbd452e96f45721988f4461b74d6455fea8a51 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 13:12:28 +0000 Subject: [PATCH 32/35] after own review --- cypress/e2e/po/components/pagination.po.ts | 3 + .../pages/explorer2/workloads/pods.spec.ts | 120 +++++++++--------- 2 files changed, 63 insertions(+), 60 deletions(-) diff --git a/cypress/e2e/po/components/pagination.po.ts b/cypress/e2e/po/components/pagination.po.ts index ba97cff5847..02a967098cb 100644 --- a/cypress/e2e/po/components/pagination.po.ts +++ b/cypress/e2e/po/components/pagination.po.ts @@ -26,6 +26,9 @@ export default class PaginationPo extends ComponentPo { return this.self().find('span').invoke('text'); } + /** + * Check the x of y pagination text against the side nav count + */ checkPaginationText(productNav: ProductNavPo, options: { sideNameLabel: string, expectedText: (count: number) => string diff --git a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts index 89c921dacf7..505038e8e81 100644 --- a/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts +++ b/cypress/e2e/tests/pages/explorer2/workloads/pods.spec.ts @@ -1,7 +1,7 @@ -import { WorkloadsPodsListPagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; +import { WorkloadsPodsListPagePo, WorkLoadsPodDetailsPagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; // import { WorkloadsPodsListPagePo, WorkLoadsPodDetailsPagePo, WorkloadsPodsCreatePagePo } from '@/cypress/e2e/po/pages/explorer/workloads-pods.po'; -// import { createPodBlueprint, clonePodBlueprint } from '@/cypress/e2e/blueprints/explorer/workload-pods'; -// import PodPo from '@/cypress/e2e/po/components/workloads/pod.po'; +import { createPodBlueprint, clonePodBlueprint } from '@/cypress/e2e/blueprints/explorer/workload-pods'; +import PodPo from '@/cypress/e2e/po/components/workloads/pod.po'; // import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; import HomePagePo from '@/cypress/e2e/po/pages/home.po'; import { generatePodsDataSmall } from '@/cypress/e2e/blueprints/explorer/workloads/pods/pods-get'; @@ -203,83 +203,83 @@ describe('Pods', { testIsolation: 'off', tags: ['@explorer2', '@adminUser'] }, ( }); }); - // describe('Should open a terminal', () => { - // beforeEach(() => { - // workloadsPodPage.goTo(); - // }); + describe('Should open a terminal', () => { + beforeEach(() => { + workloadsPodPage.goTo(); + }); - // it('should open a pod shell', () => { - // const shellPodPo = new PodPo(); + it('should open a pod shell', () => { + const shellPodPo = new PodPo(); - // shellPodPo.openPodShell(); - // }); - // }); + shellPodPo.openPodShell(); + }); + }); - // describe('When cloning a pod', () => { - // const { name: origPodName, namespace } = createPodBlueprint.metadata; - // const { name: clonePodName } = clonePodBlueprint.metadata; + describe('When cloning a pod', () => { + const { name: origPodName, namespace } = createPodBlueprint.metadata; + const { name: clonePodName } = clonePodBlueprint.metadata; - // beforeEach(() => { - // cy.intercept('GET', `/v1/pods/${ namespace }/${ origPodName }?exclude=metadata.managedFields`).as('origPod'); - // cy.intercept('GET', `/v1/pods/${ namespace }/${ clonePodName }?exclude=metadata.managedFields`).as('clonedPod'); + beforeEach(() => { + cy.intercept('GET', `/v1/pods/${ namespace }/${ origPodName }?exclude=metadata.managedFields`).as('origPod'); + cy.intercept('GET', `/v1/pods/${ namespace }/${ clonePodName }?exclude=metadata.managedFields`).as('clonedPod'); - // workloadsPodPage.goTo(); + workloadsPodPage.goTo(); - // const createPodPo = new PodPo(); + const createPodPo = new PodPo(); - // createPodPo.createPodViaKubectl(createPodBlueprint); - // }); + createPodPo.createPodViaKubectl(createPodBlueprint); + }); - // it(`Should have same spec as the original pod`, () => { - // const cloneCreatePodPage = new WorkLoadsPodDetailsPagePo(origPodName, { mode: 'clone' }); + it(`Should have same spec as the original pod`, () => { + const cloneCreatePodPage = new WorkLoadsPodDetailsPagePo(origPodName, { mode: 'clone' }); - // cloneCreatePodPage.goTo(); + cloneCreatePodPage.goTo(); - // let origPodSpec: any; + let origPodSpec: any; - // cy.wait('@origPod', { timeout: 20000 }) - // .then(({ response }) => { - // expect(response?.statusCode).to.eq(200); - // origPodSpec = response?.body.spec; - // expect(origPodSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); - // }); + cy.wait('@origPod', { timeout: 20000 }) + .then(({ response }) => { + expect(response?.statusCode).to.eq(200); + origPodSpec = response?.body.spec; + expect(origPodSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); + }); - // const createClonePo = new PodPo(); + const createClonePo = new PodPo(); - // // Each pod need a unique name - // createClonePo.nameNsDescription().name().set(clonePodName); - // createClonePo.save(); + // Each pod need a unique name + createClonePo.nameNsDescription().name().set(clonePodName); + createClonePo.save(); - // workloadsPodPage.waitForPage(); - // workloadsPodPage.list().checkVisible(); - // workloadsPodPage.list().resourceTable().sortableTable().filter(clonePodName); - // workloadsPodPage.list().resourceTable().sortableTable().rowWithName(clonePodName) - // .checkExists(); + workloadsPodPage.waitForPage(); + workloadsPodPage.list().checkVisible(); + workloadsPodPage.list().resourceTable().sortableTable().filter(clonePodName); + workloadsPodPage.list().resourceTable().sortableTable().rowWithName(clonePodName) + .checkExists(); - // // Simple test to assert we haven't broken Pods detail page - // // https://github.com/rancher/dashboard/issues/10490 - // const clonedPodPage = new WorkLoadsPodDetailsPagePo(clonePodName); + // Simple test to assert we haven't broken Pods detail page + // https://github.com/rancher/dashboard/issues/10490 + const clonedPodPage = new WorkLoadsPodDetailsPagePo(clonePodName); - // clonedPodPage.goTo();// Needs to be goTo to ensure http request is fired - // clonedPodPage.waitForPage(); + clonedPodPage.goTo();// Needs to be goTo to ensure http request is fired + clonedPodPage.waitForPage(); - // cy.wait('@clonedPod', { timeout: 20000 }) - // .then(({ response }) => { - // expect(response?.statusCode).to.eq(200); + cy.wait('@clonedPod', { timeout: 20000 }) + .then(({ response }) => { + expect(response?.statusCode).to.eq(200); - // const clonedSpec = response?.body?.spec; + const clonedSpec = response?.body?.spec; - // // In Dashboard adds empty affinity object by default - // // Remove this to compare - // if (!Object.keys(clonedSpec.affinity).length) { - // delete clonedSpec.affinity; - // } + // In Dashboard adds empty affinity object by default + // Remove this to compare + if (!Object.keys(clonedSpec.affinity).length) { + delete clonedSpec.affinity; + } - // expect(clonedSpec).to.deep.eq(origPodSpec); - // expect(clonedSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); - // }); - // }); - // }); + expect(clonedSpec).to.deep.eq(origPodSpec); + expect(clonedSpec.containers[0].resources).to.deep.eq(createPodBlueprint.spec.containers[0].resources); + }); + }); + }); // describe.skip('[Vue3 Skip]: should delete pod', () => { // const podName = `pod-${ Date.now() }`; From 27f9f6b35f10adda7b32e627b04b447e6ecbc5dc Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 13:44:10 +0000 Subject: [PATCH 33/35] tie in failure and retry to tableRowsPerPageAndNamespaceFilter --- cypress/globals.d.ts | 2 +- .../support/commands/rancher-api-commands.ts | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/cypress/globals.d.ts b/cypress/globals.d.ts index d6fbc067af0..8d5b99566de 100644 --- a/cypress/globals.d.ts +++ b/cypress/globals.d.ts @@ -99,7 +99,7 @@ declare global { deleteRancherResource(prefix: 'v3' | 'v1' | 'k8s', resourceType: string, resourceId: string, failOnStatusCode?: boolean): Chainable; deleteNodeTemplate(nodeTemplateId: string, timeout?: number, failOnStatusCode?: boolean) - tableRowsPerPageAndNamespaceFilter(rows: number, cluster: string, groupBy: string, namespacefilter: string) + tableRowsPerPageAndNamespaceFilter(rows: number, cluster: string, groupBy: string, namespacefilter: string, interation?: number) /** * update namespace filter diff --git a/cypress/support/commands/rancher-api-commands.ts b/cypress/support/commands/rancher-api-commands.ts index 8e42919d63d..70a09fdb084 100644 --- a/cypress/support/commands/rancher-api-commands.ts +++ b/cypress/support/commands/rancher-api-commands.ts @@ -1024,7 +1024,7 @@ Cypress.Commands.add('fetchRevision', () => { }); }); -Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, clusterName: string, groupBy: string, namespaceFilter: string) => { +Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, clusterName: string, groupBy: string, namespaceFilter: string, iteration = 0) => { return cy.getRancherResource('v3', 'users?me=true').then((resp: Cypress.Response) => { const userId = resp.body.data[0].id.trim(); const payload = { @@ -1038,8 +1038,25 @@ Cypress.Commands.add('tableRowsPerPageAndNamespaceFilter', (rows: number, cluste } }; + cy.log(`tableRowsPerPageAndNamespaceFilter: /v1/userpreferences/${ userId }. Payload: ${ JSON.stringify(payload) }`); + cy.setRancherResource('v1', 'userpreferences', userId, payload).then(() => { - return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)); + return cy.waitForRancherResource('v1', 'userpreferences', userId, (resp: any) => compare(resp?.body, payload)) + .then((res) => { + if (res) { + cy.log(`tableRowsPerPageAndNamespaceFilter: Success!`); + } else { + if (iteration < 3) { + cy.log(`tableRowsPerPageAndNamespaceFilter: Failed! Going to retry...`); + + return cy.tableRowsPerPageAndNamespaceFilter(rows, clusterName, groupBy, namespaceFilter, iteration + 1); + } + + cy.log(`tableRowsPerPageAndNamespaceFilter: Failed! Giving up...`); + + return Promise.reject(new Error('tableRowsPerPageAndNamespaceFilter failed')); + } + }); }); }); }); From 2fe495717021cb4e0a1ed70ad1c7d91482d6ca39 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Fri, 1 Nov 2024 13:49:52 +0000 Subject: [PATCH 34/35] handle events count less than 500... --- .../pages/explorer/dashboard/events.spec.ts | 100 ++++++++++-------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts index 6eee2581396..cb3698c3568 100644 --- a/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts +++ b/cypress/e2e/tests/pages/explorer/dashboard/events.spec.ts @@ -54,72 +54,78 @@ describe('Events', { testIsolation: 'off', tags: ['@explorer', '@adminUser'] }, }); it('pagination is visible and user is able to navigate through events data', () => { - ClusterDashboardPagePo.navTo(); + ClusterDashboardPagePo.goTo('local'); clusterDashboard.waitForPage(undefined, 'cluster-events'); EventsPagePo.navTo(); events.waitForPage(); - const count = 500; + cy.getRancherResource('v1', 'events').then((resp: Cypress.Response) => { + // Why 500? there's a hardcoded figure to stops ui from storing more than 500 events ... + const count = resp.body.count < 500 ? resp.body.count : 500; - // pagination is visible - events.sortableTable().pagination().checkVisible(); + // Test break down if less than 400... + expect(count).to.be.greaterThan(400); - const loadingPo = new LoadingPo('.title .resource-loading-indicator'); + // pagination is visible + events.sortableTable().pagination().checkVisible(); - loadingPo.checkNotExists(); + const loadingPo = new LoadingPo('.title .resource-loading-indicator'); - // basic checks on navigation buttons - events.sortableTable().pagination().beginningButton().isDisabled(); - events.sortableTable().pagination().leftButton().isDisabled(); - events.sortableTable().pagination().rightButton().isEnabled(); - events.sortableTable().pagination().endButton().isEnabled(); + loadingPo.checkNotExists(); - // check text before navigation - events.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); - }); + // basic checks on navigation buttons + events.sortableTable().pagination().beginningButton().isDisabled(); + events.sortableTable().pagination().leftButton().isDisabled(); + events.sortableTable().pagination().rightButton().isEnabled(); + events.sortableTable().pagination().endButton().isEnabled(); - // navigate to next page - right button - events.sortableTable().pagination().rightButton().click(); + // check text before navigation + events.sortableTable().pagination().paginationText().then((el) => { + expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); + }); - // check text and buttons after navigation - events.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`101 - 200 of ${ count } Events`); - }); - events.sortableTable().pagination().beginningButton().isEnabled(); - events.sortableTable().pagination().leftButton().isEnabled(); + // navigate to next page - right button + events.sortableTable().pagination().rightButton().click(); - // navigate to first page - left button - events.sortableTable().pagination().leftButton().click(); + // check text and buttons after navigation + events.sortableTable().pagination().paginationText().then((el) => { + expect(el.trim()).to.eq(`101 - 200 of ${ count } Events`); + }); + events.sortableTable().pagination().beginningButton().isEnabled(); + events.sortableTable().pagination().leftButton().isEnabled(); - // check text and buttons after navigation - events.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); - }); - events.sortableTable().pagination().beginningButton().isDisabled(); - events.sortableTable().pagination().leftButton().isDisabled(); + // navigate to first page - left button + events.sortableTable().pagination().leftButton().click(); - // navigate to last page - end button - events.sortableTable().pagination().endButton().scrollIntoView() - .click(); + // check text and buttons after navigation + events.sortableTable().pagination().paginationText().then((el) => { + expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); + }); + events.sortableTable().pagination().beginningButton().isDisabled(); + events.sortableTable().pagination().leftButton().isDisabled(); - // check row count on last page - events.sortableTable().checkRowCount(false, 100); + // navigate to last page - end button + events.sortableTable().pagination().endButton().scrollIntoView() + .click(); - // check text after navigation - events.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`401 - ${ count } of ${ count } Events`); - }); + // check row count on last page + events.sortableTable().checkRowCount(false, 100); - // navigate to first page - beginning button - events.sortableTable().pagination().beginningButton().click(); + // check text after navigation + events.sortableTable().pagination().paginationText().then((el) => { + expect(el.trim()).to.eq(`401 - ${ count } of ${ count } Events`); + }); + + // navigate to first page - beginning button + events.sortableTable().pagination().beginningButton().click(); - // check text and buttons after navigation - events.sortableTable().pagination().paginationText().then((el) => { - expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); + // check text and buttons after navigation + events.sortableTable().pagination().paginationText().then((el) => { + expect(el.trim()).to.eq(`1 - 100 of ${ count } Events`); + }); + events.sortableTable().pagination().beginningButton().isDisabled(); + events.sortableTable().pagination().leftButton().isDisabled(); }); - events.sortableTable().pagination().beginningButton().isDisabled(); - events.sortableTable().pagination().leftButton().isDisabled(); }); it('filter events', () => { From 6a4c4ba2641809833ff40c2f0e7f889cf18af726 Mon Sep 17 00:00:00 2001 From: Richard Cox Date: Wed, 6 Nov 2024 16:19:52 +0000 Subject: [PATCH 35/35] fix merge fail --- cypress/e2e/tests/pages/global-settings/branding.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cypress/e2e/tests/pages/global-settings/branding.spec.ts b/cypress/e2e/tests/pages/global-settings/branding.spec.ts index 5bc949bbc6a..2601b2d2f2f 100644 --- a/cypress/e2e/tests/pages/global-settings/branding.spec.ts +++ b/cypress/e2e/tests/pages/global-settings/branding.spec.ts @@ -165,12 +165,12 @@ describe('Branding', { testIsolation: 'off' }, () => { HomePagePo.navTo(); burgerMenu.headerBrandLogoImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); + expect(el).to.have.attr('src').includes('/img/rancher-logo'); }); BurgerMenuPo.toggle(); burgerMenu.brandLogoImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/rancher-logo.66cf5910.svg'); + expect(el).to.have.attr('src').includes('/img/rancher-logo'); }); }); @@ -236,7 +236,7 @@ describe('Branding', { testIsolation: 'off' }, () => { homePage.goTo(); homePage.getBrandBannerImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/banner.b321f7eb.svg'); + expect(el).to.have.attr('src').includes('/img/banner'); }); }); @@ -309,7 +309,7 @@ describe('Branding', { testIsolation: 'off' }, () => { loginPage.goTo(); loginPage.loginBackgroundImage().should('be.visible').then((el) => { - expect(el).to.have.attr('src').includes('/img/login-landscape.911b980e.svg'); + expect(el).to.have.attr('src').includes('/img/login-landscape'); }); cy.login();