]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: User Management E2E tests 29641/head
authorAdam King <kingamk3@gmail.com>
Tue, 13 Aug 2019 15:26:15 +0000 (11:26 -0400)
committerAdam King <kingamk3@gmail.com>
Tue, 20 Aug 2019 12:54:04 +0000 (08:54 -0400)
Test breadcrumbs for user management pages
Test creating, editing and deleting a user
Test creating, editing and deleting a role

Fixes: https://tracker.ceph.com/issues/41231
Fixes: https://tracker.ceph.com/issues/41232
Fixes: https://tracker.ceph.com/issues/41233
Signed-off-by: Adam King <adking@redhat.com>
Signed-off-by: Rafael Quintero <rquinter@redhat.com>
src/pybind/mgr/dashboard/frontend/e2e/helper.po.ts
src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.po.ts [new file with mode: 0644]

index 1adaf7282316d4fa24d32e140c5d5b775e98b95b..e0891edaf4656a7d80d91cae3a8069acc71ec61d 100644 (file)
@@ -17,6 +17,7 @@ import { PoolPageHelper } from './pools/pools.po';
 import { BucketsPageHelper } from './rgw/buckets.po';
 import { DaemonsPageHelper } from './rgw/daemons.po';
 import { UsersPageHelper } from './rgw/users.po';
+import { UserMgmtPageHelper } from './user-mgmt.po';
 
 export class Helper {
   static EC = browser.ExpectedConditions;
@@ -40,6 +41,7 @@ export class Helper {
   iscsi: IscsiPageHelper;
   mirroring: MirroringPageHelper;
   dashboard: DashboardPageHelper;
+  usermgmt: UserMgmtPageHelper;
 
   constructor() {
     this.buckets = new BucketsPageHelper();
@@ -60,6 +62,7 @@ export class Helper {
     this.iscsi = new IscsiPageHelper();
     this.mirroring = new MirroringPageHelper();
     this.dashboard = new DashboardPageHelper();
+    this.usermgmt = new UserMgmtPageHelper();
   }
 
   /**
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.e2e-spec.ts
new file mode 100644 (file)
index 0000000..bd3ecb0
--- /dev/null
@@ -0,0 +1,65 @@
+import { Helper } from './helper.po';
+
+describe('User Management page', () => {
+  let usermgmt: Helper['usermgmt'];
+  const user_name = 'user_mgmt_create_edit_delete_user';
+  const role_name = 'user_mgmt_create_edit_delete_role';
+
+  beforeAll(() => {
+    usermgmt = new Helper().usermgmt;
+  });
+
+  afterEach(() => {
+    Helper.checkConsole();
+  });
+
+  describe('breadcrumb tests', () => {
+    it('should check breadcrumb on users tab of user management page', () => {
+      usermgmt.navigateTo('users');
+      expect(usermgmt.getBreadcrumbText()).toEqual('Users');
+    });
+
+    it('should check breadcrumb on roles tab of user management page', () => {
+      usermgmt.navigateTo('roles');
+      expect(usermgmt.getBreadcrumbText()).toEqual('Roles');
+    });
+
+    it('should check breadcrumb on user creation page', () => {
+      usermgmt.navigateTo('userCreate');
+      expect(usermgmt.getBreadcrumbText()).toEqual('Create');
+    });
+
+    it('should check breadcrumb on role creation page', () => {
+      usermgmt.navigateTo('roleCreate');
+      expect(usermgmt.getBreadcrumbText()).toEqual('Create');
+    });
+  });
+
+  describe('user create, edit & delete test', () => {
+    it('should create a user', () => {
+      usermgmt.userCreate(user_name, 'cool_password', 'Jeff', 'realemail@realwebsite.com');
+    });
+
+    it('should edit a user', () => {
+      usermgmt.userEdit(user_name, 'cool_password_number_2', 'Geoff', 'w@m');
+    });
+
+    it('should delete a user', () => {
+      usermgmt.userDelete(user_name);
+    });
+  });
+
+  describe('role create, edit & delete test', () => {
+    it('should create a role', () => {
+      usermgmt.roleCreate(role_name, 'An interesting description');
+    });
+
+    it('should edit a role', () => {
+      usermgmt.roleEdit(role_name, 'A far more interesting description');
+    });
+
+    it('should delete a role', () => {
+      usermgmt.roleDelete(role_name);
+    });
+  });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.po.ts b/src/pybind/mgr/dashboard/frontend/e2e/user-mgmt.po.ts
new file mode 100644 (file)
index 0000000..ecd6365
--- /dev/null
@@ -0,0 +1,121 @@
+import { $, browser, by, element } from 'protractor';
+import { Helper } from './helper.po';
+import { PageHelper } from './page-helper.po';
+
+export class UserMgmtPageHelper extends PageHelper {
+  pages = {
+    index: '/#/user-management',
+    users: '/#/user-management/users',
+    userCreate: '/#/user-management/users/create',
+    roles: '/#/user-management/roles',
+    roleCreate: '/#/user-management/roles/create'
+  };
+
+  userCreate(username, password, name, email) {
+    this.navigateTo('userCreate');
+
+    // fill in fields
+    element(by.id('username')).sendKeys(username);
+    element(by.id('password')).sendKeys(password);
+    element(by.id('confirmpassword')).sendKeys(password);
+    element(by.id('name')).sendKeys(name);
+    element(by.id('email')).sendKeys(email);
+
+    // Click the create button and wait for user to be made
+    const createButton = element(by.cssContainingText('button', 'Create User'));
+    this.moveClick(createButton).then(() => {
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(username)), Helper.TIMEOUT);
+    });
+  }
+
+  userEdit(username, password, name, email) {
+    this.navigateTo('users');
+
+    this.getTableCell(username).click(); // select user from table
+    element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
+
+    // fill in fields with new values
+    element(by.id('password')).clear();
+    element(by.id('password')).sendKeys(password);
+    element(by.id('confirmpassword')).clear();
+    element(by.id('confirmpassword')).sendKeys(password);
+    element(by.id('name')).clear();
+    element(by.id('name')).sendKeys(name);
+    element(by.id('email')).clear();
+    element(by.id('email')).sendKeys(email);
+
+    // Click the edit button and check new values are present in table
+    const editButton = element(by.cssContainingText('button', 'Edit User'));
+    this.moveClick(editButton).then(() => {
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(email)), Helper.TIMEOUT);
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(name)), Helper.TIMEOUT);
+    });
+  }
+
+  userDelete(username) {
+    this.navigateTo('users');
+
+    this.getTableCell(username).click(); // select user from table
+    $('.table-actions button.dropdown-toggle').click(); // click toggle menu
+    $('li.delete a').click(); // click delete
+
+    browser.wait(Helper.EC.visibilityOf($('.custom-control-label')), Helper.TIMEOUT);
+    $('.custom-control-label').click(); // click confirmation checkbox
+    element(by.cssContainingText('button', 'Delete User')) // click delete user button
+      .click()
+      .then(() => {
+        browser.wait(
+          Helper.EC.stalenessOf(this.getFirstTableCellWithText(username)),
+          Helper.TIMEOUT
+        );
+      });
+  }
+
+  roleCreate(name, description) {
+    this.navigateTo('roleCreate');
+
+    // fill in fields
+    element(by.id('name')).sendKeys(name);
+    element(by.id('description')).sendKeys(description);
+
+    // Click the create button and wait for user to be made
+    const createButton = element(by.cssContainingText('button', 'Create Role'));
+    this.moveClick(createButton).then(() => {
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(name)), Helper.TIMEOUT);
+    });
+  }
+
+  roleEdit(name, description) {
+    this.navigateTo('roles');
+
+    this.getTableCell(name).click(); // select role from table
+    element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
+
+    // fill in fields with new values
+    element(by.id('description')).clear();
+    element(by.id('description')).sendKeys(description);
+
+    // Click the edit button and check new values are present in table
+    const editButton = element(by.cssContainingText('button', 'Edit Role'));
+    this.moveClick(editButton).then(() => {
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(name)), Helper.TIMEOUT);
+      browser.wait(Helper.EC.presenceOf(this.getTableCell(description)), Helper.TIMEOUT);
+    });
+  }
+
+  roleDelete(name) {
+    this.navigateTo('roles');
+
+    this.getTableCell(name).click(); // select role from table
+    $('.table-actions button.dropdown-toggle').click(); // click toggle menu
+    $('li.delete a').click(); // click delete
+
+    browser.wait(Helper.EC.visibilityOf($('.custom-control-label')), Helper.TIMEOUT);
+    $('.custom-control-label').click(); // click confirmation checkbox
+    element(by.cssContainingText('button', 'Delete Role')) // click delete user button
+      .click()
+      .then(() => {
+        browser.wait(Helper.EC.stalenessOf(this.getFirstTableCellWithText(name)), Helper.TIMEOUT);
+      });
+  }
+}