From c64e4ea4e219d35b359da56749ecea4b303d07fc Mon Sep 17 00:00:00 2001 From: Nathan Panchout Date: Thu, 28 Nov 2024 20:53:28 +0100 Subject: [PATCH] wip --- .../__tests__/app-impress/doc-header.spec.ts | 52 ++-- .../app-impress/doc-member-create.spec.ts | 248 +++++++----------- .../app-impress/doc-member-create2.spec.ts | 238 ----------------- .../impress/src/components/DropdownMenu.tsx | 1 + .../components/share/DocShareModal.tsx | 9 +- 5 files changed, 121 insertions(+), 427 deletions(-) delete mode 100644 src/frontend/apps/e2e/__tests__/app-impress/doc-member-create2.spec.ts diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts index 8a57116c..619076ca 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-header.spec.ts @@ -88,7 +88,7 @@ test.describe('Doc Header', () => { await page.getByLabel('Open the document options').click(); await page - .getByRole('button', { + .getByRole('option', { name: 'Delete document', }) .click(); @@ -146,7 +146,7 @@ test.describe('Doc Header', () => { await page.getByLabel('Open the document options').click(); await expect( - page.getByRole('button', { name: 'Delete document' }), + page.getByRole('option', { name: 'Delete document' }), ).toBeDisabled(); // Click somewhere else to close the options @@ -161,29 +161,22 @@ test.describe('Doc Header', () => { name: 'Visibility', }), ).not.toHaveAttribute('disabled'); - await expect(shareModal.getByText('Search by email')).toBeVisible(); - const invitationCard = shareModal.getByLabel('List invitation card'); - await expect( - invitationCard.getByText('test@invitation.test'), - ).toBeVisible(); - await expect( - invitationCard.getByRole('combobox', { name: 'Role' }), - ).toBeEnabled(); - await expect( - invitationCard.getByRole('button', { - name: 'delete', - }), - ).toBeEnabled(); + const inputSearch = page.getByRole('combobox', { + name: 'Find a member to add to the document', + }); + await expect(inputSearch).toBeVisible(); + + const member = shareModal + .getByTestId('doc-share-member-row-test@accesses.test') + .first(); + await expect(member.getByText('test@accesses.test')).toBeVisible(); + await expect(member.getByLabel('doc-role-dropdown')).toBeVisible(); + await member.getByRole('button', { name: 'more_vert' }).click(); - const memberCard = shareModal.getByLabel('List members card'); - await expect(memberCard.getByText('test@accesses.test')).toBeVisible(); await expect( - memberCard.getByRole('combobox', { name: 'Role' }), - ).toBeEnabled(); - await expect( - memberCard.getByRole('button', { - name: 'delete', + page.getByRole('option', { + name: 'Delete', }), ).toBeEnabled(); }); @@ -220,7 +213,7 @@ test.describe('Doc Header', () => { await page.getByLabel('Open the document options').click(); await expect( - page.getByRole('button', { name: 'Delete document' }), + page.getByRole('option', { name: 'Delete document' }), ).toBeDisabled(); // Click somewhere else to close the options @@ -235,12 +228,17 @@ test.describe('Doc Header', () => { name: 'Visibility', }), ).toHaveAttribute('disabled'); - await expect(shareModal.getByText('Search by email')).toBeHidden(); + const inputSearch = page.getByRole('combobox', { + name: 'Find a member to add to the document', + }); + await expect(inputSearch).toBeHidden(); const invitationCard = shareModal.getByLabel('List invitation card'); - await expect( - invitationCard.getByText('test@invitation.test'), - ).toBeVisible(); + + const invitationRow = shareModal.getByTestId( + `doc-share-invitation-row-test@invitation.test`, + ); + await expect(invitationRow).toBeVisible(); await expect( invitationCard.getByRole('combobox', { name: 'Role' }), ).toHaveAttribute('disabled'); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts index 8450b6f3..daa9c7a6 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts @@ -16,163 +16,82 @@ test.describe('Document create member', () => { await page.getByRole('button', { name: 'Share' }).click(); - const inputSearch = page.getByLabel(/Find a member to add to the document/); + const inputSearch = page.getByRole('combobox', { + name: 'Find a member to add to the document', + }); await expect(inputSearch).toBeVisible(); - // Select user 1 + // Select user 1 and verify tag await inputSearch.fill('user'); - const response = await responsePromise; const users = (await response.json()).results as { email: string; + full_name: string; }[]; - await page.getByRole('option', { name: users[0].email }).click(); + const list = page.getByTestId('doc-share-add-member-list'); + await expect(list).toBeHidden(); + const quickSearchContent = page.getByTestId('doc-share-quick-search'); + await quickSearchContent + .getByTestId(`search-user-row-${users[0].email}`) + .click(); - // Select user 2 + await expect(list).toBeVisible(); + await expect( + list.getByTestId(`doc-share-add-member-${users[0].email}`), + ).toBeVisible(); + await expect(list.getByText(`${users[0].full_name}`)).toBeVisible(); + + // Select user 2 and verify tag await inputSearch.fill('user'); - await page.getByRole('option', { name: users[1].email }).click(); + await quickSearchContent + .getByTestId(`search-user-row-${users[1].email}`) + .click(); - // Select email + await expect( + list.getByTestId(`doc-share-add-member-${users[1].email}`), + ).toBeVisible(); + await expect(list.getByText(`${users[1].full_name}`)).toBeVisible(); + + // Select email and verify tag const email = randomName('test@test.fr', browserName, 1)[0]; await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); - - // Check user 1 tag - await expect( - page.getByText(`${users[0].email}`, { exact: true }), - ).toBeVisible(); - await expect(page.getByLabel(`Remove ${users[0].email}`)).toBeVisible(); - - // Check user 2 tag - await expect( - page.getByText(`${users[1].email}`, { exact: true }), - ).toBeVisible(); - await expect(page.getByLabel(`Remove ${users[1].email}`)).toBeVisible(); - - // Check invitation tag - await expect(page.getByText(email, { exact: true })).toBeVisible(); - await expect(page.getByLabel(`Remove ${email}`)).toBeVisible(); + await quickSearchContent.getByText(email).click(); + await expect(list.getByText(email)).toBeVisible(); // Check roles are displayed - await page.getByRole('combobox', { name: /Choose a role/ }).click(); - + await list.getByLabel('doc-role-dropdown').click(); await expect(page.getByRole('option', { name: 'Reader' })).toBeVisible(); await expect(page.getByRole('option', { name: 'Editor' })).toBeVisible(); + await expect(page.getByRole('option', { name: 'Owner' })).toBeVisible(); await expect( page.getByRole('option', { name: 'Administrator' }), ).toBeVisible(); - await expect(page.getByRole('option', { name: 'Owner' })).toBeVisible(); - }); - test('it sends a new invitation and adds a new user', async ({ - page, - browserName, - }) => { - const responsePromiseSearchUser = page.waitForResponse( - (response) => - response.url().includes('/users/?q=user') && response.status() === 200, - ); - - await createDoc(page, 'user-invitation', browserName, 1); - - await page.getByRole('button', { name: 'Share' }).click(); - - const inputSearch = page.getByLabel(/Find a member to add to the document/); - - const email = randomName('test@test.fr', browserName, 1)[0]; - await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); - - // Select a new user - await inputSearch.fill('user'); - const responseSearchUser = await responsePromiseSearchUser; - const [user] = (await responseSearchUser.json()).results as { - email: string; - }[]; - await page.getByRole('option', { name: user.email }).click(); - - // Choose a role - await page.getByRole('combobox', { name: /Choose a role/ }).click(); + // Validate await page.getByRole('option', { name: 'Administrator' }).click(); + await page.getByRole('button', { name: 'Invite' }).click(); - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 201, - ); - const responsePromiseAddUser = page.waitForResponse( - (response) => - response.url().includes('/accesses/') && response.status() === 201, - ); - - await page.getByRole('button', { name: 'Validate' }).click(); - - // Check invitation sent - await expect(page.getByText(`Invitation sent to ${email}`)).toBeVisible(); - const responseCreateInvitation = await responsePromiseCreateInvitation; - expect(responseCreateInvitation.ok()).toBeTruthy(); - expect( - responseCreateInvitation.request().headers()['content-language'], - ).toBe('en-us'); + // Check invitation added + await expect( + quickSearchContent.getByText('Pending invitations'), + ).toBeVisible(); + await expect(quickSearchContent.getByText(email).first()).toBeVisible(); // Check user added + await expect(page.getByText('Share with 3 users')).toBeVisible(); await expect( - page.getByText(`User ${user.email} added to the document.`), + quickSearchContent.getByText(users[0].full_name).first(), ).toBeVisible(); - const responseAddUser = await responsePromiseAddUser; - expect(responseAddUser.ok()).toBeTruthy(); - expect(responseAddUser.request().headers()['content-language']).toBe( - 'en-us', - ); - - const listInvitation = page.getByLabel('List invitation card'); - await expect(listInvitation.locator('li').getByText(email)).toBeVisible(); await expect( - listInvitation.locator('li').getByText('Invited'), + quickSearchContent.getByText(users[0].email).first(), ).toBeVisible(); - - const listMember = page.getByLabel('List members card'); - await expect(listMember.locator('li').getByText(user.email)).toBeVisible(); - }); - - test('it try to add twice the same user', async ({ page, browserName }) => { - const responsePromiseSearchUser = page.waitForResponse( - (response) => - response.url().includes('/users/?q=user') && response.status() === 200, - ); - - await createDoc(page, 'user-twice', browserName, 1); - - await page.getByRole('button', { name: 'Share' }).click(); - - const inputSearch = page.getByLabel(/Find a member to add to the document/); - await inputSearch.fill('user'); - const responseSearchUser = await responsePromiseSearchUser; - const [user] = (await responseSearchUser.json()).results as { - email: string; - }[]; - await page.getByRole('option', { name: user.email }).click(); - - // Choose a role - await page.getByRole('combobox', { name: /Choose a role/ }).click(); - await page.getByRole('option', { name: 'Owner' }).click(); - - const responsePromiseAddMember = page.waitForResponse( - (response) => - response.url().includes('/accesses/') && response.status() === 201, - ); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`User ${user.email} added to the document.`), + quickSearchContent.getByText(users[1].email).first(), + ).toBeVisible(); + await expect( + quickSearchContent.getByText(users[1].full_name).first(), ).toBeVisible(); - const responseAddMember = await responsePromiseAddMember; - expect(responseAddMember.ok()).toBeTruthy(); - - await inputSearch.fill('user'); - await expect(page.getByText('Loading...')).toBeHidden(); - await expect(page.getByRole('option', { name: user.email })).toBeHidden(); }); test('it try to add twice the same invitation', async ({ @@ -183,32 +102,35 @@ test.describe('Document create member', () => { await page.getByRole('button', { name: 'Share' }).click(); - const inputSearch = page.getByLabel(/Find a member to add to the document/); + const inputSearch = page.getByRole('combobox', { + name: 'Find a member to add to the document', + }); const [email] = randomName('test@test.fr', browserName, 1); await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); + await page.getByTestId(`search-user-row-${email}`).click(); // Choose a role - await page.getByRole('combobox', { name: /Choose a role/ }).click(); + const container = page.getByTestId('doc-share-add-member-list'); + await container.getByLabel('doc-role-dropdown').click(); await page.getByRole('option', { name: 'Owner' }).click(); const responsePromiseCreateInvitation = page.waitForResponse( (response) => response.url().includes('/invitations/') && response.status() === 201, ); - - await page.getByRole('button', { name: 'Validate' }).click(); + await page.getByRole('button', { name: 'Invite' }).click(); // Check invitation sent - await expect(page.getByText(`Invitation sent to ${email}`)).toBeVisible(); + const responseCreateInvitation = await responsePromiseCreateInvitation; expect(responseCreateInvitation.ok()).toBeTruthy(); await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); + await page.getByTestId(`search-user-row-${email}`).click(); + // Choose a role - await page.getByRole('combobox', { name: /Choose a role/ }).click(); + await container.getByLabel('doc-role-dropdown').click(); await page.getByRole('option', { name: 'Owner' }).click(); const responsePromiseCreateInvitationFail = page.waitForResponse( @@ -216,7 +138,7 @@ test.describe('Document create member', () => { response.url().includes('/invitations/') && response.status() === 400, ); - await page.getByRole('button', { name: 'Validate' }).click(); + await page.getByRole('button', { name: 'Invite' }).click(); await expect( page.getByText(`"${email}" is already invited to the document.`), ).toBeVisible(); @@ -237,16 +159,17 @@ test.describe('Document create member', () => { await page.getByRole('button', { name: 'Partager' }).click(); - const inputSearch = page.getByLabel( - /Trouver un membre à ajouter au document/, - ); + const inputSearch = page.getByRole('combobox', { + name: 'Trouver un membre à ajouter au document', + }); const email = randomName('test@test.fr', browserName, 1)[0]; await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); + await page.getByTestId(`search-user-row-${email}`).click(); // Choose a role - await page.getByRole('combobox', { name: /Choisissez un rôle/ }).click(); + const container = page.getByTestId('doc-share-add-member-list'); + await container.getByLabel('doc-role-dropdown').click(); await page.getByRole('option', { name: 'Administrateur' }).click(); const responsePromiseCreateInvitation = page.waitForResponse( @@ -254,10 +177,10 @@ test.describe('Document create member', () => { response.url().includes('/invitations/') && response.status() === 201, ); - await page.getByRole('button', { name: 'Valider' }).click(); + await page.getByRole('button', { name: 'Invite' }).click(); // Check invitation sent - await expect(page.getByText(`Invitation envoyée à ${email}`)).toBeVisible(); + const responseCreateInvitation = await responsePromiseCreateInvitation; expect(responseCreateInvitation.ok()).toBeTruthy(); expect( @@ -270,14 +193,17 @@ test.describe('Document create member', () => { await page.getByRole('button', { name: 'Share' }).click(); - const inputSearch = page.getByLabel(/Find a member to add to the document/); + const inputSearch = page.getByRole('combobox', { + name: 'Find a member to add to the document', + }); const email = randomName('test@test.fr', browserName, 1)[0]; await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); + await page.getByTestId(`search-user-row-${email}`).click(); // Choose a role - await page.getByRole('combobox', { name: /Choose a role/ }).click(); + const container = page.getByTestId('doc-share-add-member-list'); + await container.getByLabel('doc-role-dropdown').click(); await page.getByRole('option', { name: 'Administrator' }).click(); const responsePromiseCreateInvitation = page.waitForResponse( @@ -285,26 +211,28 @@ test.describe('Document create member', () => { response.url().includes('/invitations/') && response.status() === 201, ); - await page.getByRole('button', { name: 'Validate' }).click(); + await page.getByRole('button', { name: 'Invite' }).click(); // Check invitation sent - await expect(page.getByText(`Invitation sent to ${email}`)).toBeVisible(); const responseCreateInvitation = await responsePromiseCreateInvitation; expect(responseCreateInvitation.ok()).toBeTruthy(); - const listInvitation = page.getByLabel('List invitation card'); - const li = listInvitation.locator('li').filter({ - hasText: email, - }); - await expect(li.getByText(email)).toBeVisible(); + const listInvitation = page.getByTestId('doc-share-quick-search'); + const userInvitation = listInvitation.getByTestId( + `doc-share-invitation-row-${email}`, + ); + await expect(userInvitation).toBeVisible(); - await li.getByRole('combobox', { name: /Role/ }).click(); - await li.getByRole('option', { name: 'Reader' }).click(); - await expect(page.getByText(`The role has been updated.`)).toBeVisible(); - await li.getByText('delete').click(); - await expect( - page.getByText(`The invitation has been removed.`), - ).toBeVisible(); - await expect(listInvitation.locator('li').getByText(email)).toBeHidden(); + await userInvitation.getByLabel('doc-role-dropdown').click(); + await page.getByRole('option', { name: 'Reader' }).click(); + + const moreActions = userInvitation.getByRole('button', { + name: 'more_vert', + }); + await moreActions.click(); + + await page.getByRole('option', { name: 'delete Delete' }).click(); + + await expect(userInvitation).toBeHidden(); }); }); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create2.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create2.spec.ts deleted file mode 100644 index daa9c7a6..00000000 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-create2.spec.ts +++ /dev/null @@ -1,238 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { createDoc, randomName } from './common'; - -test.beforeEach(async ({ page }) => { - await page.goto('/'); -}); - -test.describe('Document create member', () => { - test('it selects 2 users and 1 invitation', async ({ page, browserName }) => { - const responsePromise = page.waitForResponse( - (response) => - response.url().includes('/users/?q=user') && response.status() === 200, - ); - await createDoc(page, 'select-multi-users', browserName, 1); - - await page.getByRole('button', { name: 'Share' }).click(); - - const inputSearch = page.getByRole('combobox', { - name: 'Find a member to add to the document', - }); - await expect(inputSearch).toBeVisible(); - - // Select user 1 and verify tag - await inputSearch.fill('user'); - const response = await responsePromise; - const users = (await response.json()).results as { - email: string; - full_name: string; - }[]; - - const list = page.getByTestId('doc-share-add-member-list'); - await expect(list).toBeHidden(); - const quickSearchContent = page.getByTestId('doc-share-quick-search'); - await quickSearchContent - .getByTestId(`search-user-row-${users[0].email}`) - .click(); - - await expect(list).toBeVisible(); - await expect( - list.getByTestId(`doc-share-add-member-${users[0].email}`), - ).toBeVisible(); - await expect(list.getByText(`${users[0].full_name}`)).toBeVisible(); - - // Select user 2 and verify tag - await inputSearch.fill('user'); - await quickSearchContent - .getByTestId(`search-user-row-${users[1].email}`) - .click(); - - await expect( - list.getByTestId(`doc-share-add-member-${users[1].email}`), - ).toBeVisible(); - await expect(list.getByText(`${users[1].full_name}`)).toBeVisible(); - - // Select email and verify tag - const email = randomName('test@test.fr', browserName, 1)[0]; - await inputSearch.fill(email); - await quickSearchContent.getByText(email).click(); - await expect(list.getByText(email)).toBeVisible(); - - // Check roles are displayed - await list.getByLabel('doc-role-dropdown').click(); - await expect(page.getByRole('option', { name: 'Reader' })).toBeVisible(); - await expect(page.getByRole('option', { name: 'Editor' })).toBeVisible(); - await expect(page.getByRole('option', { name: 'Owner' })).toBeVisible(); - await expect( - page.getByRole('option', { name: 'Administrator' }), - ).toBeVisible(); - - // Validate - await page.getByRole('option', { name: 'Administrator' }).click(); - await page.getByRole('button', { name: 'Invite' }).click(); - - // Check invitation added - await expect( - quickSearchContent.getByText('Pending invitations'), - ).toBeVisible(); - await expect(quickSearchContent.getByText(email).first()).toBeVisible(); - - // Check user added - await expect(page.getByText('Share with 3 users')).toBeVisible(); - await expect( - quickSearchContent.getByText(users[0].full_name).first(), - ).toBeVisible(); - await expect( - quickSearchContent.getByText(users[0].email).first(), - ).toBeVisible(); - await expect( - quickSearchContent.getByText(users[1].email).first(), - ).toBeVisible(); - await expect( - quickSearchContent.getByText(users[1].full_name).first(), - ).toBeVisible(); - }); - - test('it try to add twice the same invitation', async ({ - page, - browserName, - }) => { - await createDoc(page, 'invitation-twice', browserName, 1); - - await page.getByRole('button', { name: 'Share' }).click(); - - const inputSearch = page.getByRole('combobox', { - name: 'Find a member to add to the document', - }); - - const [email] = randomName('test@test.fr', browserName, 1); - await inputSearch.fill(email); - await page.getByTestId(`search-user-row-${email}`).click(); - - // Choose a role - const container = page.getByTestId('doc-share-add-member-list'); - await container.getByLabel('doc-role-dropdown').click(); - await page.getByRole('option', { name: 'Owner' }).click(); - - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 201, - ); - await page.getByRole('button', { name: 'Invite' }).click(); - - // Check invitation sent - - const responseCreateInvitation = await responsePromiseCreateInvitation; - expect(responseCreateInvitation.ok()).toBeTruthy(); - - await inputSearch.fill(email); - await page.getByTestId(`search-user-row-${email}`).click(); - - // Choose a role - await container.getByLabel('doc-role-dropdown').click(); - await page.getByRole('option', { name: 'Owner' }).click(); - - const responsePromiseCreateInvitationFail = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 400, - ); - - await page.getByRole('button', { name: 'Invite' }).click(); - await expect( - page.getByText(`"${email}" is already invited to the document.`), - ).toBeVisible(); - const responseCreateInvitationFail = - await responsePromiseCreateInvitationFail; - expect(responseCreateInvitationFail.ok()).toBeFalsy(); - }); - - test('The invitation endpoint get the language of the website', async ({ - page, - browserName, - }) => { - await createDoc(page, 'user-invitation', browserName, 1); - - const header = page.locator('header').first(); - await header.getByRole('combobox').getByText('EN').click(); - await header.getByRole('option', { name: 'FR' }).click(); - - await page.getByRole('button', { name: 'Partager' }).click(); - - const inputSearch = page.getByRole('combobox', { - name: 'Trouver un membre à ajouter au document', - }); - - const email = randomName('test@test.fr', browserName, 1)[0]; - await inputSearch.fill(email); - await page.getByTestId(`search-user-row-${email}`).click(); - - // Choose a role - const container = page.getByTestId('doc-share-add-member-list'); - await container.getByLabel('doc-role-dropdown').click(); - await page.getByRole('option', { name: 'Administrateur' }).click(); - - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 201, - ); - - await page.getByRole('button', { name: 'Invite' }).click(); - - // Check invitation sent - - const responseCreateInvitation = await responsePromiseCreateInvitation; - expect(responseCreateInvitation.ok()).toBeTruthy(); - expect( - responseCreateInvitation.request().headers()['content-language'], - ).toBe('fr-fr'); - }); - - test('it manages invitation', async ({ page, browserName }) => { - await createDoc(page, 'user-invitation', browserName, 1); - - await page.getByRole('button', { name: 'Share' }).click(); - - const inputSearch = page.getByRole('combobox', { - name: 'Find a member to add to the document', - }); - - const email = randomName('test@test.fr', browserName, 1)[0]; - await inputSearch.fill(email); - await page.getByTestId(`search-user-row-${email}`).click(); - - // Choose a role - const container = page.getByTestId('doc-share-add-member-list'); - await container.getByLabel('doc-role-dropdown').click(); - await page.getByRole('option', { name: 'Administrator' }).click(); - - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 201, - ); - - await page.getByRole('button', { name: 'Invite' }).click(); - - // Check invitation sent - const responseCreateInvitation = await responsePromiseCreateInvitation; - expect(responseCreateInvitation.ok()).toBeTruthy(); - - const listInvitation = page.getByTestId('doc-share-quick-search'); - const userInvitation = listInvitation.getByTestId( - `doc-share-invitation-row-${email}`, - ); - await expect(userInvitation).toBeVisible(); - - await userInvitation.getByLabel('doc-role-dropdown').click(); - await page.getByRole('option', { name: 'Reader' }).click(); - - const moreActions = userInvitation.getByRole('button', { - name: 'more_vert', - }); - await moreActions.click(); - - await page.getByRole('option', { name: 'delete Delete' }).click(); - - await expect(userInvitation).toBeHidden(); - }); -}); diff --git a/src/frontend/apps/impress/src/components/DropdownMenu.tsx b/src/frontend/apps/impress/src/components/DropdownMenu.tsx index 69f6f267..71be98b6 100644 --- a/src/frontend/apps/impress/src/components/DropdownMenu.tsx +++ b/src/frontend/apps/impress/src/components/DropdownMenu.tsx @@ -81,6 +81,7 @@ export const DropdownMenu = ({ return ( { { } > { )} - + {