]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard: migrate E2E rgw-users to async/await
authorPatrick Seidensal <pseidensal@suse.com>
Mon, 19 Aug 2019 08:21:50 +0000 (10:21 +0200)
committerPatrick Seidensal <pseidensal@suse.com>
Wed, 28 Aug 2019 07:38:48 +0000 (09:38 +0200)
Fixes: https://tracker.ceph.com/issues/40693
Signed-off-by: Patrick Seidensal <pseidensal@suse.com>
src/pybind/mgr/dashboard/frontend/e2e/rgw/users.e2e-spec.ts
src/pybind/mgr/dashboard/frontend/e2e/rgw/users.po.ts

index 1791e4974f8e7474c69c3ae56489ef63cb25a81c..33870b3cb8a3656b4f888b590103d5bef0b96ac6 100644 (file)
@@ -8,52 +8,52 @@ describe('RGW users page', () => {
     users = new Helper().users;
   });
 
-  afterEach(() => {
-    Helper.checkConsole();
+  afterEach(async () => {
+    await Helper.checkConsole();
   });
 
   describe('breadcrumb test', () => {
-    beforeAll(() => {
-      users.navigateTo();
+    beforeAll(async () => {
+      await users.navigateTo();
     });
 
-    it('should open and show breadcrumb', () => {
-      expect(users.getBreadcrumbText()).toEqual('Users');
+    it('should open and show breadcrumb', async () => {
+      expect(await users.getBreadcrumbText()).toEqual('Users');
     });
   });
 
   describe('create, edit & delete user test', () => {
-    beforeAll(() => {
-      users.navigateTo();
+    beforeAll(async () => {
+      await users.navigateTo();
     });
 
-    it('should create user', () => {
-      users.create(user_name, 'Some Name', 'original@website.com', '1200');
-      expect(users.getTableCell(user_name).isPresent()).toBe(true);
+    it('should create user', async () => {
+      await users.create(user_name, 'Some Name', 'original@website.com', '1200');
+      expect(await users.getTableCell(user_name).isPresent()).toBe(true);
     });
 
-    it('should edit users full name, email and max buckets', () => {
-      users.edit(user_name, 'Another Identity', 'changed@othersite.com', '1969');
+    it('should edit users full name, email and max buckets', async () => {
+      await users.edit(user_name, 'Another Identity', 'changed@othersite.com', '1969');
       // checks for succsessful editing are done within edit function
     });
 
-    it('should delete user', () => {
-      users.delete(user_name);
-      expect(users.getTableCell(user_name).isPresent()).toBe(false);
+    it('should delete user', async () => {
+      await users.delete(user_name);
+      expect(await users.getTableCell(user_name).isPresent()).toBe(false);
     });
   });
 
   describe('Invalid input test', () => {
-    beforeAll(() => {
-      users.navigateTo();
+    beforeAll(async () => {
+      await users.navigateTo();
     });
 
-    it('should put invalid input into user creation form and check fields are marked invalid', () => {
-      users.invalidCreate();
+    it('should put invalid input into user creation form and check fields are marked invalid', async () => {
+      await users.invalidCreate();
     });
 
-    it('should put invalid input into user edit form and check fields are marked invalid', () => {
-      users.invalidEdit();
+    it('should put invalid input into user edit form and check fields are marked invalid', async () => {
+      await users.invalidEdit();
     });
   });
 });
index a8a8189ba307312b157ea9c7bf2398605df85e59..d146ca6e9f6bba5ab9326c33843182a9ecffdeb9 100644 (file)
@@ -9,226 +9,206 @@ export class UsersPageHelper extends PageHelper {
     create: '/#/rgw/user/create'
   };
 
-  create(username, fullname, email, maxbuckets) {
-    this.navigateTo('create');
+  async create(username, fullname, email, maxbuckets) {
+    await this.navigateTo('create');
 
-    expect(this.getBreadcrumbText()).toBe('Create');
+    expect(await this.getBreadcrumbText()).toBe('Create');
 
     // Enter in  username
-    element(by.id('uid')).sendKeys(username);
+    await element(by.id('uid')).sendKeys(username);
 
     // Enter in full name
-    this.moveClick(element(by.id('display_name')));
-    element(by.id('display_name')).sendKeys(fullname);
+    await element(by.id('display_name')).click();
+    await element(by.id('display_name')).sendKeys(fullname);
 
     // Enter in email
-    this.moveClick(element(by.id('email')));
-    element(by.id('email')).sendKeys(email);
+    await element(by.id('email')).click();
+    await element(by.id('email')).sendKeys(email);
 
-    // Eneter max buckets
-    this.moveClick(element(by.id('max_buckets')));
-    element(by.id('max_buckets')).clear();
-    element(by.id('max_buckets')).sendKeys(maxbuckets);
+    // Enter max buckets
+    await element(by.id('max_buckets')).click();
+    await element(by.id('max_buckets')).clear();
+    await element(by.id('max_buckets')).sendKeys(maxbuckets);
 
     // 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)), 10000);
-    });
+    await element(by.cssContainingText('button', 'Create User')).click();
+    await browser.wait(Helper.EC.presenceOf(this.getTableCell(username)), 10000);
   }
 
-  edit(name, new_fullname, new_email, new_maxbuckets) {
-    this.navigateTo();
+  async edit(name, new_fullname, new_email, new_maxbuckets) {
+    await this.navigateTo();
 
-    browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(name)), 10000); // wait for table to load
-    this.getTableCell(name).click(); // click on the bucket you want to edit in the table
-    element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
+    await browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(name)), 10000); // wait for table to load
+    await this.getTableCell(name).click(); // click on the bucket you want to edit in the table
+    await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
 
-    expect(this.getBreadcrumbText()).toEqual('Edit');
+    expect(await this.getBreadcrumbText()).toEqual('Edit');
 
     // Change the full name field
-    this.moveClick(element(by.id('display_name')));
-    element(by.id('display_name')).clear();
-    element(by.id('display_name')).sendKeys(new_fullname);
+    await element(by.id('display_name')).click();
+    await element(by.id('display_name')).clear();
+    await element(by.id('display_name')).sendKeys(new_fullname);
 
     // Change the email field
-    this.moveClick(element(by.id('email')));
-    element(by.id('email')).clear();
-    element(by.id('email')).sendKeys(new_email);
+    await element(by.id('email')).click();
+    await element(by.id('email')).clear();
+    await element(by.id('email')).sendKeys(new_email);
 
     // Change the max buckets field
-    this.moveClick(element(by.id('max_buckets')));
-    element(by.id('max_buckets')).clear();
-    element(by.id('max_buckets')).sendKeys(new_maxbuckets);
+    await element(by.id('max_buckets')).click();
+    await element(by.id('max_buckets')).clear();
+    await element(by.id('max_buckets')).sendKeys(new_maxbuckets);
 
     const editbutton = element(by.cssContainingText('button', 'Edit User'));
-    this.moveClick(editbutton).then(() => {
-      browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(name)), 10000).then(() => {
-        // Click the user and check its details table for updated content
-        this.getTableCell(name).click();
-        expect($('.active.tab-pane').getText()).toMatch(new_fullname); // check full name was changed
-        expect($('.active.tab-pane').getText()).toMatch(new_email); // check email was changed
-        expect($('.active.tab-pane').getText()).toMatch(new_maxbuckets); // check max buckets was changed
-      });
-    });
+    await editbutton.click();
+    await browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(name)), 10000);
+    // Click the user and check its details table for updated content
+    await this.getTableCell(name).click();
+    expect(await $('.active.tab-pane').getText()).toMatch(new_fullname); // check full name was changed
+    expect(await $('.active.tab-pane').getText()).toMatch(new_email); // check email was changed
+    expect(await $('.active.tab-pane').getText()).toMatch(new_maxbuckets); // check max buckets was changed
   }
 
-  delete(name) {
-    this.navigateTo();
+  async delete(name) {
+    await this.navigateTo();
 
     // wait for table to load
     const my_user = this.getFirstTableCellWithText(name);
-    browser.wait(Helper.EC.elementToBeClickable(my_user), 10000);
+    await browser.wait(Helper.EC.elementToBeClickable(my_user), 10000);
 
-    my_user.click(); // click on the user you want to delete in the table
-    $('.table-actions button.dropdown-toggle').click(); // click toggle menu
-    $('li.delete a').click(); // click delete
+    await my_user.click(); // click on the user you want to delete in the table
+    await $('.table-actions button.dropdown-toggle').click(); // click toggle menu
+    await $('li.delete a').click(); // click delete
 
     // wait for pop-up to be visible (checks for title of pop-up)
-    browser.wait(Helper.EC.visibilityOf($('.modal-title.float-left')), 10000).then(() => {
-      browser.wait(Helper.EC.visibilityOf($('.custom-control-label')), 5000);
-      $('.custom-control-label').click(); // click confirmation checkbox
-      element(by.cssContainingText('button', 'Delete user'))
-        .click()
-        .then(() => {
-          browser.wait(
-            Helper.EC.not(Helper.EC.presenceOf(this.getFirstTableCellWithText(name))),
-            10000
-          );
-        });
-    });
+    await browser.wait(Helper.EC.visibilityOf($('.modal-title.float-left')), 10000);
+    await browser.wait(Helper.EC.visibilityOf($('.custom-control-label')), 5000);
+    await $('.custom-control-label').click(); // click confirmation checkbox
+    await element(by.cssContainingText('button', 'Delete user')).click();
+    await browser.wait(
+      Helper.EC.not(Helper.EC.presenceOf(this.getFirstTableCellWithText(name))),
+      10000
+    );
   }
 
-  invalidCreate() {
+  async invalidCreate() {
     const uname = '000invalid_create_user';
     // creating this user in order to check that you can't give two users the same name
-    this.create(uname, 'xxx', 'xxx@xxx', '1');
+    await this.create(uname, 'xxx', 'xxx@xxx', '1');
 
-    this.navigateTo('create');
+    await this.navigateTo('create');
 
     const username_field = element(by.id('uid'));
 
     // No username had been entered. Field should be invalid
-    expect(username_field.getAttribute('class')).toContain('ng-invalid');
+    expect(await username_field.getAttribute('class')).toContain('ng-invalid');
 
     // Try to give user already taken name. Should make field invalid.
-    username_field.clear().then(() => {
-      username_field.sendKeys(uname).then(() => {
-        browser
-          .wait(function() {
-            return username_field.getAttribute('class').then(function(classValue) {
-              return classValue.indexOf('ng-pending') === -1;
-            });
-          }, 6000)
-          .then(() => {
-            expect(username_field.getAttribute('class')).toContain('ng-invalid');
-            this.moveClick(element(by.id('display_name'))); // trigger validation check
-            expect(element(by.css('#uid + .invalid-feedback')).getText()).toMatch(
-              'The chosen user ID is already in use.'
-            );
-          });
-      });
-    });
+    await username_field.clear();
+    await username_field.sendKeys(uname);
+    await browser.wait(
+      async () => !(await username_field.getAttribute('class')).includes('ng-pending'),
+      6000
+    );
+    expect(await username_field.getAttribute('class')).toContain('ng-invalid');
+    await element(by.id('display_name')).click(); // trigger validation check
+    expect(await element(by.css('#uid + .invalid-feedback')).getText()).toMatch(
+      'The chosen user ID is already in use.'
+    );
 
     // check that username field is marked invalid if username has been cleared off
     for (let i = 0; i < uname.length; i++) {
-      username_field.sendKeys(protractor.Key.BACK_SPACE);
+      await username_field.sendKeys(protractor.Key.BACK_SPACE);
     }
-    expect(username_field.getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(element(by.id('display_name'))); // trigger validation check
-    expect(element(by.css('#uid + .invalid-feedback')).getText()).toMatch(
+    expect(await username_field.getAttribute('class')).toContain('ng-invalid');
+    await element(by.id('display_name')).click(); // trigger validation check
+    expect(await element(by.css('#uid + .invalid-feedback')).getText()).toMatch(
       'This field is required.'
     );
 
     // No display name has been given so field should be invalid
-    expect(element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
+    expect(await element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
 
     // display name field should also be marked invalid if given input then emptied
-    this.moveClick(element(by.id('display_name')));
-    element(by.id('display_name')).sendKeys('a');
-    element(by.id('display_name')).sendKeys(protractor.Key.BACK_SPACE);
-    expect(element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(username_field); // trigger validation check
-    expect(element(by.css('#display_name + .invalid-feedback')).getText()).toMatch(
+    await element(by.id('display_name')).click();
+    await element(by.id('display_name')).sendKeys('a');
+    await element(by.id('display_name')).sendKeys(protractor.Key.BACK_SPACE);
+    expect(await element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
+    await username_field.click(); // trigger validation check
+    expect(await element(by.css('#display_name + .invalid-feedback')).getText()).toMatch(
       'This field is required.'
     );
 
     // put invalid email to make field invalid
-    this.moveClick(element(by.id('email')));
-    element(by.id('email')).sendKeys('a');
-    expect(element(by.id('email')).getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(username_field); // trigger validation check
-    expect(element(by.css('#email + .invalid-feedback')).getText()).toMatch(
+    await element(by.id('email')).click();
+    await element(by.id('email')).sendKeys('a');
+    expect(await element(by.id('email')).getAttribute('class')).toContain('ng-invalid');
+    await username_field.click(); // trigger validation check
+    expect(await element(by.css('#email + .invalid-feedback')).getText()).toMatch(
       'This is not a valid email address.'
     );
 
     // put negative max buckets to make field invalid
-    this.moveClick(element(by.id('max_buckets')));
-    element(by.id('max_buckets')).clear();
-    element(by.id('max_buckets')).sendKeys('-5');
-    expect(element(by.id('max_buckets')).getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(username_field); // trigger validation check
-    expect(element(by.css('#max_buckets + .invalid-feedback')).getText()).toMatch(
+    await element(by.id('max_buckets')).click();
+    await element(by.id('max_buckets')).clear();
+    await element(by.id('max_buckets')).sendKeys('-5');
+    expect(await element(by.id('max_buckets')).getAttribute('class')).toContain('ng-invalid');
+    await username_field.click(); // trigger validation check
+    expect(await element(by.css('#max_buckets + .invalid-feedback')).getText()).toMatch(
       'The entered value must be >= 0.'
     );
 
-    this.delete(uname);
+    await this.delete(uname);
   }
 
-  invalidEdit() {
+  async invalidEdit() {
     const uname = '000invalid_edit_user';
     // creating this user to edit for the test
-    this.create(uname, 'xxx', 'xxx@xxx', '1');
+    await this.create(uname, 'xxx', 'xxx@xxx', '1');
 
-    this.navigateTo();
+    await this.navigateTo();
 
-    browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(uname)), 10000); // wait for table to load
-    this.getTableCell(uname).click(); // click on the bucket you want to edit in the table
-    element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
+    await browser.wait(Helper.EC.elementToBeClickable(this.getTableCell(uname)), 10000); // wait for table to load
+    await this.getTableCell(uname).click(); // click on the bucket you want to edit in the table
+    await element(by.cssContainingText('button', 'Edit')).click(); // click button to move to edit page
 
-    expect(this.getBreadcrumbText()).toEqual('Edit');
+    expect(await this.getBreadcrumbText()).toEqual('Edit');
 
     // put invalid email to make field invalid
-    this.moveClick(element(by.id('email')));
-    element(by.id('email')).clear();
-    element(by.id('email')).sendKeys('a');
-    browser
-      .wait(function() {
-        return element(by.id('email'))
-          .getAttribute('class')
-          .then(function(classValue) {
-            return classValue.indexOf('ng-pending') === -1;
-          });
-      }, 6000)
-      .then(() => {
-        expect(element(by.id('email')).getAttribute('class')).toContain('ng-invalid');
-        this.moveClick(element(by.id('display_name'))); // trigger validation check
-        expect(element(by.css('#email + .invalid-feedback')).getText()).toMatch(
-          'This is not a valid email address.'
-        );
-      });
+    await element(by.id('email')).click();
+    await element(by.id('email')).clear();
+    await element(by.id('email')).sendKeys('a');
+    await browser.wait(
+      async () => !(await element(by.id('email')).getAttribute('class')).includes('ng-pending'),
+      6000
+    );
+    expect(await element(by.id('email')).getAttribute('class')).toContain('ng-invalid');
+    await element(by.id('display_name')).click(); // trigger validation check
+    expect(await element(by.css('#email + .invalid-feedback')).getText()).toMatch(
+      'This is not a valid email address.'
+    );
 
     // empty the display name field making it invalid
-    this.moveClick(element(by.id('display_name')));
+    await element(by.id('display_name')).click();
     for (let i = 0; i < 3; i++) {
-      element(by.id('display_name')).sendKeys(protractor.Key.BACK_SPACE);
+      await element(by.id('display_name')).sendKeys(protractor.Key.BACK_SPACE);
     }
-    expect(element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(element(by.id('email'))); // trigger validation check
-    expect(element(by.css('#display_name + .invalid-feedback')).getText()).toMatch(
+    expect(await element(by.id('display_name')).getAttribute('class')).toContain('ng-invalid');
+    await element(by.id('email')).click(); // trigger validation check
+    expect(await element(by.css('#display_name + .invalid-feedback')).getText()).toMatch(
       'This field is required.'
     );
 
     // put negative max buckets to make field invalid
-    this.moveClick(element(by.id('max_buckets')));
-    element(by.id('max_buckets')).clear();
-    element(by.id('max_buckets')).sendKeys('-5');
-    expect(element(by.id('max_buckets')).getAttribute('class')).toContain('ng-invalid');
-    this.moveClick(element(by.id('email'))); // trigger validation check
-    expect(element(by.css('#max_buckets + .invalid-feedback')).getText()).toMatch(
+    await element(by.id('max_buckets')).click();
+    await element(by.id('max_buckets')).clear();
+    await element(by.id('max_buckets')).sendKeys('-5');
+    expect(await element(by.id('max_buckets')).getAttribute('class')).toContain('ng-invalid');
+    await element(by.id('email')).click(); // trigger validation check
+    expect(await element(by.css('#max_buckets + .invalid-feedback')).getText()).toMatch(
       'The entered value must be >= 0.'
     );
 
-    this.delete(uname);
+    await this.delete(uname);
   }
 }