diff --git a/cypress/e2e/po/lists/hosted-providers-list.po.ts b/cypress/e2e/po/lists/hosted-providers-list.po.ts new file mode 100644 index 00000000000..46a3207a9db --- /dev/null +++ b/cypress/e2e/po/lists/hosted-providers-list.po.ts @@ -0,0 +1,15 @@ +import BaseResourceList from '@/cypress/e2e/po/lists/base-resource-list.po'; + +export default class KontainerDriversListPo extends BaseResourceList { + details(name: string, index: number) { + return this.resourceTable().sortableTable().rowWithName(name).column(index); + } + + activate() { + return cy.getId('sortable-table-activate'); + } + + deactivate() { + return cy.getId('sortable-table-deactivate'); + } +} diff --git a/cypress/e2e/po/pages/cluster-manager/hosted-providers.po.ts b/cypress/e2e/po/pages/cluster-manager/hosted-providers.po.ts new file mode 100644 index 00000000000..623b68c5609 --- /dev/null +++ b/cypress/e2e/po/pages/cluster-manager/hosted-providers.po.ts @@ -0,0 +1,36 @@ +import PagePo from '@/cypress/e2e/po/pages/page.po'; +import HostedProvidersListPo from '@/cypress/e2e/po/lists/hosted-providers-list.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'; +/** + * List page for hostedprovider resources + */ +export default class HostedProvidersPagePo extends PagePo { + private static createPath(clusterId: string) { + return `/c/${ clusterId }/manager/hostedprovider`; + } + + static goTo(clusterId: string): Cypress.Chainable { + return super.goTo(HostedProvidersPagePo.createPath(clusterId)); + } + + constructor(clusterId = '_') { + super(HostedProvidersPagePo.createPath(clusterId)); + } + + static navTo() { + const sideNav = new ProductNavPo(); + + BurgerMenuPo.burgerMenuNavToMenubyLabel('Cluster Management'); + sideNav.navToSideMenuGroupByLabel('Providers'); + sideNav.navToSideMenuEntryByLabel('Hosted Providers'); + } + + title() { + return cy.contains('.title > h1', 'Hosted Providers'); + } + + list(): HostedProvidersListPo { + return new HostedProvidersListPo('[data-testid="hosted-provider-list"]'); + } +} diff --git a/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts b/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts index c2a7765cf68..a704e10c009 100644 --- a/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts +++ b/cypress/e2e/tests/pages/manager/cluster-manager.spec.ts @@ -21,8 +21,7 @@ import { nodeDriveResponse } from '@/cypress/e2e/tests/pages/manager/mock-respon import TabbedPo from '@/cypress/e2e/po/components/tabbed.po'; import LoadingPo from '@/cypress/e2e/po/components/loading.po'; import { EXTRA_LONG_TIMEOUT_OPT, MEDIUM_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts'; -// import KontainerDriversPagePo from '@/cypress/e2e/po/pages/cluster-manager/kontainer-drivers.po'; -// import DeactivateDriverDialogPo from '@/cypress/e2e/po/prompts/deactivateDriverDialog.po'; +import HostedProvidersPagePo from '@/cypress/e2e/po/pages/cluster-manager/hosted-providers.po'; import { USERS_BASE_URL } from '@/cypress/support/utils/api-endpoints'; // At some point these will come from somewhere central, then we can make tools to remove resources from this or all runs @@ -36,7 +35,8 @@ const importType = 'cluster'; const clusterNamePartial = `${ runPrefix }-create`; const rke2CustomName = `${ clusterNamePartial }-rke2-custom`; const importGenericName = `${ clusterNamePartial }-import-generic`; -const reenableAKS = false; +let reenableAKS = false; +let originalSettings = '[{"name":"aks","active":true},{"name":"alibaba","active":true},{"name":"eks","active":true},{"name":"gke","active":true}]'; const downloadsFolder = Cypress.config('downloadsFolder'); @@ -46,92 +46,52 @@ describe('Cluster Manager', { testIsolation: 'off', tags: ['@manager', '@adminUs before(() => { cy.login(); + cy.getRancherResource('v1', 'management.cattle.io.settings', 'kev2-operators', null).then((resp: Cypress.Response) => { + const response = resp.body; + + // update original data before sending request + originalSettings = response.value; + }); }); - // Revert commented out tests as part of https://github.com/rancher/dashboard/issues/15391 - - // it('deactivating a kontainer driver should hide its card from the cluster creation page', () => { - // cy.intercept('GET', '/v3/kontainerdrivers').as('getKontainerDrivers'); - // cy.intercept('POST', 'v3/kontainerDrivers/azurekubernetesservice?action=deactivate').as('deactivateDriver'); - // cy.intercept('POST', 'v3/kontainerDrivers/azurekubernetesservice?action=activate').as('activateDriver'); - - // const driversPage = new KontainerDriversPagePo(); - // const clusterCreatePage = new ClusterManagerCreatePagePo(); - - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - - // // assert AKS kontainer driver is in Active state - // cy.wait('@getKontainerDrivers').then(({ response }) => { - // response.body.data.forEach((item: any) => { - // if (item.id === 'azurekubernetesservice') { - // const state = item['active']; - - // expect(state).to.eq(true); - // } - // }); - // }); - - // // deactivate the AKS driver - // driversPage.list().actionMenu('Azure AKS').getMenuItem('Deactivate').click(); - // const deactivateDialog = new DeactivateDriverDialogPo(); - - // deactivateDialog.deactivate(); - // cy.wait('@deactivateDriver').its('response.statusCode').should('eq', 200).then(() => { - // reenableAKS = true; - // }); - - // // verify that the AKS card is not shown - // clusterList.goTo(); - // clusterList.checkIsCurrentPage(); - // clusterList.createCluster(); - // clusterCreatePage.gridElementExistanceByName('Azure AKS', 'not.exist'); - - // // re-enable the AKS kontainer driver - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().actionMenu('Azure AKS').getMenuItem('Activate').click(); - // cy.wait('@activateDriver').its('response.statusCode').should('eq', 200).then(() => { - // reenableAKS = false; - // }); - - // // verify that the AKS card is back - // clusterList.goTo(); - // clusterList.checkIsCurrentPage(); - // clusterList.createCluster(); - // clusterCreatePage.gridElementExistanceByName('Azure AKS', 'exist'); - // }); - - // it('deleting a kontainer driver should hide its card from the cluster creation page', () => { - // // intercept get request for kontainer drivers - // cy.intercept('GET', '/v1/management.cattle.io.kontainerdriver*', (req) => { - // req.reply( { - // type: 'collection', - // resourceType: 'management.cattle.io.kontainerdriver', - // count: 0, - // data: [] - // }); - // } ).as('kontainerDrivers'); - - // const clusterCreatePage = new ClusterManagerCreatePagePo(); - - // // verify that the AKS card is not shown - // clusterList.goTo(); - // clusterList.checkIsCurrentPage(); - // clusterList.createCluster(); - - // clusterCreatePage.waitForPage(); - // cy.wait('@kontainerDrivers'); - - // clusterCreatePage.gridElementExistanceByName('Azure AKS', 'not.exist'); - - // clusterCreatePage.gridElementGroupTitles().should('have.length', 2); - - // clusterCreatePage.gridElementGroupTitles().eq(0).should('not.contain.text', 'Create a cluster'); - - // clusterCreatePage.gridElementGroupTitles().eq(0).should('contain.text', 'Provision new nodes'); - // clusterCreatePage.gridElementGroupTitles().eq(1).should('contain.text', 'Use existing nodes'); - // }); + it('deactivating a hosted provider should hide its card from the cluster creation page', () => { + cy.intercept('PUT', `v1/management.cattle.io.settings/kev2-operators`).as('updateProviders'); + + const providersPage = new HostedProvidersPagePo(); + const clusterCreatePage = new ClusterManagerCreatePagePo(); + + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + + // assert AKS kontainer driver is in Active state + providersPage.list().details('Azure AKS', 1).should('contain', 'Active'); + + // deactivate the AKS driver + providersPage.list().actionMenu('Azure AKS').getMenuItem('Deactivate').click(); + cy.wait('@updateProviders').its('response.statusCode').should('eq', 200).then(() => { + reenableAKS = true; + }); + + // verify that the AKS card is not shown + clusterList.goTo(); + clusterList.checkIsCurrentPage(); + clusterList.createCluster(); + clusterCreatePage.gridElementExistanceByName('Azure AKS', 'not.exist'); + + // re-enable the AKS kontainer driver + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + providersPage.list().actionMenu('Azure AKS').getMenuItem('Activate').click(); + cy.wait('@updateProviders').its('response.statusCode').should('eq', 200).then(() => { + reenableAKS = false; + }); + + // verify that the AKS card is back + clusterList.goTo(); + clusterList.checkIsCurrentPage(); + clusterList.createCluster(); + clusterCreatePage.gridElementExistanceByName('Azure AKS', 'exist'); + }); describe('RKE2 providers', () => { providersList.forEach((prov) => { @@ -797,7 +757,7 @@ describe('Cluster Manager', { testIsolation: 'off', tags: ['@manager', '@adminUs after(() => { if (reenableAKS) { - cy.createRancherResource('v3', 'kontainerDrivers/azurekubernetesservice?action=activate', {}); + cy.setRancherResource('v1', 'management.cattle.io.settings', 'kev2-operators', { value: originalSettings }); } }); }); diff --git a/cypress/e2e/tests/pages/manager/hosted-providers.spec.ts b/cypress/e2e/tests/pages/manager/hosted-providers.spec.ts new file mode 100644 index 00000000000..92f3aa1a706 --- /dev/null +++ b/cypress/e2e/tests/pages/manager/hosted-providers.spec.ts @@ -0,0 +1,173 @@ +import HostedProvidersPagePo from '@/cypress/e2e/po/pages/cluster-manager/hosted-providers.po'; +import ClusterManagerListPagePo from '@/cypress/e2e/po/pages/cluster-manager/cluster-manager-list.po'; +import ClusterManagerCreatePagePo from '@/cypress/e2e/po/edit/provisioning.cattle.io.cluster/create/cluster-create.po'; + +describe('Hosted Providers', { testIsolation: 'off', tags: ['@manager', '@adminUser'] }, () => { + const providersPage = new HostedProvidersPagePo(); + const clusterList = new ClusterManagerListPagePo(); + const createCluster = new ClusterManagerCreatePagePo(); + + const AKS = 'Azure AKS'; + const EKS = 'Amazon EKS'; + const GKE = 'Google GKE'; + + before(() => { + cy.login(); + }); + + it('should show the hosted providers list page', () => { + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + providersPage.title().should('be.visible'); + providersPage.list().resourceTable().sortableTable().checkVisible(); + providersPage.list().resourceTable().sortableTable().checkLoadingIndicatorNotVisible(); + }); + + it('can deactivate provider', () => { + const expected = { + aks: false, eks: true, gke: true + }; + + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + + cy.intercept('PUT', `v1/management.cattle.io.settings/kev2-operators`).as('updateProviders'); + + providersPage.list().actionMenu(AKS).getMenuItem('Deactivate').click(); + + cy.wait('@updateProviders').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + const resValue = JSON.parse(request.body.value); + + resValue.forEach((item: any) => { + if (item.name in expected) { + const state = item['active']; + + expect(state).to.eq(expected[item.name]); + } + }); + }); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(AKS, 'not.exist'); + }); + + it('can activate provider', () => { + const expected = { + aks: true, eks: true, gke: true + }; + + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + + cy.intercept('PUT', `v1/management.cattle.io.settings/kev2-operators`).as('updateProviders'); + + providersPage.list().actionMenu(AKS).getMenuItem('Activate').click(); + + cy.wait('@updateProviders').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + const resValue = JSON.parse(request.body.value); + + resValue.forEach((item: any) => { + if (item.name in expected) { + const state = item['active']; + + expect(state).to.eq(expected[item.name]); + } + }); + }); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(AKS, 'exist'); + }); + + it('can deactivate drivers in bulk', () => { + const expected = { + aks: true, eks: false, gke: false + }; + + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + providersPage.list().details(EKS, 1).should('contain', 'Active'); + providersPage.list().details(GKE, 1).should('contain', 'Active'); + providersPage.list().resourceTable().sortableTable().rowSelectCtlWithName(EKS) + .set(); + providersPage.list().resourceTable().sortableTable().rowSelectCtlWithName(GKE) + .set(); + + cy.intercept('PUT', `v1/management.cattle.io.settings/kev2-operators`).as('updateProviders'); + + providersPage.list().deactivate().click(); + cy.wait('@updateProviders').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + const resValue = JSON.parse(request.body.value); + + resValue.forEach((item: any) => { + if (item.name in expected) { + const state = item['active']; + + expect(state).to.eq(expected[item.name]); + } + }); + }); + providersPage.list().details(EKS, 1).should('contain', 'Inactive'); + providersPage.list().details(GKE, 1).should('contain', 'Inactive'); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(EKS, 'not.exist'); + createCluster.gridElementExistanceByName(GKE, 'not.exist'); + }); + + it('can activate drivers in bulk', () => { + const expected = { + aks: true, eks: true, gke: true + }; + + HostedProvidersPagePo.navTo(); + providersPage.waitForPage(); + providersPage.list().details(EKS, 1).should('contain', 'Inactive'); + providersPage.list().details(GKE, 1).should('contain', 'Inactive'); + providersPage.list().resourceTable().sortableTable().rowSelectCtlWithName(EKS) + .set(); + providersPage.list().resourceTable().sortableTable().rowSelectCtlWithName(GKE) + .set(); + + cy.intercept('PUT', `v1/management.cattle.io.settings/kev2-operators`).as('updateProviders'); + + providersPage.list().activate().click(); + cy.wait('@updateProviders').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + const resValue = JSON.parse(request.body.value); + + resValue.forEach((item: any) => { + if (item.name in expected) { + const state = item['active']; + + expect(state).to.eq(expected[item.name]); + } + }); + }); + providersPage.list().details(EKS, 1).should('contain', 'Active'); + providersPage.list().details(GKE, 1).should('contain', 'Active'); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(EKS, 'exist'); + createCluster.gridElementExistanceByName(GKE, 'exist'); + }); +}); diff --git a/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts b/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts index 1070c53e99f..98714a9a53b 100644 --- a/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts +++ b/cypress/e2e/tests/pages/manager/kontainer-drivers.spec.ts @@ -1,29 +1,27 @@ -// import { isMatch } from 'lodash'; +import { isMatch } from 'lodash'; import KontainerDriversPagePo from '@/cypress/e2e/po/pages/cluster-manager/kontainer-drivers.po'; -// import KontainerDriverEditPo from '@/cypress/e2e/po/edit/kontainer-driver.po'; -// import DeactivateDriverDialogPo from '@/cypress/e2e/po/prompts/deactivateDriverDialog.po'; -// import ClusterManagerListPagePo from '@/cypress/e2e/po/pages/cluster-manager/cluster-manager-list.po'; -// import ClusterManagerCreatePagePo from '@/cypress/e2e/po/edit/provisioning.cattle.io.cluster/create/cluster-create.po'; -// import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; +import KontainerDriverEditPo from '@/cypress/e2e/po/edit/kontainer-driver.po'; +import DeactivateDriverDialogPo from '@/cypress/e2e/po/prompts/deactivateDriverDialog.po'; +import ClusterManagerListPagePo from '@/cypress/e2e/po/pages/cluster-manager/cluster-manager-list.po'; +import ClusterManagerCreatePagePo from '@/cypress/e2e/po/edit/provisioning.cattle.io.cluster/create/cluster-create.po'; +import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po'; // import { EXTRA_LONG_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts'; describe('Kontainer Drivers', { testIsolation: 'off', tags: ['@manager', '@adminUser'] }, () => { const driversPage = new KontainerDriversPagePo(); - // const createDriverPage = new KontainerDriverEditPo(); - // const clusterList = new ClusterManagerListPagePo(); - // const createCluster = new ClusterManagerCreatePagePo(); + const createDriverPage = new KontainerDriverEditPo(); + const clusterList = new ClusterManagerListPagePo(); + const createCluster = new ClusterManagerCreatePagePo(); // see https://github.com/rancher-plugins/kontainer-engine-driver-example/releases for list of example drivers - // const downloadUrl = 'https://github.com/rancher-plugins/kontainer-engine-driver-example/releases/download/v0.2.3/kontainer-engine-driver-example-copy1-linux-amd64'; // description can be used as name to find correct element - // const downloadUrlUpdated = 'https://github.com/rancher-plugins/kontainer-engine-driver-example/releases/download/v0.2.3/kontainer-engine-driver-example-copy2-linux-amd64'; - const removeDriver = false; - const driverId = ''; - // const oracleDriver = 'Oracle OKE'; - // const googleDriver = 'Google GKE'; + const downloadUrl = 'https://github.com/rancher-plugins/kontainer-engine-driver-example/releases/download/v0.2.3/kontainer-engine-driver-example-copy1-linux-amd64'; // description can be used as name to find correct element + const downloadUrlUpdated = 'https://github.com/rancher-plugins/kontainer-engine-driver-example/releases/download/v0.2.3/kontainer-engine-driver-example-copy2-linux-amd64'; + let removeDriver = false; + let driverId = ''; + const oracleDriver = 'Oracle OKE'; + const openTelekomDriver = 'Open Telekom Cloud CCE'; const linodeDriver = 'Linode LKE'; - // const exampleDriver = 'Example'; - // const amazonDriver = 'Amazon EKS'; - // const azureDriver = 'Azure AKS'; + const exampleDriver = 'Example'; before(() => { cy.login(); @@ -46,118 +44,141 @@ describe('Kontainer Drivers', { testIsolation: 'off', tags: ['@manager', '@admin // cy.wait('@refresh', EXTRA_LONG_TIMEOUT_OPT).its('response.statusCode').should('eq', 200); // }); - // Revert commented out tests as part of https://github.com/rancher/dashboard/issues/15391 + it('can create new driver', () => { + cy.intercept('POST', `/v3/kontainerdrivers`).as('createRequest'); + const requestData = { + type: 'kontainerDriver', + active: true, + url: downloadUrl + }; - // In theory this one should be fine... - // it('can create new driver', () => { - // cy.intercept('POST', `/v3/kontainerdrivers`).as('createRequest'); - // const requestData = { - // type: 'kontainerDriver', - // active: true, - // url: downloadUrl - // }; + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + driversPage.createDriver(); - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.createDriver(); - - // createDriverPage.waitForPage(); - - // createDriverPage.downloadUrl().set(downloadUrl); - // createDriverPage.saveCreateForm().createEditView().create(); - - // cy.wait('@createRequest').then(({ request, response }) => { - // removeDriver = true; - // expect(response?.statusCode).to.eq(201); - // expect(isMatch(request.body, requestData)).to.equal(true); - // driverId = response?.body.id; - // }); - - // driversPage.list().details(exampleDriver, 1).should('contain', 'Activating'); - // driversPage.list().details(exampleDriver, 1).contains('Active', { timeout: 60000 }); - - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName('example', 'exist').invoke('index').then((index) => { - // createCluster.selectKubeProvider(index); - // }); - // createCluster.waitForPage('type=example'); - // createCluster.mastheadTitle().should('contain', 'example'); - // }); + createDriverPage.waitForPage(); - // it('will show error if could not deactivate driver', () => { - // cy.intercept('POST', '/v3/kontainerDrivers/googlekubernetesengine?action=deactivate', { - // statusCode: 500, - // body: { message: `Could not deactivate driver` } - // }).as('deactivationError'); + createDriverPage.downloadUrl().set(downloadUrl); + createDriverPage.saveCreateForm().createEditView().create(); - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().details(googleDriver, 1).should('contain', 'Active'); + cy.wait('@createRequest').then(({ request, response }) => { + removeDriver = true; + expect(response?.statusCode).to.eq(201); + expect(isMatch(request.body, requestData)).to.equal(true); + driverId = response?.body.id; + }); - // driversPage.list().actionMenu(googleDriver).getMenuItem('Deactivate').click(); - // const deactivateDialog = new DeactivateDriverDialogPo(); + driversPage.list().details(exampleDriver, 1).should('contain', 'Activating'); + driversPage.list().details(exampleDriver, 1).contains('Active', { timeout: 60000 }); - // deactivateDialog.deactivate(); + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName('example', 'exist').invoke('index').then((index) => { + createCluster.selectKubeProvider(index); + }); + createCluster.waitForPage('type=example'); + createCluster.mastheadTitle().should('contain', 'example'); + }); - // cy.wait('@deactivationError').then(() => { - // deactivateDialog.errorBannerContent('Could not deactivate driver').should('exist').and('be.visible'); - // }); - // deactivateDialog.cancel(); - // }); + it('can activate drivers in bulk', () => { + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + driversPage.list().details(openTelekomDriver, 1).should('contain', 'Inactive'); + driversPage.list().details(oracleDriver, 1).should('contain', 'Inactive'); + driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(openTelekomDriver) + .set(); + driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) + .set(); + + cy.intercept('POST', '/v3/kontainerDrivers/opentelekomcloudcontainerengine?action=activate').as('activateOpenTelekomDriver'); + cy.intercept('POST', '/v3/kontainerDrivers/oraclecontainerengine?action=activate').as('activateOracleDriver'); + + driversPage.list().activate().click(); + cy.wait('@activateOpenTelekomDriver').its('response.statusCode').should('eq', 200); + cy.wait('@activateOracleDriver').its('response.statusCode').should('eq', 200); + driversPage.list().details(openTelekomDriver, 1).should('contain', 'Active'); + driversPage.list().details(oracleDriver, 1).should('contain', 'Active'); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(openTelekomDriver, 'exist'); + createCluster.gridElementExistanceByName(oracleDriver, 'exist'); + }); + + it('will show error if could not deactivate driver', () => { + cy.intercept('POST', '/v3/kontainerDrivers/opentelekomcloudcontainerengine?action=deactivate', { + statusCode: 500, + body: { message: `Could not deactivate driver` } + }).as('deactivationError'); - // Will fail given `can create new driver` is disabled - // it('can deactivate driver', () => { - // const requestData = { }; + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + driversPage.list().details(openTelekomDriver, 1).should('contain', 'Active'); - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); + driversPage.list().actionMenu(openTelekomDriver).getMenuItem('Deactivate').click(); + const deactivateDialog = new DeactivateDriverDialogPo(); - // cy.intercept('POST', `/v3/kontainerDrivers/*?action=deactivate`).as('deactivateDriver'); + deactivateDialog.deactivate(); - // driversPage.list().actionMenu(downloadUrl).getMenuItem('Deactivate').click(); - // const deactivateDialog = new DeactivateDriverDialogPo(); + cy.wait('@deactivationError').then(() => { + deactivateDialog.errorBannerContent('Could not deactivate driver').should('exist').and('be.visible'); + }); + deactivateDialog.cancel(); + }); - // deactivateDialog.deactivate(); + it('can deactivate driver', () => { + const requestData = { }; - // cy.wait('@deactivateDriver').then(({ request, response }) => { - // expect(response?.statusCode).to.eq(200); - // expect(isMatch(request.body, requestData)).to.equal(true); - // }); + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); - // // check options on cluster create page - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName('example', 'not.exist'); - // }); + cy.intercept('POST', `/v3/kontainerDrivers/*?action=deactivate`).as('deactivateDriver'); - // Will fail given `can create new driver` is disabled - // it('can activate driver', () => { - // const requestData = { }; + driversPage.list().actionMenu(downloadUrl).getMenuItem('Deactivate').click(); + const deactivateDialog = new DeactivateDriverDialogPo(); - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); + deactivateDialog.deactivate(); - // cy.intercept('POST', `/v3/kontainerDrivers/*?action=activate`).as('activateDriver'); + cy.wait('@deactivateDriver').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + expect(isMatch(request.body, requestData)).to.equal(true); + }); - // driversPage.list().actionMenu(downloadUrl).getMenuItem('Activate').click(); + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName('example', 'not.exist'); + }); - // cy.wait('@activateDriver').then(({ request, response }) => { - // expect(response?.statusCode).to.eq(200); - // expect(isMatch(request.body, requestData)).to.equal(true); - // }); + it('can activate driver', () => { + const requestData = { }; - // // check options on cluster create page - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName('example', 'exist'); - // }); + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + + cy.intercept('POST', `/v3/kontainerDrivers/*?action=activate`).as('activateDriver'); + + driversPage.list().actionMenu(downloadUrl).getMenuItem('Activate').click(); + + cy.wait('@activateDriver').then(({ request, response }) => { + expect(response?.statusCode).to.eq(200); + expect(isMatch(request.body, requestData)).to.equal(true); + }); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName('example', 'exist'); + }); it('will show error if could not activate driver', () => { cy.intercept('POST', '/v3/kontainerDrivers/linodekubernetesengine?action=activate', { @@ -176,116 +197,87 @@ describe('Kontainer Drivers', { testIsolation: 'off', tags: ['@manager', '@admin }); }); - // Will fail given `can create new driver` is disabled - // it('can edit a cluster driver', () => { - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().actionMenu(downloadUrl).getMenuItem('Edit Config').click(); - // createDriverPage.downloadUrl().set(downloadUrlUpdated); - // cy.intercept('PUT', '/v3/kontainerDrivers/*').as('updateDriver'); - // createDriverPage.saveCreateForm().createEditView().save(); - // cy.wait('@updateDriver').its('response.statusCode').should('eq', 200); - // driversPage.list().details(downloadUrlUpdated, 1).should('contain', 'Active'); - - // // check options on cluster create page - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName('example', 'exist'); - // }); - - // it('can deactivate drivers in bulk', () => { - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().details(amazonDriver, 1).scrollIntoView().should('contain', 'Active'); - // driversPage.list().details(azureDriver, 1).scrollIntoView().should('contain', 'Active'); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(amazonDriver) - // .set(); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(azureDriver) - // .set(); - // driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); - // driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Deactivate') - // .click(); - - // cy.intercept('POST', '/v3/kontainerDrivers/amazonelasticcontainerservice?action=deactivate').as('deactivateAmazonDriver'); - // cy.intercept('POST', '/v3/kontainerDrivers/azurekubernetesservice?action=deactivate').as('deactivateAzureDriver'); - - // const deactivateDialog = new DeactivateDriverDialogPo(); - - // deactivateDialog.deactivate(); - // cy.wait('@deactivateAmazonDriver').its('response.statusCode').should('eq', 200); - // cy.wait('@deactivateAzureDriver').its('response.statusCode').should('eq', 200); - // driversPage.list().details(amazonDriver, 1).should('contain', 'Inactive'); - // driversPage.list().details(azureDriver, 1).should('contain', 'Inactive'); - - // // check options on cluster create page - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName(amazonDriver, 'not.exist'); - // createCluster.gridElementExistanceByName(azureDriver, 'not.exist'); - // }); + it('can edit a cluster driver', () => { + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + driversPage.list().actionMenu(downloadUrl).getMenuItem('Edit Config').click(); + createDriverPage.downloadUrl().set(downloadUrlUpdated); + cy.intercept('PUT', '/v3/kontainerDrivers/*').as('updateDriver'); + createDriverPage.saveCreateForm().createEditView().save(); + cy.wait('@updateDriver').its('response.statusCode').should('eq', 200); + driversPage.list().details(downloadUrlUpdated, 1).should('contain', 'Active'); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName('example', 'exist'); + }); - // it('can activate drivers in bulk', () => { - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().details(amazonDriver, 1).should('contain', 'Inactive'); - // driversPage.list().details(azureDriver, 1).should('contain', 'Inactive'); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(amazonDriver) - // .set(); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(azureDriver) - // .set(); - - // cy.intercept('POST', '/v3/kontainerDrivers/amazonelasticcontainerservice?action=activate').as('activateAmazonDriver'); - // cy.intercept('POST', '/v3/kontainerDrivers/azurekubernetesservice?action=activate').as('activateAzureDriver'); - - // driversPage.list().activate().click(); - // cy.wait('@activateAmazonDriver').its('response.statusCode').should('eq', 200); - // cy.wait('@activateAzureDriver').its('response.statusCode').should('eq', 200); - // driversPage.list().details(amazonDriver, 1).should('contain', 'Active'); - // driversPage.list().details(azureDriver, 1).should('contain', 'Active'); - - // // check options on cluster create page - // ClusterManagerListPagePo.navTo(); - // clusterList.waitForPage(); - // clusterList.createCluster(); - // createCluster.waitForPage(); - // createCluster.gridElementExistanceByName(amazonDriver, 'exist'); - // createCluster.gridElementExistanceByName(azureDriver, 'exist'); - // }); + it('can deactivate drivers in bulk', () => { + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + driversPage.list().details(openTelekomDriver, 1).scrollIntoView().should('contain', 'Active'); + driversPage.list().details(oracleDriver, 1).scrollIntoView().should('contain', 'Active'); + driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(openTelekomDriver) + .set(); + driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) + .set(); + driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); + driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Deactivate') + .click(); + + cy.intercept('POST', '/v3/kontainerDrivers/opentelekomcloudcontainerengine?action=deactivate' ).as('deactivateTelecomDriver'); + cy.intercept('POST', '/v3/kontainerDrivers/oraclecontainerengine?action=deactivate').as('deactivateOracleDriver'); + + const deactivateDialog = new DeactivateDriverDialogPo(); + + deactivateDialog.deactivate(); + cy.wait('@deactivateTelecomDriver').its('response.statusCode').should('eq', 200); + cy.wait('@deactivateOracleDriver').its('response.statusCode').should('eq', 200); + driversPage.list().details(openTelekomDriver, 1).should('contain', 'Inactive'); + driversPage.list().details(oracleDriver, 1).should('contain', 'Inactive'); + + // check options on cluster create page + ClusterManagerListPagePo.navTo(); + clusterList.waitForPage(); + clusterList.createCluster(); + createCluster.waitForPage(); + createCluster.gridElementExistanceByName(openTelekomDriver, 'not.exist'); + createCluster.gridElementExistanceByName(oracleDriver, 'not.exist'); + }); - // it('can delete drivers in bulk', () => { - // KontainerDriversPagePo.navTo(); - // driversPage.waitForPage(); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(oracleDriver) - // .set(); - // driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(linodeDriver) - // .set(); - // driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); - // driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Delete') - // .click(); - - // cy.intercept('DELETE', '/v3/kontainerDrivers/oraclecontainerengine').as('deleteOracleDriver'); - // cy.intercept('DELETE', '/v3/kontainerDrivers/linodekubernetesengine').as('deleteLinodeDriver'); - - // driversPage.list().resourceTable().sortableTable().rowNames() - // .then((rows: any) => { - // const promptRemove = new PromptRemove(); - - // promptRemove.remove(); - - // cy.wait('@deleteLinodeDriver').its('response.statusCode').should('eq', 200); - // cy.wait('@deleteOracleDriver').its('response.statusCode').should('eq', 200); - - // driversPage.waitForPage(); - // driversPage.list().resourceTable().sortableTable().checkRowCount(false, rows.length - 2); - // driversPage.list().resourceTable().sortableTable().rowNames() - // .should('not.contain', linodeDriver) - // .and('not.contain', oracleDriver); - // }); - // }); + it('can delete a driver', () => { + KontainerDriversPagePo.navTo(); + driversPage.waitForPage(); + cy.intercept('DELETE', '/v3/kontainerDrivers/*', { + statusCode: 200, + body: { } + }).as('deleteDriver'); + driversPage.list().resourceTable().sortableTable().rowSelectCtlWithName(exampleDriver) + .set(); + driversPage.list().resourceTable().sortableTable().bulkActionDropDownOpen(); + driversPage.list().resourceTable().sortableTable().bulkActionDropDownButton('Delete') + .click(); + + driversPage.list().resourceTable().sortableTable().rowNames() + .then((rows: any) => { + const promptRemove = new PromptRemove(); + + promptRemove.remove(); + + cy.wait('@deleteDriver').then(({ response }) => { + expect(response?.statusCode).to.eq(200); + if (response?.statusCode === 200) { + removeDriver = false; + } + driversPage.waitForPage(); + driversPage.list().resourceTable().sortableTable().rowNames() + .should('not.contain', exampleDriver); + }); + }); + }); after(() => { if (removeDriver) {