[arvados] updated: 2.7.0-6516-g3e42f3e2f6

git repository hosting git at public.arvados.org
Tue Apr 23 15:56:27 UTC 2024


Summary of changes:
 .../{details-card.spec.js => details-card.cy.js}   | 121 +++++++++------------
 .../ms-toolbar-overflow-menu.tsx                   |   4 +-
 2 files changed, 54 insertions(+), 71 deletions(-)
 copy services/workbench2/cypress/e2e/{details-card.spec.js => details-card.cy.js} (62%)

       via  3e42f3e2f6d75535240e085c3fbba5ef0dd2d30a (commit)
      from  fc63b6e0223a4354cf41a8d094c3a66e02871c04 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 3e42f3e2f6d75535240e085c3fbba5ef0dd2d30a
Author: Lisa Knox <lisaknox83 at gmail.com>
Date:   Tue Apr 23 11:56:03 2024 -0400

    21224: fixed overflow menu test Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox at curii.com>

diff --git a/services/workbench2/cypress/e2e/details-card.cy.js b/services/workbench2/cypress/e2e/details-card.cy.js
new file mode 100644
index 0000000000..778fe6baea
--- /dev/null
+++ b/services/workbench2/cypress/e2e/details-card.cy.js
@@ -0,0 +1,242 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+describe('User Details Card tests', function () {
+    let activeUser;
+    let adminUser;
+
+    before(function () {
+        // Only set up common users once. These aren't set up as aliases because
+        // aliases are cleaned up after every test. Also it doesn't make sense
+        // to set the same users on beforeEach() over and over again, so we
+        // separate a little from Cypress' 'Best Practices' here.
+        cy.getUser('admin', 'Admin', 'User', true, true)
+            .as('adminUser')
+            .then(function () {
+                adminUser = this.adminUser;
+            });
+        cy.getUser('activeUser1', 'Active', 'User', false, true)
+            .as('activeUser')
+            .then(function () {
+                activeUser = this.activeUser;
+            });
+        cy.on('uncaught:exception', (err, runnable) => {
+            console.error(err);
+        });
+    });
+
+    beforeEach(function () {
+        cy.clearCookies();
+        cy.clearLocalStorage();
+    });
+
+    it('should display the user details card', () => {
+        cy.loginAs(adminUser);
+
+        cy.get('[data-cy=user-details-card]').should('be.visible');
+        cy.get('[data-cy=user-details-card]').contains(adminUser.user.full_name).should('be.visible');
+    });
+
+    it('shows the appropriate buttons in the multiselect toolbar', () => {
+
+        const msButtonTooltips = [
+            'API Details',
+            'Attributes',
+            'User account',
+        ];
+
+        cy.loginAs(activeUser);
+
+        cy.get('[data-cy=multiselect-button]').should('have.length', msButtonTooltips.length)
+
+        for (let i = 0; i < msButtonTooltips.length; i++) {
+            cy.get('[data-cy=multiselect-button]').eq(i).trigger('mouseover');
+            cy.get('body').contains(msButtonTooltips[i]).should('exist')
+            cy.get('[data-cy=multiselect-button]').eq(i).trigger('mouseout');
+        }
+    })
+});
+
+describe('Project Details Card tests', function () {
+    let activeUser;
+    let adminUser;
+
+    before(function () {
+        // Only set up common users once. These aren't set up as aliases because
+        // aliases are cleaned up after every test. Also it doesn't make sense
+        // to set the same users on beforeEach() over and over again, so we
+        // separate a little from Cypress' 'Best Practices' here.
+        cy.getUser('admin', 'Admin', 'User', true, true)
+            .as('adminUser')
+            .then(function () {
+                adminUser = this.adminUser;
+            });
+        cy.getUser('activeUser1', 'Active', 'User', false, true)
+            .as('activeUser')
+            .then(function () {
+                activeUser = this.activeUser;
+            });
+        cy.on('uncaught:exception', (err, runnable) => {
+            console.error(err);
+        });
+    });
+
+    beforeEach(function () {
+        cy.clearCookies();
+        cy.clearLocalStorage();
+    });
+
+    it('should display the project details card', () => {
+        const projName = `Test project (${Math.floor(999999 * Math.random())})`;
+        cy.loginAs(adminUser);
+
+        // Create project
+        cy.get('[data-cy=side-panel-button]').click();
+        cy.get('[data-cy=side-panel-new-project]').click();
+        cy.get('[data-cy=form-dialog]')
+            .should('contain', 'New Project')
+            .within(() => {
+                cy.get('[data-cy=name-field]').within(() => {
+                    cy.get('input').type(projName);
+                });
+            });
+        cy.get('[data-cy=form-submit-btn]').click();
+        cy.get('[data-cy=form-dialog]').should('not.exist');
+
+        cy.get('[data-cy=project-details-card]').should('be.visible');
+        cy.get('[data-cy=project-details-card]').contains(projName).should('be.visible');
+    });
+
+    it('shows the appropriate buttons in the multiselect toolbar', () => {
+
+        const msButtonTooltips = [
+            'View details',
+            'Open in new tab',
+            'Copy link to clipboard',
+        ];
+
+        const msOverflowMenuButtonTooltips = [
+            'Open with 3rd party client',
+            'API Details',
+            'Share',
+            'New project',
+            'Edit project',
+            'Move to',
+            'Move to trash',
+            'Freeze project',
+            'Add to favorites',
+        ];
+
+        const projName = `Test project (${Math.floor(999999 * Math.random())})`;
+        cy.loginAs(activeUser);
+
+        // Create project
+        cy.get('[data-cy=side-panel-button]').click();
+        cy.get('[data-cy=side-panel-new-project]').click();
+        cy.get('[data-cy=form-dialog]')
+            .should('contain', 'New Project')
+            .within(() => {
+                cy.get('[data-cy=name-field]').within(() => {
+                    cy.get('input').type(projName);
+                });
+            });
+        cy.get('[data-cy=form-submit-btn]').click();
+        cy.get('[data-cy=form-dialog]').should('not.exist');
+
+        for (let i = 0; i < msButtonTooltips.length; i++) {
+            cy.get('[data-cy=multiselect-button]').eq(i).trigger('mouseover');
+            cy.get('body').contains(msButtonTooltips[i]).should('exist')
+            cy.get('[data-cy=multiselect-button]').eq(i).trigger('mouseout');
+        }
+
+        cy.get('[data-cy=overflow-menu-button]').click();
+        cy.get('[data-cy=overflow-menu]').should('be.visible').within(() => {
+            cy.get('[data-cy=multiselect-button]').should('exist');
+
+            
+            for (let i = 0; i < msOverflowMenuButtonTooltips.length; i++) {
+                cy.get('li').eq(i).within(() => {
+                    cy.get(`span`).should('have.prop', 'title', msOverflowMenuButtonTooltips[i]);
+                });
+            }
+        })
+    });
+
+    it('should toggle description display', () => {
+        const projName = `Test project (${Math.floor(999999 * Math.random())})`;
+        const projDescription = 'Lorem ipsum dolor sit amet, consectetur adipiscing vultures, whose wings are dull realities.';
+        cy.loginAs(adminUser);
+
+        // Create project
+        cy.get('[data-cy=side-panel-button]').click();
+        cy.get('[data-cy=side-panel-new-project]').click();
+        cy.get('[data-cy=form-dialog]')
+            .should('contain', 'New Project')
+            .within(() => {
+                cy.get('[data-cy=name-field]').within(() => {
+                    cy.get('input').type(projName);
+                });
+            });
+        cy.get('[data-cy=form-submit-btn]').click();
+
+        //check for no description
+        cy.get('[data-cy=no-description').should('be.visible');
+
+        //add description
+        cy.get('[data-cy=side-panel-tree]').contains('Home Projects').click();
+        cy.get('[data-cy=project-panel] tbody tr').contains(projName).rightclick({ force: true });
+        cy.get('[data-cy=context-menu]').contains('Edit').click();
+        cy.get('[data-cy=form-dialog]').within(() => {
+            cy.get('div[contenteditable=true]').click().type(projDescription);
+            cy.get('[data-cy=form-submit-btn]').click();
+        });
+        cy.get('[data-cy=project-panel] tbody tr').contains(projName).click({ force: true });
+        cy.get('[data-cy=project-details-card]').contains(projName).should('be.visible');
+
+        //toggle description
+        cy.get('[data-cy=toggle-description').click();
+        cy.waitForDom();
+        cy.get('[data-cy=project-description]').should('be.visible');
+        cy.get('[data-cy=project-details-card]').contains(projDescription).should('be.visible');
+        cy.get('[data-cy=toggle-description').click();
+        cy.waitForDom();
+        cy.get('[data-cy=project-description]').should('be.hidden');
+    });
+
+    it('should display key/value pairs', () => {
+        const projName = `Test project (${Math.floor(999999 * Math.random())})`;
+        cy.loginAs(adminUser);
+
+        // Create project wih key/value pairs
+        cy.get('[data-cy=side-panel-button]').click();
+        cy.get('[data-cy=side-panel-new-project]').click();
+        cy.get('[data-cy=form-dialog]')
+            .should('contain', 'New Project')
+            .within(() => {
+                cy.get('[data-cy=name-field]').within(() => {
+                    cy.get('input').type(projName);
+                });
+            });
+
+        cy.get('[data-cy=key-input]').should('be.visible').click().type('Animal');
+        cy.get('[data-cy=value-input]').should('be.visible').click().type('Dog');
+        cy.get('[data-cy=property-add-btn]').should('be.visible').click();
+
+        cy.get('[data-cy=key-input]').should('be.visible').click().type('Importance');
+        cy.get('[data-cy=value-input]').should('be.visible').click().type('Critical');
+        cy.get('[data-cy=property-add-btn]').should('be.visible').click();
+
+        cy.get('[data-cy=form-submit-btn]').click();
+
+        //check for key/value pairs in project details card
+        cy.get('[data-cy=project-details-card]').contains('Animal').should('be.visible');
+        cy.get('[data-cy=project-details-card]').contains('Importance').should('be.visible').click();
+        cy.waitForDom();
+        cy.window().then((win) =>
+            win.navigator.clipboard.readText().then((text) => {
+                expect(text).to.match(new RegExp(`Importance: Critical`));
+            })
+        );
+    });
+});
diff --git a/services/workbench2/src/components/multiselect-toolbar/ms-toolbar-overflow-menu.tsx b/services/workbench2/src/components/multiselect-toolbar/ms-toolbar-overflow-menu.tsx
index 28b8227159..efa776713d 100644
--- a/services/workbench2/src/components/multiselect-toolbar/ms-toolbar-overflow-menu.tsx
+++ b/services/workbench2/src/components/multiselect-toolbar/ms-toolbar-overflow-menu.tsx
@@ -62,13 +62,14 @@ export const OverflowMenu = withStyles(styles)((props: OverflowMenuProps & WithS
     }
     return (
         <div className={className}>
-            <Tooltip title="More Options" disableFocusListener>
+            <Tooltip title="More options" disableFocusListener>
                 <IconButton
                     aria-label='more'
                     aria-controls='long-menu'
                     aria-haspopup='true'
                     onClick={handleClick}
                     className={classes.openMenuButton}
+                    data-cy='overflow-menu-button'
                 >
                         <DoubleRightArrows />
                 </IconButton>
@@ -81,6 +82,7 @@ export const OverflowMenu = withStyles(styles)((props: OverflowMenuProps & WithS
                 onClose={handleClose}
                 disableAutoFocusItem
                 className={classes.menu}
+                data-cy='overflow-menu'
             >
                 {React.Children.map(children, (child: any) => {
                     if (!visibilityMap[child.props['data-targetid']]) {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list