forked from rancher/dashboard
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ui automation: users and roles tests (rancher#9355)
* Add users and roles tests * Refactor: split user-and-auth.po into user.po and roles.po and added roles tests * Refactor users to reflect underlying list, create/edit and detail components - Make Users PO root page for users list. - contains list po which extends BaseResourceList - contains user specific list stuff - Move create edit stuff to own PO - Move detail stuff to own PO, extend ResourceDetailPo * Update roles as per previous changes to users - different to users given different resource types * split users and roles tests * Remove unrequried command.ts, make http 200 check more lenient --------- Co-authored-by: Yonas Berhe <[email protected]> Co-authored-by: Richard Cox <[email protected]>
- Loading branch information
1 parent
ec4762e
commit 5be8469
Showing
30 changed files
with
852 additions
and
182 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
cypress/e2e/po/detail/management.cattle.io.globalrole.po.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import RoleDetailPo from '@/cypress/e2e/po/detail/role.po'; | ||
import GlobalRoleEditPo from '@/cypress/e2e/po/edit/management.cattle.io.globalrole.po'; | ||
import ResourceDetailPo from '@/cypress/e2e/po/edit/resource-detail.po'; | ||
|
||
class GlobalRoleDetailComponentPo extends ResourceDetailPo { | ||
userCreateEditView(clusterId: string, userId?: string ) { | ||
return new GlobalRoleEditPo(clusterId, userId); | ||
} | ||
} | ||
|
||
export default class GlobalRoleDetailPo extends RoleDetailPo { | ||
constructor(clusterId = '_', roleId: string) { | ||
super(clusterId, 'management.cattle.io.globalrole', roleId); | ||
} | ||
|
||
detail() { | ||
return new GlobalRoleDetailComponentPo(this.self()); | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
cypress/e2e/po/detail/management.cattle.io.roletemplate.po.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import RoleDetailPo from '@/cypress/e2e/po/detail/role.po'; | ||
import RoleTemplateEditPo from '@/cypress/e2e/po/edit/management.cattle.io.roletemplate.po'; | ||
import ResourceDetailPo from '@/cypress/e2e/po/edit/resource-detail.po'; | ||
|
||
class RoleTemplateDetailComponentPo extends ResourceDetailPo { | ||
userCreateEditView(clusterId: string, userId?: string ) { | ||
return new RoleTemplateEditPo(clusterId, userId); | ||
} | ||
} | ||
|
||
export default class RoleTemplateDetailPo extends RoleDetailPo { | ||
constructor(clusterId = '_', roleId: string) { | ||
super(clusterId, 'management.cattle.io.roletemplate', roleId); | ||
} | ||
|
||
detail() { | ||
return new RoleTemplateDetailComponentPo(this.self()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import MgmtUserEditPo from '@/cypress/e2e/po/edit/management.cattle.io.user.po'; | ||
import ResourceDetailPo from '@/cypress/e2e/po/edit/resource-detail.po'; | ||
import PagePo from '@/cypress/e2e/po/pages/page.po'; | ||
|
||
class MgmtUserResourceDetailComponentPo extends ResourceDetailPo { | ||
userCreateEditView(clusterId: string, userId?: string ) { | ||
return new MgmtUserEditPo(clusterId, userId); | ||
} | ||
} | ||
|
||
export default class MgmtUserResourceDetailPo extends PagePo { | ||
private static createPath(clusterId: string, userId: string ) { | ||
return `/c/${ clusterId }/auth/management.cattle.io.user/${ userId }`; | ||
} | ||
|
||
static goTo(path: string): Cypress.Chainable<Cypress.AUTWindow> { | ||
throw new Error('invalid'); | ||
} | ||
|
||
constructor(clusterId: string, userId: string) { | ||
super(MgmtUserResourceDetailPo.createPath(clusterId, userId)); | ||
} | ||
|
||
detail() { | ||
return new MgmtUserResourceDetailComponentPo(this.self()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import PagePo from '@/cypress/e2e/po/pages/page.po'; | ||
|
||
export default abstract class RoleDetailPo extends PagePo { | ||
private static createPath(clusterId: string, resource: string, roleId: string) { | ||
return `/c/${ clusterId }/auth/roles/${ resource }/${ roleId }`; | ||
} | ||
|
||
static goTo(path: string): Cypress.Chainable<Cypress.AUTWindow> { | ||
throw new Error('invalid'); | ||
} | ||
|
||
constructor(clusterId = '_', resource: string, roleId: string) { | ||
super(RoleDetailPo.createPath(clusterId, resource, roleId)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import RoleEditPo from '@/cypress/e2e/po/edit/role.po'; | ||
|
||
export default class GlobalRoleEditPo extends RoleEditPo { | ||
constructor(clusterId = '_', roleId?: string) { | ||
super(clusterId, 'management.cattle.io.globalrole', roleId); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import RoleEditPo from '@/cypress/e2e/po/edit/role.po'; | ||
|
||
export default class RoleTemplateEditPo extends RoleEditPo { | ||
constructor(clusterId = '_', roleId?: string) { | ||
super(clusterId, 'management.cattle.io.roletemplate', roleId); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
import PagePo from '@/cypress/e2e/po/pages/page.po'; | ||
import LabeledInputPo from '@/cypress/e2e/po/components/labeled-input.po'; | ||
import AsyncButtonPo from '@/cypress/e2e/po/components/async-button.po'; | ||
import CheckboxInputPo from '@/cypress/e2e/po/components/checkbox-input.po'; | ||
import { CypressChainable } from '@/cypress/e2e/po/po.types'; | ||
|
||
export default class MgmtUserEditPo extends PagePo { | ||
private static createPath(clusterId: string, userId?: string ) { | ||
const root = `/c/${ clusterId }/auth/management.cattle.io.user`; | ||
|
||
return userId ? `${ root }/${ userId }?mode=edit` : `${ root }/create`; | ||
} | ||
|
||
static goTo(path: string): Cypress.Chainable<Cypress.AUTWindow> { | ||
throw new Error('invalid'); | ||
} | ||
|
||
constructor(clusterId = '_', userId?: string) { | ||
super(MgmtUserEditPo.createPath(clusterId, userId)); | ||
} | ||
|
||
name(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Name'); | ||
} | ||
|
||
username(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Username'); | ||
} | ||
|
||
description(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Description'); | ||
} | ||
|
||
newPass(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'New Password'); | ||
} | ||
|
||
confirmNewPass(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Confirm Password'); | ||
} | ||
|
||
selectCheckbox(label:string): CheckboxInputPo { | ||
return CheckboxInputPo.byLabel(this.self(), label); | ||
} | ||
|
||
saveCreateForm(): AsyncButtonPo { | ||
return new AsyncButtonPo('[data-testid="form-save"]', this.self()); | ||
} | ||
|
||
saveAndWaitForRequests(method: string, url: any, multipleCalls?: boolean): CypressChainable { | ||
cy.intercept(method, url).as('request'); | ||
this.saveCreateForm().click(); | ||
|
||
return (multipleCalls ? cy.wait(['@request', '@request'], { timeout: 10000 }) : cy.wait('@request', { timeout: 10000 })); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import PagePo from '@/cypress/e2e/po/pages/page.po'; | ||
|
||
import LabeledInputPo from '@/cypress/e2e/po/components/labeled-input.po'; | ||
import LabeledSelectPo from '@/cypress/e2e/po/components/labeled-select.po'; | ||
import AsyncButtonPo from '@/cypress/e2e/po/components/async-button.po'; | ||
import CheckboxInputPo from '@/cypress/e2e/po/components/checkbox-input.po'; | ||
import { CypressChainable } from '@/cypress/e2e/po/po.types'; | ||
import RadioGroupInputPo from '@/cypress/e2e/po/components/radio-group-input.po'; | ||
|
||
export default abstract class RoleEditPo extends PagePo { | ||
private static createPath(clusterId: string, resource: string, roleId?: string) { | ||
const root = `/c/${ clusterId }/auth/roles/${ resource }`; | ||
|
||
return roleId ? `${ root }/${ roleId }?mode=edit` : `${ root }/create`; | ||
} | ||
|
||
static goTo(path: string): Cypress.Chainable<Cypress.AUTWindow> { | ||
throw new Error('invalid'); | ||
} | ||
|
||
constructor(clusterId = '_', resource: string, roleId?: string) { | ||
super(RoleEditPo.createPath(clusterId, resource, roleId)); | ||
} | ||
|
||
name(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Name'); | ||
} | ||
|
||
description(): LabeledInputPo { | ||
return LabeledInputPo.byLabel(this.self(), 'Description'); | ||
} | ||
|
||
selectCheckbox(label:string): CheckboxInputPo { | ||
return CheckboxInputPo.byLabel(this.self(), label); | ||
} | ||
|
||
saveCreateForm(): AsyncButtonPo { | ||
return new AsyncButtonPo('[data-testid="form-save"]', this.self()); | ||
} | ||
|
||
saveAndWaitForRequests(method: string, url: any): CypressChainable { | ||
cy.intercept(method, url).as('request'); | ||
this.saveCreateForm().click(); | ||
|
||
return cy.wait('@request', { timeout: 10000 }); | ||
} | ||
|
||
selectVerbs(itemRow: number, optionIndex: number) { | ||
const selectVerb = new LabeledSelectPo(`[data-testid="grant-resources-verbs${ itemRow }"]`, this.self()); | ||
|
||
selectVerb.toggle(); | ||
selectVerb.clickOption(optionIndex); | ||
} | ||
|
||
selectResourcesByLabelValue(itemRow: number, label: string) { | ||
const selectResources = new LabeledSelectPo(`[data-testid="grant-resources-resources${ itemRow }"]`, this.self()); | ||
|
||
selectResources.toggle(); | ||
selectResources.clickOptionWithLabel(label); | ||
} | ||
|
||
selectCreatorDefaultRadioBtn(optionIndex: number): CypressChainable { | ||
const selectRadio = new RadioGroupInputPo('[data-testid="roletemplate-creator-default-options"] div > .radio-container', this.self()); | ||
|
||
return selectRadio.set(optionIndex); | ||
} | ||
|
||
selectLockedRadioBtn(optionIndex: number): CypressChainable { | ||
const selectRadio = new RadioGroupInputPo('[data-testid="roletemplate-locked-options"] div > .radio-container', this.self()); | ||
|
||
return selectRadio.set(optionIndex); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import BaseResourceList from '@/cypress/e2e/po/lists/base-resource-list.po'; | ||
import AsyncButtonPo from '@/cypress/e2e/po/components/async-button.po'; | ||
|
||
/** | ||
* List component for api key resources | ||
*/ | ||
export default class MgmtUsersListPo extends BaseResourceList { | ||
create() { | ||
return this.masthead().actions().eq(0).click(); | ||
} | ||
|
||
refreshGroupMembership(): AsyncButtonPo { | ||
return new AsyncButtonPo('[data-testid="action-button-async-button"]', this.self()); | ||
} | ||
|
||
deactivate() { | ||
return cy.getId('sortable-table-deactivate'); | ||
} | ||
|
||
activate() { | ||
return cy.getId('sortable-table-activate'); | ||
} | ||
|
||
openBulkActionDropdown() { | ||
return this.resourceTable().sortableTable().bulkActionDropDownOpen(); | ||
} | ||
|
||
bulkActionButton(name: string) { | ||
return this.resourceTable().sortableTable().bulkActionDropDownButton(name); | ||
} | ||
|
||
selectAll() { | ||
return this.resourceTable().sortableTable().selectAllCheckbox(); | ||
} | ||
|
||
elements() { | ||
return this.resourceTable().sortableTable().rowElements(); | ||
} | ||
|
||
elementWithName(name: string) { | ||
return this.resourceTable().sortableTable().rowElementWithName(name); | ||
} | ||
|
||
details(name: string, index: number) { | ||
return this.resourceTable().sortableTable().rowWithName(name).column(index); | ||
} | ||
|
||
clickRowActionMenuItem(name: string, itemLabel:string) { | ||
return this.resourceTable().sortableTable().rowActionMenuOpen(name, 7).getMenuItem(itemLabel) | ||
.click(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import BaseResourceList from '@/cypress/e2e/po/lists/base-resource-list.po'; | ||
|
||
export default class RoleListPo extends BaseResourceList { | ||
downloadYaml() { | ||
return this.resourceTable().downloadYamlButton().first(); | ||
} | ||
|
||
delete() { | ||
return this.resourceTable().sortableTable().deleteButton().first(); | ||
} | ||
|
||
elements() { | ||
return this.resourceTable().sortableTable().rowElements(); | ||
} | ||
|
||
elementWithName(name: string) { | ||
return this.resourceTable().sortableTable().rowElementWithName(name); | ||
} | ||
|
||
details(name: string, index: number) { | ||
return this.resourceTable().sortableTable().rowWithName(name).column(index); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.