Add or invite a user to a doc. If the user is already in the system, the user will be added to the doc, otherwise, the user will be invited to the doc.
200 lines
7.0 KiB
TypeScript
200 lines
7.0 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
|
|
import { createPad, keyCloakSignIn, randomName } from './common';
|
|
|
|
test.beforeEach(async ({ page, browserName }) => {
|
|
await page.goto('/');
|
|
await keyCloakSignIn(page, browserName);
|
|
});
|
|
|
|
test.describe('Document add users', () => {
|
|
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 createPad(page, 'select-multi-users', browserName, 1);
|
|
|
|
await page.getByLabel('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
const inputSearch = page.getByLabel(/Find a user to add to the document/);
|
|
await expect(inputSearch).toBeVisible();
|
|
|
|
// Select user 1
|
|
await inputSearch.fill('user');
|
|
|
|
const response = await responsePromise;
|
|
const users = (await response.json()).results as {
|
|
email: string;
|
|
}[];
|
|
|
|
await page.getByRole('option', { name: users[0].email }).click();
|
|
|
|
// Select user 2
|
|
await inputSearch.fill('user');
|
|
await page.getByRole('option', { name: users[1].email }).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].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();
|
|
|
|
// Check roles are displayed
|
|
await expect(page.getByText(/Choose a role/)).toBeVisible();
|
|
await expect(page.getByRole('radio', { name: 'Reader' })).toBeChecked();
|
|
await expect(page.getByRole('radio', { name: 'Owner' })).toBeVisible();
|
|
await expect(
|
|
page.getByRole('radio', { name: 'Administrator' }),
|
|
).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 createPad(page, 'user-invitation', browserName, 1);
|
|
|
|
await page.getByLabel('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
const inputSearch = page.getByLabel(/Find a user 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 users = (await responseSearchUser.json()).results as {
|
|
email: string;
|
|
}[];
|
|
await page.getByRole('option', { name: users[0].email }).click();
|
|
|
|
// Choose a role
|
|
await page.getByRole('radio', { name: 'Administrator' }).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();
|
|
|
|
// Check user added
|
|
await expect(page.getByText(`User added to the document.`)).toBeVisible();
|
|
const responseAddUser = await responsePromiseAddUser;
|
|
expect(responseAddUser.ok()).toBeTruthy();
|
|
});
|
|
|
|
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 createPad(page, 'user-twice', browserName, 1);
|
|
|
|
await page.getByLabel('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
const inputSearch = page.getByLabel(/Find a user to add to the document/);
|
|
await inputSearch.fill('user');
|
|
const responseSearchUser = await responsePromiseSearchUser;
|
|
const users = (await responseSearchUser.json()).results as {
|
|
email: string;
|
|
}[];
|
|
await page.getByRole('option', { name: users[0].email }).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(`User added to the document.`)).toBeVisible();
|
|
const responseAddMember = await responsePromiseAddMember;
|
|
expect(responseAddMember.ok()).toBeTruthy();
|
|
|
|
await page.getByLabel('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
await inputSearch.fill('user');
|
|
await expect(
|
|
page.getByRole('option', { name: users[0].email }),
|
|
).toBeHidden();
|
|
});
|
|
|
|
test('it try to add twice the same invitation', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
await createPad(page, 'invitation-twice', browserName, 1);
|
|
|
|
await page.getByLabel('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
const inputSearch = page.getByLabel(/Find a user 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();
|
|
|
|
// 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('Open the document options').click();
|
|
await page.getByRole('button', { name: 'Add a user' }).click();
|
|
|
|
await inputSearch.fill(email);
|
|
await expect(page.getByRole('option', { name: email })).toBeHidden();
|
|
});
|
|
});
|