Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion cypress/e2e/po/components/sortable-table.po.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,20 @@ export default class SortableTablePo extends ComponentPo {
*/
rowActionMenuOpen(name: string) {
this.rowWithName(name).actionBtn()
.click();
.click().then((el) => {
expect(el).to.have.attr('aria-expanded', 'true');
});

return this.rowActionMenu();
}

rowActionMenuClose(name: string) {
this.rowWithName(name).actionBtn().then((el) => {
expect(el).to.have.attr('aria-expanded', 'true');
}).click()
.then((el) => {
expect(el).to.have.attr('aria-expanded', 'false');
});

return this.rowActionMenu();
}
Expand Down
4 changes: 4 additions & 0 deletions cypress/e2e/po/lists/base-resource-list.po.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ export default class BaseResourceList extends ComponentPo {
return this.resourceTable().sortableTable().rowActionMenuOpen(rowLabel);
}

actionMenuClose(rowLabel: string) {
return this.resourceTable().sortableTable().rowActionMenuClose(rowLabel);
}

rowWithName(rowLabel: string) {
return this.resourceTable().sortableTable().rowWithName(rowLabel);
}
Expand Down
8 changes: 0 additions & 8 deletions cypress/e2e/po/lists/chart-repositories.po.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,6 @@ import BaseResourceList from '@/cypress/e2e/po/lists/base-resource-list.po';
* List component for catalog.cattle.io.clusterrepo resources
*/
export default class ChartRepositoriesListPo extends BaseResourceList {
actionMenu(repoName: string) {
return this.resourceTable().sortableTable().rowActionMenuOpen(repoName);
}

closeActionMenu() {
cy.get('body').type('{esc}');
}

openBulkActionDropdown() {
return this.resourceTable().sortableTable().bulkActionDropDownOpen();
}
Expand Down
70 changes: 25 additions & 45 deletions cypress/e2e/tests/pages/manager/repositories.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import PromptRemove from '@/cypress/e2e/po/prompts/promptRemove.po';
import ChartRepositoriesPagePo from '@/cypress/e2e/po/pages/chart-repositories.po';
import * as path from 'path';
import * as jsyaml from 'js-yaml';
import { LONG_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts';
import { LONG_TIMEOUT_OPT, MEDIUM_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts';
import { CLUSTER_REPOS_BASE_URL } from '@/cypress/support/utils/api-endpoints';

const chartBranch = `release-v${ CURRENT_RANCHER_VERSION }`;
Expand Down Expand Up @@ -62,6 +62,7 @@ describe('Cluster Management Helm Repositories', { testIsolation: 'off', tags: [
// check list details
repositoriesPage.list().details(this.repoName, 2).should('be.visible');
repositoriesPage.list().details(this.repoName, 1).contains('In Progress').should('be.visible');
cy.waitForRepositoryDownload('v1', 'catalog.cattle.io.clusterrepos', this.repoName);
repositoriesPage.list().details(this.repoName, 1).contains('Active', LONG_TIMEOUT_OPT).should('be.visible');
});

Expand Down Expand Up @@ -268,18 +269,8 @@ describe('Cluster Management Helm Repositories', { testIsolation: 'off', tags: [
// check list details
repositoriesPage.list().details(this.repoName, 2).should('be.visible');

repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Delete').click();

const promptRemove = new PromptRemove();

cy.intercept('DELETE', `v1/catalog.cattle.io.clusterrepos/${ this.repoName }`).as('deleteRepository');

promptRemove.remove();
cy.wait('@deleteRepository');
repositoriesPage.waitForPage();

// check list details
cy.contains(this.repoName).should('not.exist');
// delete repo
cy.deleteRancherResource('v1', 'catalog.cattle.io.clusterrepos', this.repoName);
});

it('can disable/enable a repository', function() {
Expand All @@ -300,45 +291,34 @@ describe('Cluster Management Helm Repositories', { testIsolation: 'off', tags: [
repositoriesPage.waitForPage();

// check list details
repositoriesPage.list().details(this.repoName, 2).should('be.visible');
repositoriesPage.list().details(this.repoName, 1).contains('In Progress').should('be.visible');

// refresh should be displayed for an enabled repo
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Refresh').should('be.visible');
// close action menu
repositoriesPage.list().closeActionMenu();
cy.waitForRepositoryDownload('v1', 'catalog.cattle.io.clusterrepos', this.repoName).then(() => {
repositoriesPage.list().details(this.repoName, 1).contains('Active', MEDIUM_TIMEOUT_OPT).should('be.visible');
// refresh should be displayed for an enabled repo
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Refresh').should('be.visible');
// close action menu
repositoriesPage.list().actionMenuClose(this.repoName);
});

// disable repo
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(1500);
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Disable').click();
repositoriesPage.list().details(this.repoName, 1).contains('Disabled', { timeout: 10000 }).scrollIntoView()
.should('be.visible');
cy.waitForResourceState('v1', 'catalog.cattle.io.clusterrepos', this.repoName).then(() => {
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Disable').click();
repositoriesPage.list().details(this.repoName, 1).contains('Disabled').should('be.visible');
});

// refresh should NOT be displayed for a disabled repo
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Refresh').should('not.exist');
// close action menu
repositoriesPage.list().closeActionMenu();
cy.waitForResourceState('v1', 'catalog.cattle.io.clusterrepos', this.repoName).then(() => {
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Refresh').should('not.exist');
// close action menu
repositoriesPage.list().actionMenuClose(this.repoName);
});

// enable repo
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(1500);
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Enable').click();
repositoriesPage.list().details(this.repoName, 1).contains('Active', LONG_TIMEOUT_OPT).scrollIntoView()
.should('be.visible');
cy.waitForResourceState('v1', 'catalog.cattle.io.clusterrepos', this.repoName).then(() => {
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Enable').click();
repositoriesPage.list().details(this.repoName, 1).contains('Active', MEDIUM_TIMEOUT_OPT).should('be.visible');
});

// delete repo
repositoriesPage.list().actionMenu(this.repoName).getMenuItem('Delete').click();

const promptRemove = new PromptRemove();

cy.intercept('DELETE', `v1/catalog.cattle.io.clusterrepos/${ this.repoName }`).as('deleteRepository');

promptRemove.remove();
cy.wait('@deleteRepository');
repositoriesPage.waitForPage();

// check list details
cy.contains(this.repoName).should('not.exist');
cy.deleteRancherResource('v1', 'catalog.cattle.io.clusterrepos', this.repoName);
});
});
1 change: 1 addition & 0 deletions cypress/globals.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ declare global {
waitForRancherResource(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, testFn: (resp: any) => boolean, retries?: number, config?: {failOnStatusCode?: boolean}): Chainable;
waitForRancherResources(prefix: 'v3' | 'v1', resourceType: string, expectedResourcesTotal: number, greaterThan?: boolean): Chainable;
waitForRepositoryDownload(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, retries?: number): Chainable;
waitForResourceState(prefix: 'v3' | 'v1', resourceType: string, resourceId: string, resourceState?: string, retries?: number): Chainable;
deleteRancherResource(prefix: 'v3' | 'v1' | 'k8s', resourceType: string, resourceId: string, failOnStatusCode?: boolean): Chainable;
getClusterIdByName(clusterName: string): Chainable<string>;
deleteNodeTemplate(nodeTemplateId: string, timeout?: number, failOnStatusCode?: boolean)
Expand Down
11 changes: 11 additions & 0 deletions cypress/support/commands/rancher-api-commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -594,6 +594,17 @@ Cypress.Commands.add('waitForRepositoryDownload', (prefix, resourceType, resourc
}, retries);
});

/**
* Wait for repository to be state
*/
Cypress.Commands.add('waitForResourceState', (prefix, resourceType, resourceId, resourceState = 'active', retries = 20) => {
return cy.waitForRancherResource(prefix, resourceType, resourceId, (resp) => {
const state = resp.body.metadata?.state;

return state && state.transitioning === false && state.name === resourceState;
}, retries);
});

/**
* delete a node template
*/
Expand Down