- rename CreateMailboxForm into ModalCreateMailbox, and useCreateMailDomain into useAddMailDomain - use useAPIError hook in ModalCreateMailbox.tsx and ModalAddMailDomain - update translations and tests (include removal of e2e test able to be asserted by component tests)
147 lines
3.7 KiB
TypeScript
147 lines
3.7 KiB
TypeScript
import { Page, expect, test } from '@playwright/test';
|
|
|
|
import { keyCloakSignIn, randomName } from './common';
|
|
|
|
const getElements = (page: Page) => {
|
|
const panel = page.getByLabel('Mail domains panel').first();
|
|
const linkIndexPageAddDomain = page.getByRole('link', {
|
|
name: 'Add a mail domain',
|
|
});
|
|
const form = page.locator('form');
|
|
const inputName = form.getByLabel('Domain name');
|
|
const buttonSubmit = page.getByRole('button', {
|
|
name: 'Add the domain',
|
|
});
|
|
|
|
const buttonCancel = page.getByRole('button', {
|
|
name: 'Cancel',
|
|
});
|
|
|
|
return {
|
|
panel,
|
|
linkIndexPageAddDomain,
|
|
form,
|
|
inputName,
|
|
buttonCancel,
|
|
buttonSubmit,
|
|
};
|
|
};
|
|
|
|
test.beforeEach(async ({ page, browserName }) => {
|
|
await page.goto('/');
|
|
await keyCloakSignIn(page, browserName);
|
|
});
|
|
|
|
test.describe('Add Mail Domains', () => {
|
|
test('checks all the elements are visible', async ({ page }) => {
|
|
await page.goto('/mail-domains/');
|
|
|
|
const { linkIndexPageAddDomain, inputName } = getElements(page);
|
|
|
|
await expect(linkIndexPageAddDomain).toBeVisible();
|
|
await linkIndexPageAddDomain.click();
|
|
|
|
await expect(linkIndexPageAddDomain).toBeHidden();
|
|
|
|
await expect(
|
|
page.getByRole('heading', {
|
|
name: 'Add a mail domain',
|
|
level: 3,
|
|
}),
|
|
).toBeVisible();
|
|
|
|
await expect(inputName).toBeVisible();
|
|
|
|
await expect(page.getByText('Example: saint-laurent.fr')).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole('button', {
|
|
name: 'Add the domain',
|
|
}),
|
|
).toBeVisible();
|
|
await expect(
|
|
page.getByRole('button', {
|
|
name: 'Cancel',
|
|
}),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test('checks the cancel button interaction', async ({ page }) => {
|
|
await page.goto('/mail-domains/');
|
|
|
|
const { linkIndexPageAddDomain, buttonCancel } = getElements(page);
|
|
|
|
await linkIndexPageAddDomain.click();
|
|
await buttonCancel.click();
|
|
|
|
await expect(buttonCancel).toBeHidden();
|
|
|
|
await expect(linkIndexPageAddDomain).toBeVisible();
|
|
});
|
|
|
|
test('checks form invalid status', async ({ page }) => {
|
|
await page.goto('/mail-domains/');
|
|
|
|
const { linkIndexPageAddDomain, inputName, buttonSubmit } =
|
|
getElements(page);
|
|
|
|
await linkIndexPageAddDomain.click();
|
|
|
|
await expect(inputName).toBeVisible();
|
|
await expect(page.getByText('Example: saint-laurent.fr')).toBeVisible();
|
|
|
|
await expect(
|
|
page.getByRole('button', {
|
|
name: 'Cancel',
|
|
}),
|
|
).toBeEnabled();
|
|
|
|
await expect(buttonSubmit).toBeDisabled();
|
|
|
|
await inputName.fill('s');
|
|
await expect(page.getByText('Example: saint-laurent.fr')).toBeVisible();
|
|
|
|
await inputName.clear();
|
|
|
|
await expect(page.getByText('Example: saint-laurent.fr')).toBeVisible();
|
|
});
|
|
|
|
test('checks the routing on new mail domain added', async ({
|
|
page,
|
|
browserName,
|
|
}) => {
|
|
const mailDomainName = randomName('versailles.fr', browserName, 1)[0];
|
|
const mailDomainSlug = mailDomainName.replace('.', '');
|
|
|
|
await page.goto('/mail-domains/');
|
|
|
|
const { linkIndexPageAddDomain, inputName, buttonSubmit } =
|
|
getElements(page);
|
|
|
|
await linkIndexPageAddDomain.click();
|
|
|
|
await inputName.fill(mailDomainName);
|
|
await buttonSubmit.click();
|
|
|
|
await expect(page).toHaveURL(`/mail-domains/${mailDomainSlug}/`);
|
|
|
|
await expect(
|
|
page.getByRole('heading', {
|
|
name: mailDomainName,
|
|
}),
|
|
).toBeVisible();
|
|
});
|
|
|
|
test('checks 404 on mail-domains/[slug] page', async ({ page }) => {
|
|
await page.goto('/mail-domains/unknown-domain');
|
|
|
|
await expect(
|
|
page.getByText(
|
|
'It seems that the page you are looking for does not exist or cannot be displayed correctly.',
|
|
),
|
|
).toBeVisible({
|
|
timeout: 15000,
|
|
});
|
|
});
|
|
});
|