[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