From ca5e388c896e1017d1442201880acd81e8cd5dac Mon Sep 17 00:00:00 2001 From: Alban Costaz Date: Thu, 14 Dec 2023 09:04:08 +0100 Subject: [PATCH] [MS] User details modal --- client/src/locales/en-US.json | 12 ++ client/src/locales/fr-FR.json | 12 ++ client/src/theme/components/modals.scss | 4 + client/src/views/users/ActiveUsersPage.vue | 25 ++- client/src/views/users/RevokedUsersPage.vue | 25 ++- client/src/views/users/UserContextMenu.vue | 4 +- client/src/views/users/UserDetailsModal.vue | 190 ++++++++++++++++++ .../e2e/specs/test_user_details_modal.ts | 35 ++++ 8 files changed, 301 insertions(+), 6 deletions(-) create mode 100644 client/src/views/users/UserDetailsModal.vue create mode 100644 client/tests/e2e/specs/test_user_details_modal.ts diff --git a/client/src/locales/en-US.json b/client/src/locales/en-US.json index 83ba4023724..a32c7e76d65 100644 --- a/client/src/locales/en-US.json +++ b/client/src/locales/en-US.json @@ -780,6 +780,18 @@ "cancel": "Cancel", "create": "Invite" }, + "UserDetailsModal": { + "title": "User details", + "subtitles": { + "name": "Name", + "joined": "Joined", + "commonWorkspaces": "Shared workspaces", + "revoked": "Revoked" + }, + "actions": { + "close": "Close" + } + }, "revocation": { "revokeTitle": "Revoke this user? | Revoke these users?", "revokeQuestion": "This will revoke {user}, preventing them from accessing this organization. Are you sure you want to proceed? | This will revoke these {count} users, preventing them from accessing this organization. Are you sure you want to proceed?", diff --git a/client/src/locales/fr-FR.json b/client/src/locales/fr-FR.json index 5a01249a451..0c76b45f9fd 100644 --- a/client/src/locales/fr-FR.json +++ b/client/src/locales/fr-FR.json @@ -780,6 +780,18 @@ "cancel": "Annuler", "create": "Inviter" }, + "UserDetailsModal": { + "title": "Détails de l'utilisateur", + "subtitles": { + "name": "Nom", + "joined": "Rejoint", + "commonWorkspaces": "Espaces de travail communs", + "revoked": "Révoqué" + }, + "actions": { + "close": "Fermer" + } + }, "revocation": { "revokeTitle": "Révoquer cet utilisateur ? | Révoquer ces utilisateurs ?", "revokeQuestion": "L'utilisateur {user} sera révoqué. Il ne pourra plus accéder à l'organisation. Voulez-vous continuer ? | Ces {count} utilisateurs seront révoqués. Ils ne pourront plus accéder à l'organisation. Voulez-vous continuer ?", diff --git a/client/src/theme/components/modals.scss b/client/src/theme/components/modals.scss index 58eed0baf9b..fd02452b1f3 100644 --- a/client/src/theme/components/modals.scss +++ b/client/src/theme/components/modals.scss @@ -182,6 +182,10 @@ ion-modal.join-by-link-modal::part(content) { } } +.user-details-modal { + --width: 642px; +} + .file-upload-modal { --width: 842px; } diff --git a/client/src/views/users/ActiveUsersPage.vue b/client/src/views/users/ActiveUsersPage.vue index 0f0b13a6a3f..b8319ac73ee 100644 --- a/client/src/views/users/ActiveUsersPage.vue +++ b/client/src/views/users/ActiveUsersPage.vue @@ -145,11 +145,23 @@ + + diff --git a/client/tests/e2e/specs/test_user_details_modal.ts b/client/tests/e2e/specs/test_user_details_modal.ts new file mode 100644 index 00000000000..c14156331c7 --- /dev/null +++ b/client/tests/e2e/specs/test_user_details_modal.ts @@ -0,0 +1,35 @@ +// Parsec Cloud (https://parsec.cloud) Copyright (c) BUSL-1.1 2016-present Scille SAS + +describe('Check user details modal', () => { + beforeEach(() => { + cy.visitApp(); + cy.login('Boby', 'P@ssw0rd.'); + cy.get('.organization-card__manageBtn').click(); + cy.get('.users-container').find('.user-list-item').eq(2).find('.options-button').invoke('show').click(); + cy.get('.user-context-menu').find('.menu-list').find('ion-item').as('menuItems'); + cy.get('@menuItems').eq(3).contains('View details').click(); + }); + + afterEach(() => { + cy.dropTestbed(); + }); + + it('Tests user details modal', () => { + cy.get('.user-details-modal').as('modal').find('ion-header').contains('User details'); + cy.get('@modal').find('.ms-modal-content').as('modal-content').find('ion-text').eq(0).contains('Name'); + // cspell:disable-next-line + cy.get('@modal-content').find('ion-text').eq(1).contains('Jaheira'); + cy.get('@modal-content').find('ion-text').eq(2).contains('Joined'); + cy.get('@modal-content').find('ion-text').eq(3).contains('one second ago'); + cy.get('@modal-content').find('ion-text').eq(4).contains('Shared workspaces'); + cy.get('@modal-content').find('ion-list').find('ion-card').as('workspace-cards').should('have.length', 2); + cy.get('@workspace-cards').eq(0).find('ion-text').contains('Workspace1'); + cy.get('@workspace-cards').eq(0).find('ion-icon').should('exist'); + cy.get('@workspace-cards').eq(0).find('ion-label').contains('Owner'); + cy.get('@workspace-cards').eq(1).find('ion-text').contains('Workspace2'); + cy.get('@workspace-cards').eq(1).find('ion-icon').should('exist'); + cy.get('@workspace-cards').eq(1).find('ion-label').contains('Contributor'); + cy.get('@modal-content').find('ion-button').contains('Close').click(); + cy.get('@modal').should('not.exist'); + }); +});