82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { AuthenticatedPage } = require('../authenticated-page');
 | |
| const { DeleteRoleModal } = require('./delete-role-modal');
 | |
| 
 | |
| export class AdminRolesPage extends AuthenticatedPage {
 | |
|   screenshotPath = '/admin-roles';
 | |
| 
 | |
|   /**
 | |
|    * @param {import('@playwright/test').Page} page
 | |
|    */
 | |
|   constructor(page) {
 | |
|     super(page);
 | |
|     this.roleDrawerLink = page.getByTestId('roles-drawer-link');
 | |
|     this.createRoleButton = page.getByTestId('create-role');
 | |
|     this.deleteRoleModal = new DeleteRoleModal(page);
 | |
|     this.roleRow = page.getByTestId('role-row');
 | |
|     this.rolesLoader = page.getByTestId('roles-list-loader');
 | |
|     this.pageTitle = page.getByTestId('roles-page-title');
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    *
 | |
|    * @param {boolean} isMobile - navigation on smaller devices requires the
 | |
|    * user to open up the drawer menu
 | |
|    */
 | |
|   async navigateTo(isMobile = false) {
 | |
|     await this.profileMenuButton.click();
 | |
|     await this.adminMenuItem.click();
 | |
|     if (isMobile) {
 | |
|       await this.drawerMenuButton.click();
 | |
|     }
 | |
|     await this.roleDrawerLink.click();
 | |
|     await this.isMounted();
 | |
|     await this.rolesLoader.waitFor({
 | |
|       state: 'detached',
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @param {string} name
 | |
|    */
 | |
|   async getRoleRowByName(name) {
 | |
|     await this.rolesLoader.waitFor({
 | |
|       state: 'detached',
 | |
|     });
 | |
|     return this.roleRow.filter({
 | |
|       has: this.page.getByTestId('role-name').getByText(name, { exact: true }),
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @param {import('@playwright/test').Locator} row
 | |
|    */
 | |
|   async getRowData(row) {
 | |
|     return {
 | |
|       role: await row.getByTestId('role-name').textContent(),
 | |
|       description: await row.getByTestId('role-description').textContent(),
 | |
|       canEdit: await row.getByTestId('role-edit').isEnabled(),
 | |
|       canDelete: await row.getByTestId('role-delete').isEnabled(),
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @param {import('@playwright/test').Locator} row
 | |
|    */
 | |
|   async clickEditRole(row) {
 | |
|     await row.getByTestId('role-edit').click();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @param {import('@playwright/test').Locator} row
 | |
|    */
 | |
|   async clickDeleteRole(row) {
 | |
|     await row.getByTestId('role-delete').click();
 | |
|     return this.deleteRoleModal;
 | |
|   }
 | |
| 
 | |
|   async editRole(subject) {
 | |
|     const row = await this.getRoleRowByName(subject);
 | |
|     await this.clickEditRole(row);
 | |
|   }
 | |
| }
 | 
