diff --git a/src/frontend/apps/e2e/__tests__/app-desk/member-create.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/member-create.spec.ts deleted file mode 100644 index f6ed17eb..00000000 --- a/src/frontend/apps/e2e/__tests__/app-desk/member-create.spec.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { createTeam, keyCloakSignIn, randomName } from './common'; - -test.beforeEach(async ({ page, browserName }) => { - await page.goto('/'); - await keyCloakSignIn(page, browserName); -}); - -test.describe('Members Create', () => { - test('it opens the modals to add a member to the team', async ({ - page, - browserName, - }) => { - await createTeam(page, 'member-open-modal', browserName, 1); - - await page.getByLabel('Add members to the team').click(); - - await expect(page.getByText('Add a member')).toBeVisible(); - await expect( - page.getByLabel(/Find a member to add to the team/), - ).toBeVisible(); - - await expect(page.getByRole('button', { name: 'Validate' })).toBeVisible(); - await expect(page.getByRole('button', { name: 'Cancel' })).toBeVisible(); - }); - - test('it selects 2 users and 1 invitation', async ({ page, browserName }) => { - const responsePromise = page.waitForResponse( - (response) => - response.url().includes('/users/?q=test') && response.status() === 200, - ); - await createTeam(page, 'member-modal-search-user', browserName, 1); - - await page.getByLabel('Add members to the team').click(); - - await expect(page.getByRole('radio', { name: 'Owner' })).toBeHidden(); - - const inputSearch = page.getByLabel(/Find a member to add to the team/); - - // Select user 1 - await inputSearch.fill('test'); - - const response = await responsePromise; - const users = (await response.json()).results as { - name: string; - }[]; - - await page.getByRole('option', { name: users[0].name }).click(); - - // Select user 2 - await inputSearch.fill('test1'); - await page.getByRole('option', { name: users[1].name }).click(); - - // Select email - 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].name}`, { exact: true }), - ).toBeVisible(); - await expect(page.getByLabel(`Remove ${users[0].name}`)).toBeVisible(); - - // Check user 2 tag - await expect( - page.getByText(`${users[1].name}`, { exact: true }), - ).toBeVisible(); - await expect(page.getByLabel(`Remove ${users[1].name}`)).toBeVisible(); - - // Check invitation tag - await expect(page.getByText(email, { exact: true })).toBeVisible(); - await expect(page.getByLabel(`Remove ${email}`)).toBeVisible(); - - // Check roles are displayed - await expect(page.getByText(/Choose a role/)).toBeVisible(); - await expect(page.getByRole('radio', { name: 'Member' })).toBeChecked(); - await expect(page.getByRole('radio', { name: 'Owner' })).toBeVisible(); - await expect(page.getByRole('radio', { name: 'Admin' })).toBeVisible(); - }); - - test('it sends a new invitation and adds a new member', async ({ - page, - browserName, - }) => { - const responsePromiseSearchUser = page.waitForResponse( - (response) => - response.url().includes('/users/?q=test') && response.status() === 200, - ); - - await createTeam(page, 'member-invitation', browserName, 1); - - await page.getByLabel('Add members to the team').click(); - - // Select a new email - const inputSearch = page.getByLabel(/Find a member to add to the team/); - - 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('test'); - const responseSearchUser = await responsePromiseSearchUser; - const users = (await responseSearchUser.json()).results as { - name: string; - }[]; - await page.getByRole('option', { name: users[0].name }).click(); - - // Choose a role - await page.getByRole('radio', { name: 'Admin' }).click(); - - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && response.status() === 201, - ); - const responsePromiseAddMember = 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(); - - // Check member added - await expect( - page.getByText(`Member ${users[0].name} added to the team`), - ).toBeVisible(); - const responseAddMember = await responsePromiseAddMember; - expect(responseAddMember.ok()).toBeTruthy(); - - const table = page.getByLabel('List members card').getByRole('table'); - await expect(table.getByText(users[0].name)).toBeVisible(); - await expect(table.getByText('Admin')).toBeVisible(); - }); - - test('it try to add twice the same user', async ({ page, browserName }) => { - const responsePromiseSearchUser = page.waitForResponse( - (response) => - response.url().includes('/users/?q=test') && response.status() === 200, - ); - - await createTeam(page, 'member-twice', browserName, 1); - - await page.getByLabel('Add members to the team').click(); - - const inputSearch = page.getByLabel(/Find a member to add to the team/); - await inputSearch.fill('test'); - const responseSearchUser = await responsePromiseSearchUser; - const users = (await responseSearchUser.json()).results as { - name: string; - }[]; - await page.getByRole('option', { name: users[0].name }).click(); - - // Choose a role - await page.getByRole('radio', { 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(`Member ${users[0].name} added to the team`), - ).toBeVisible(); - const responseAddMember = await responsePromiseAddMember; - expect(responseAddMember.ok()).toBeTruthy(); - - await page.getByLabel('Add members to the team').click(); - - await inputSearch.fill('test'); - await expect( - page.getByRole('option', { name: users[0].name }), - ).toBeHidden(); - }); - - test('it try to add twice the same invitation', async ({ - page, - browserName, - }) => { - await createTeam(page, 'invitation-twice', browserName, 1); - - await page.getByLabel('Add members to the team').click(); - - const inputSearch = page.getByLabel(/Find a member to add to the team/); - - const email = randomName('test@test.fr', browserName, 1)[0]; - await inputSearch.fill(email); - await page.getByRole('option', { name: email }).click(); - - // Choose a role - await page.getByRole('radio', { name: 'Owner' }).click(); - - const responsePromiseCreateInvitation = page.waitForResponse( - (response) => - response.url().includes('/invitations/') && 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(); - - await page.getByLabel('Add members to the team').click(); - - await inputSearch.fill(email); - await expect(page.getByRole('option', { name: email })).toBeHidden(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/member-delete.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/member-delete.spec.ts deleted file mode 100644 index e43d3be4..00000000 --- a/src/frontend/apps/e2e/__tests__/app-desk/member-delete.spec.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { addNewMember, createTeam, keyCloakSignIn } from './common'; - -test.beforeEach(async ({ page, browserName }) => { - await page.goto('/'); - await keyCloakSignIn(page, browserName); -}); - -test.describe('Members Delete', () => { - test('it cannot delete himself when it is the last owner', async ({ - page, - browserName, - }) => { - await createTeam(page, 'member-delete-1', browserName, 1); - - const table = page.getByLabel('List members card').getByRole('table'); - - const cells = table.getByRole('row').nth(1).getByRole('cell'); - await expect(cells.nth(1)).toHaveText( - new RegExp(`E2E ${browserName}`, 'i'), - ); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await expect( - page.getByText( - 'You are the last owner, you cannot be removed from your team.', - ), - ).toBeVisible(); - await expect(page.getByRole('button', { name: 'Validate' })).toBeDisabled(); - }); - - test('it deletes himself when it is not the last owner', async ({ - page, - browserName, - }) => { - await createTeam(page, 'member-delete-2', browserName, 1); - - await addNewMember(page, 0, 'Owner'); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: new RegExp(`E2E ${browserName}`, 'i') }) - .getByRole('cell'); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the team`), - ).toBeVisible(); - await expect( - page.getByRole('button', { name: `Create a new team` }), - ).toBeVisible(); - }); - - test('it cannot delete owner member', async ({ page, browserName }) => { - await createTeam(page, 'member-delete-3', browserName, 1); - - const username = await addNewMember(page, 0, 'Owner'); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await expect( - page.getByText(`You cannot remove other owner.`), - ).toBeVisible(); - await expect(page.getByRole('button', { name: 'Validate' })).toBeDisabled(); - }); - - test('it deletes admin member', async ({ page, browserName }) => { - await createTeam(page, 'member-delete-4', browserName, 1); - - const username = await addNewMember(page, 0, 'Admin'); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the team`), - ).toBeVisible(); - await expect(table.getByText(username)).toBeHidden(); - }); - - test('it cannot delete owner member when admin', async ({ - page, - browserName, - }) => { - await createTeam(page, 'member-delete-5', browserName, 1); - - const username = await addNewMember(page, 0, 'Owner'); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`E2E ${browserName}`, 'i') }) - .getByRole('cell'); - await myCells.nth(4).getByLabel('Member options').click(); - - // Change role to Admin - await page.getByText('Update the role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Admin' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await expect(cells.getByLabel('Member options')).toBeHidden(); - }); - - test('it deletes admin member when admin', async ({ page, browserName }) => { - await createTeam(page, 'member-delete-6', browserName, 1); - - // To not be the only owner - await addNewMember(page, 0, 'Owner'); - - const username = await addNewMember(page, 1, 'Admin', 'something'); - - const table = page.getByLabel('List members card').getByRole('table'); - - // find row where regexp match the name - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`E2E ${browserName}`, 'i') }) - .getByRole('cell'); - await myCells.nth(4).getByLabel('Member options').click(); - - // Change role to Admin - await page.getByText('Update the role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Admin' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - const cells = table - .getByRole('row') - .filter({ hasText: username }) - .getByRole('cell'); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByLabel('Open the modal to delete this member').click(); - - await page.getByRole('button', { name: 'Validate' }).click(); - await expect( - page.getByText(`The member has been removed from the team`), - ).toBeVisible(); - await expect(table.getByText(username)).toBeHidden(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/member-grid.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/member-grid.spec.ts deleted file mode 100644 index d09e640f..00000000 --- a/src/frontend/apps/e2e/__tests__/app-desk/member-grid.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { createTeam, keyCloakSignIn } from './common'; - -test.beforeEach(async ({ page, browserName }) => { - await page.goto('/'); - await keyCloakSignIn(page, browserName); -}); - -test.describe('Member Grid', () => { - test('checks the owner member is displayed correctly', async ({ - page, - browserName, - }) => { - await createTeam(page, 'team-owner', browserName, 1); - - const table = page.getByLabel('List members card').getByRole('table'); - - const thead = table.locator('thead'); - await expect(thead.getByText(/Names/i)).toBeVisible(); - await expect(thead.getByText(/Emails/i)).toBeVisible(); - await expect(thead.getByText(/Roles/i)).toBeVisible(); - - const cells = table.getByRole('row').nth(1).getByRole('cell'); - await expect(cells.nth(0).getByLabel('Member icon')).toBeVisible(); - await expect(cells.nth(1)).toHaveText( - new RegExp(`E2E ${browserName}`, 'i'), - ); - await expect(cells.nth(2)).toHaveText(`user@${browserName}.e2e`); - await expect(cells.nth(3)).toHaveText(/Owner/i); - }); - - test('try to update the owner role but cannot because it is the last owner', async ({ - page, - browserName, - }) => { - await createTeam(page, 'team-owner-role', browserName, 1); - - const table = page.getByLabel('List members card').getByRole('table'); - - const cells = table.getByRole('row').nth(1).getByRole('cell'); - await expect(cells.nth(1)).toHaveText( - new RegExp(`E2E ${browserName}`, 'i'), - ); - await cells.nth(4).getByLabel('Member options').click(); - await page.getByText('Update the role').click(); - - await expect( - page.getByText('You are the last owner, you cannot change your role.'), - ).toBeVisible(); - - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - - const radios = await radioGroup.getByRole('radio').all(); - for (const radio of radios) { - await expect(radio).toBeDisabled(); - } - - await expect( - page.getByRole('button', { - name: 'Validate', - }), - ).toBeDisabled(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/teams-create.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/teams-create.spec.ts deleted file mode 100644 index 7365984d..00000000 --- a/src/frontend/apps/e2e/__tests__/app-desk/teams-create.spec.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { keyCloakSignIn } from './common'; - -test.beforeEach(async ({ page, browserName }) => { - await page.goto('/'); - await keyCloakSignIn(page, browserName); -}); - -test.describe('Teams Create', () => { - test('checks all the create team elements are visible', async ({ page }) => { - const buttonCreateHomepage = page.getByRole('button', { - name: 'Create a new team', - }); - await buttonCreateHomepage.click(); - await expect(buttonCreateHomepage).toBeHidden(); - - const card = page.getByLabel('Create new team card').first(); - - await expect(card.getByLabel('Team name')).toBeVisible(); - - await expect(card.getByLabel('icon group')).toBeVisible(); - - await expect( - card.getByRole('heading', { - name: 'Name the team', - level: 3, - }), - ).toBeVisible(); - - await expect( - card.getByRole('button', { - name: 'Create the team', - }), - ).toBeVisible(); - - await expect( - card.getByRole('button', { - name: 'Cancel', - }), - ).toBeVisible(); - }); - - test('checks the cancel button interaction', async ({ page }) => { - const buttonCreateHomepage = page.getByRole('button', { - name: 'Create a new team', - }); - await buttonCreateHomepage.click(); - await expect(buttonCreateHomepage).toBeHidden(); - - const card = page.getByLabel('Create new team card').first(); - - await card - .getByRole('button', { - name: 'Cancel', - }) - .click(); - - await expect(buttonCreateHomepage).toBeVisible(); - }); - - test('checks the routing on new team created', async ({ - page, - browserName, - }) => { - const panel = page.getByLabel('Teams panel').first(); - - await panel.getByRole('button', { name: 'Add a team' }).click(); - - const teamName = `My routing team ${browserName}-${Math.floor(Math.random() * 1000)}`; - await page.getByText('Team name').fill(teamName); - await page.getByRole('button', { name: 'Create the team' }).click(); - - const elTeam = page.getByText(`Members of “${teamName}“`); - await expect(elTeam).toBeVisible(); - - await panel.getByRole('button', { name: 'Add a team' }).click(); - await expect(elTeam).toBeHidden(); - - await panel.locator('li').getByText(teamName).click(); - await expect(elTeam).toBeVisible(); - }); - - test('checks alias teams url with homepage', async ({ page }) => { - await expect(page).toHaveURL('/'); - - const buttonCreateHomepage = page.getByRole('button', { - name: 'Create a new team', - }); - - await expect(buttonCreateHomepage).toBeVisible(); - - await page.goto('/teams'); - await expect(buttonCreateHomepage).toBeVisible(); - await expect(page).toHaveURL(/\/teams$/); - }); - - test('checks error when duplicate team', async ({ page, browserName }) => { - const panel = page.getByLabel('Teams panel').first(); - - await panel.getByRole('button', { name: 'Add a team' }).click(); - - const teamName = `My duplicate team ${browserName}-${Math.floor(Math.random() * 1000)}`; - await page.getByText('Team name').fill(teamName); - await page.getByRole('button', { name: 'Create the team' }).click(); - - await panel.getByRole('button', { name: 'Add a team' }).click(); - - await page.getByText('Team name').fill(teamName); - await page.getByRole('button', { name: 'Create the team' }).click(); - - await expect( - page.getByText('Team with this Slug already exists.'), - ).toBeVisible(); - }); - - test('checks 404 on teams/[id] page', async ({ page }) => { - await page.goto('/teams/some-unknown-team'); - await expect( - page.getByText( - 'It seems that the page you are looking for does not exist or cannot be displayed correctly.', - ), - ).toBeVisible({ - timeout: 15000, - }); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/teams-delete.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/teams-delete.spec.ts deleted file mode 100644 index 159a7ef5..00000000 --- a/src/frontend/apps/e2e/__tests__/app-desk/teams-delete.spec.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { addNewMember, createTeam, keyCloakSignIn } from './common'; - -test.beforeEach(async ({ page, browserName }) => { - await page.goto('/'); - await keyCloakSignIn(page, browserName); -}); - -test.describe('Teams Delete', () => { - test('it deletes the team when we are owner', async ({ - page, - browserName, - }) => { - await createTeam(page, 'team-update-name-1', browserName, 1); - - await page.getByLabel(`Open the team options`).click(); - await page.getByRole('button', { name: `Delete the team` }).click(); - await page.getByRole('button', { name: `Confirm deletion` }).click(); - await expect(page.getByText(`The team has been removed.`)).toBeVisible(); - await expect( - page.getByRole('button', { name: `Create a new team` }), - ).toBeVisible(); - }); - - test('it cannot delete the team when we are admin', async ({ - page, - browserName, - }) => { - await createTeam(page, 'team-update-name-2', browserName, 1); - - await addNewMember(page, 0, 'Owner'); - - // Change role to Admin - const table = page.getByLabel('List members card').getByRole('table'); - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`E2E ${browserName}`, 'i') }) - .getByRole('cell'); - await myCells.nth(4).getByLabel('Member options').click(); - - await page.getByText('Update the role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Admin' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - // Delete the team button should be hidden - await page.getByLabel(`Open the team options`).click(); - await expect( - page.getByRole('button', { name: `Delete the team` }), - ).toBeHidden(); - }); - - test('it cannot delete the team when we are member', async ({ - page, - browserName, - }) => { - await createTeam(page, 'team-update-name-3', browserName, 1); - - await addNewMember(page, 0, 'Owner'); - - // Change role to Admin - const table = page.getByLabel('List members card').getByRole('table'); - const myCells = table - .getByRole('row') - .filter({ hasText: new RegExp(`E2E ${browserName}`, 'i') }) - .getByRole('cell'); - await myCells.nth(4).getByLabel('Member options').click(); - - await page.getByText('Update the role').click(); - const radioGroup = page.getByLabel('Radio buttons to update the roles'); - await radioGroup.getByRole('radio', { name: 'Member' }).click(); - await page.getByRole('button', { name: 'Validate' }).click(); - - // Option button should be hidden - await expect(page.getByLabel(`Open the team options`)).toBeHidden(); - }); -}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/404.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/404.spec.ts similarity index 100% rename from src/frontend/apps/e2e/__tests__/app-desk/404.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/404.spec.ts diff --git a/src/frontend/apps/e2e/__tests__/app-desk/common.ts b/src/frontend/apps/e2e/__tests__/app-impress/common.ts similarity index 100% rename from src/frontend/apps/e2e/__tests__/app-desk/common.ts rename to src/frontend/apps/e2e/__tests__/app-impress/common.ts diff --git a/src/frontend/apps/e2e/__tests__/app-desk/header.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/header.spec.ts similarity index 100% rename from src/frontend/apps/e2e/__tests__/app-desk/header.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/header.spec.ts diff --git a/src/frontend/apps/e2e/__tests__/app-desk/language.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/language.spec.ts similarity index 90% rename from src/frontend/apps/e2e/__tests__/app-desk/language.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/language.spec.ts index e9cb8efc..388faf34 100644 --- a/src/frontend/apps/e2e/__tests__/app-desk/language.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/language.spec.ts @@ -11,7 +11,7 @@ test.describe('Language', () => { test('checks the language picker', async ({ page }) => { await expect( page.getByRole('button', { - name: 'Create a new team', + name: 'Create a new pad', }), ).toBeVisible(); @@ -22,7 +22,7 @@ test.describe('Language', () => { await expect( page.getByRole('button', { - name: 'Créer un nouveau groupe', + name: 'Créer un nouveau pad', }), ).toBeVisible(); }); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/menu.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/menu.spec.ts similarity index 95% rename from src/frontend/apps/e2e/__tests__/app-desk/menu.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/menu.spec.ts index d03892af..4bd73852 100644 --- a/src/frontend/apps/e2e/__tests__/app-desk/menu.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/menu.spec.ts @@ -47,7 +47,7 @@ test.describe('Menu', () => { }) => { await expect( page.getByRole('button', { - name: 'Create a new team', + name: 'Create a new pad', }), ).toBeVisible(); @@ -61,13 +61,13 @@ test.describe('Menu', () => { if (isDefault) { await expect( page.getByRole('button', { - name: 'Create a new team', + name: 'Create a new pad', }), ).toBeVisible(); } else { await expect( page.getByRole('button', { - name: 'Create a new team', + name: 'Create a new pad', }), ).toBeHidden(); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/pad-create.specWI.ts b/src/frontend/apps/e2e/__tests__/app-impress/pad-create.specWI.ts new file mode 100644 index 00000000..0a276da9 --- /dev/null +++ b/src/frontend/apps/e2e/__tests__/app-impress/pad-create.specWI.ts @@ -0,0 +1,127 @@ +import { expect, test } from '@playwright/test'; + +import { keyCloakSignIn } from './common'; + +test.beforeEach(async ({ page, browserName }) => { + await page.goto('/'); + await keyCloakSignIn(page, browserName); +}); + +test.describe('Pad Create', () => { + test('checks all the create pad elements are visible', async ({ page }) => { + const buttonCreateHomepage = page.getByRole('button', { + name: 'Create a new pad', + }); + await buttonCreateHomepage.click(); + await expect(buttonCreateHomepage).toBeHidden(); + + const card = page.getByLabel('Create new pad card').first(); + + await expect(card.getByLabel('Pad name')).toBeVisible(); + + await expect(card.getByLabel('icon group')).toBeVisible(); + + await expect( + card.getByRole('heading', { + name: 'Name the pad', + level: 3, + }), + ).toBeVisible(); + + await expect( + card.getByRole('button', { + name: 'Create the pad', + }), + ).toBeVisible(); + + await expect( + card.getByRole('button', { + name: 'Cancel', + }), + ).toBeVisible(); + }); + + test('checks the cancel button interaction', async ({ page }) => { + const buttonCreateHomepage = page.getByRole('button', { + name: 'Create a new pad', + }); + await buttonCreateHomepage.click(); + await expect(buttonCreateHomepage).toBeHidden(); + + const card = page.getByLabel('Create new pad card').first(); + + await card + .getByRole('button', { + name: 'Cancel', + }) + .click(); + + await expect(buttonCreateHomepage).toBeVisible(); + }); + + test('checks the routing on new pad created', async ({ + page, + browserName, + }) => { + const panel = page.getByLabel('Pads panel').first(); + + await panel.getByRole('button', { name: 'Add a pad' }).click(); + + const padName = `My routing pad ${browserName}-${Math.floor(Math.random() * 1000)}`; + await page.getByText('Pad name').fill(padName); + await page.getByRole('button', { name: 'Create the pad' }).click(); + + const elPad = page.getByText(`Members of “${padName}“`); + await expect(elPad).toBeVisible(); + + await panel.getByRole('button', { name: 'Add a pad' }).click(); + await expect(elPad).toBeHidden(); + + await panel.locator('li').getByText(padName).click(); + await expect(elPad).toBeVisible(); + }); + + test('checks alias pads url with homepage', async ({ page }) => { + await expect(page).toHaveURL('/'); + + const buttonCreateHomepage = page.getByRole('button', { + name: 'Create a new pad', + }); + + await expect(buttonCreateHomepage).toBeVisible(); + + await page.goto('/pads'); + await expect(buttonCreateHomepage).toBeVisible(); + await expect(page).toHaveURL(/\/pads$/); + }); + + test('checks error when duplicate pad', async ({ page, browserName }) => { + const panel = page.getByLabel('Pads panel').first(); + + await panel.getByRole('button', { name: 'Add a pad' }).click(); + + const padName = `My duplicate pad ${browserName}-${Math.floor(Math.random() * 1000)}`; + await page.getByText('Pad name').fill(padName); + await page.getByRole('button', { name: 'Create the pad' }).click(); + + await panel.getByRole('button', { name: 'Add a pad' }).click(); + + await page.getByText('Pad name').fill(padName); + await page.getByRole('button', { name: 'Create the pad' }).click(); + + await expect( + page.getByText('Pad with this Slug already exists.'), + ).toBeVisible(); + }); + + test('checks 404 on pads/[id] page', async ({ page }) => { + await page.goto('/pads/some-unknown-pad'); + await expect( + page.getByText( + 'It seems that the page you are looking for does not exist or cannot be displayed correctly.', + ), + ).toBeVisible({ + timeout: 15000, + }); + }); +}); diff --git a/src/frontend/apps/e2e/__tests__/app-desk/teams-panel.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/pad-panel.specWI.ts similarity index 72% rename from src/frontend/apps/e2e/__tests__/app-desk/teams-panel.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/pad-panel.specWI.ts index 6440fd37..a805be43 100644 --- a/src/frontend/apps/e2e/__tests__/app-desk/teams-panel.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/pad-panel.specWI.ts @@ -9,21 +9,21 @@ test.beforeEach(async ({ page, browserName }) => { await keyCloakSignIn(page, browserName); }); -test.describe('Teams Panel', () => { +test.describe('Pads Panel', () => { test('checks all the elements are visible', async ({ page }) => { - const panel = page.getByLabel('Teams panel').first(); + const panel = page.getByLabel('Pads panel').first(); await expect(panel.getByText('Recents')).toBeVisible(); await expect( panel.getByRole('button', { - name: 'Sort the teams', + name: 'Sort the pads', }), ).toBeVisible(); await expect( panel.getByRole('button', { - name: 'Add a team', + name: 'Add a pad', }), ).toBeVisible(); }); @@ -31,21 +31,21 @@ test.describe('Teams Panel', () => { test('checks the sort button', async ({ page }) => { const responsePromiseSortDesc = page.waitForResponse( (response) => - response.url().includes('/teams/?page=1&ordering=-created_at') && + response.url().includes('/pads/?page=1&ordering=-created_at') && response.status() === 200, ); const responsePromiseSortAsc = page.waitForResponse( (response) => - response.url().includes('/teams/?page=1&ordering=created_at') && + response.url().includes('/pads/?page=1&ordering=created_at') && response.status() === 200, ); - const panel = page.getByLabel('Teams panel').first(); + const panel = page.getByLabel('Pads panel').first(); await panel .getByRole('button', { - name: 'Sort the teams by creation date ascendent', + name: 'Sort the pads by creation date ascendent', }) .click(); @@ -54,7 +54,7 @@ test.describe('Teams Panel', () => { await panel .getByRole('button', { - name: 'Sort the teams by creation date descendent', + name: 'Sort the pads by creation date descendent', }) .click(); @@ -64,14 +64,9 @@ test.describe('Teams Panel', () => { test('checks the infinite scroll', async ({ page, browserName }) => { test.setTimeout(90000); - const panel = page.getByLabel('Teams panel').first(); + const panel = page.getByLabel('Pads panel').first(); - const randomTeams = await createTeam( - page, - 'team-infinite', - browserName, - 40, - ); + const randomTeams = await createTeam(page, 'pad-infinite', browserName, 40); await expect(panel.locator('li')).toHaveCount(20); await panel.getByText(randomTeams[24]).click(); @@ -81,8 +76,8 @@ test.describe('Teams Panel', () => { }); test('checks the hover and selected state', async ({ page, browserName }) => { - const panel = page.getByLabel('Teams panel').first(); - await createTeam(page, 'team-hover', browserName, 2); + const panel = page.getByLabel('Pads panel').first(); + await createTeam(page, 'pad-hover', browserName, 2); const selectedTeam = panel.locator('li').nth(0); await expect(selectedTeam).toHaveCSS( diff --git a/src/frontend/apps/e2e/__tests__/app-desk/team.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/pad.specWI.ts similarity index 100% rename from src/frontend/apps/e2e/__tests__/app-desk/team.spec.ts rename to src/frontend/apps/e2e/__tests__/app-impress/pad.specWI.ts diff --git a/src/frontend/apps/impress/src/i18n/translations.json b/src/frontend/apps/impress/src/i18n/translations.json index 18bf2be4..804d8a8d 100644 --- a/src/frontend/apps/impress/src/i18n/translations.json +++ b/src/frontend/apps/impress/src/i18n/translations.json @@ -29,7 +29,7 @@ "Contacts": "Contacts", "Content modal to delete the team": "Contenu modal pour supprimer le groupe", "Content modal to update the team": "Contenu modal pour mettre à jour le groupe", - "Create a new team": "Créer un nouveau groupe", + "Create a new pad": "Créer un nouveau pad", "Create new team card": "Carte créer une nouvelle équipe", "Create the team": "Créer le groupe", "Create your first team by clicking on the \"Create a new team\" button.": "Créez votre premier groupe en cliquant sur le bouton \"Créer un nouveau groupe\".",