✅(e2e) adapt tests to impress app
Adapt e2e test to works with Impress.
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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,
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
@@ -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();
|
||||
|
||||
127
src/frontend/apps/e2e/__tests__/app-impress/pad-create.specWI.ts
Normal file
127
src/frontend/apps/e2e/__tests__/app-impress/pad-create.specWI.ts
Normal file
@@ -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,
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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(
|
||||
@@ -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\".",
|
||||
|
||||
Reference in New Issue
Block a user