2024-04-08 14:35:12 +02:00
|
|
|
import { expect, test } from '@playwright/test';
|
2024-09-23 12:15:04 +02:00
|
|
|
import { MailDomain } from 'app-desk/src/features/mail-domains/domains';
|
2024-04-08 14:35:12 +02:00
|
|
|
|
|
|
|
|
import { keyCloakSignIn } from './common';
|
|
|
|
|
|
2024-05-02 12:30:52 +02:00
|
|
|
const currentDateIso = new Date().toISOString();
|
|
|
|
|
const mailDomainsFixtures: MailDomain[] = [
|
|
|
|
|
{
|
|
|
|
|
name: 'domain.fr',
|
|
|
|
|
id: '456ac6ca-0402-4615-8005-69bc1efde43f',
|
|
|
|
|
created_at: currentDateIso,
|
|
|
|
|
updated_at: currentDateIso,
|
2024-06-18 16:06:55 +02:00
|
|
|
slug: 'domainfr',
|
2024-08-14 17:43:10 +02:00
|
|
|
status: 'pending',
|
2024-08-07 15:58:05 +02:00
|
|
|
abilities: {
|
|
|
|
|
get: true,
|
|
|
|
|
patch: true,
|
|
|
|
|
put: true,
|
|
|
|
|
post: true,
|
|
|
|
|
delete: true,
|
|
|
|
|
manage_accesses: true,
|
|
|
|
|
},
|
2024-05-02 12:30:52 +02:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: 'mails.fr',
|
|
|
|
|
id: '456ac6ca-0402-4615-8005-69bc1efde43e',
|
|
|
|
|
created_at: currentDateIso,
|
|
|
|
|
updated_at: currentDateIso,
|
2024-06-18 16:06:55 +02:00
|
|
|
slug: 'mailsfr',
|
2024-08-14 17:43:10 +02:00
|
|
|
status: 'enabled',
|
2024-08-07 15:58:05 +02:00
|
|
|
abilities: {
|
|
|
|
|
get: true,
|
|
|
|
|
patch: true,
|
|
|
|
|
put: true,
|
|
|
|
|
post: true,
|
|
|
|
|
delete: true,
|
|
|
|
|
manage_accesses: true,
|
|
|
|
|
},
|
2024-05-02 12:30:52 +02:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: 'versailles.net',
|
|
|
|
|
id: '456ac6ca-0402-4615-8005-69bc1efde43g',
|
|
|
|
|
created_at: currentDateIso,
|
|
|
|
|
updated_at: currentDateIso,
|
2024-06-18 16:06:55 +02:00
|
|
|
slug: 'versaillesnet',
|
2024-08-14 17:43:10 +02:00
|
|
|
status: 'disabled',
|
2024-08-07 15:58:05 +02:00
|
|
|
abilities: {
|
|
|
|
|
get: true,
|
|
|
|
|
patch: true,
|
|
|
|
|
put: true,
|
|
|
|
|
post: true,
|
|
|
|
|
delete: true,
|
|
|
|
|
manage_accesses: true,
|
|
|
|
|
},
|
2024-05-02 12:30:52 +02:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: 'paris.fr',
|
|
|
|
|
id: '456ac6ca-0402-4615-8005-69bc1efde43h',
|
|
|
|
|
created_at: currentDateIso,
|
|
|
|
|
updated_at: currentDateIso,
|
2024-06-18 16:06:55 +02:00
|
|
|
slug: 'parisfr',
|
2024-08-14 17:43:10 +02:00
|
|
|
status: 'failed',
|
2024-08-07 15:58:05 +02:00
|
|
|
abilities: {
|
|
|
|
|
get: true,
|
|
|
|
|
patch: true,
|
|
|
|
|
put: true,
|
|
|
|
|
post: true,
|
|
|
|
|
delete: true,
|
|
|
|
|
manage_accesses: true,
|
|
|
|
|
},
|
2024-05-02 12:30:52 +02:00
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
2024-05-13 15:21:13 +02:00
|
|
|
test.describe('Mail domains', () => {
|
2024-05-02 12:30:52 +02:00
|
|
|
test.describe('checks all the elements are visible', () => {
|
|
|
|
|
test.beforeEach(async ({ page, browserName }) => {
|
|
|
|
|
await page.goto('/');
|
2024-12-06 16:47:28 +01:00
|
|
|
// The user is a team administrator, so they land on the team page
|
|
|
|
|
// This allows to prevent the redirection to the mail domains page
|
|
|
|
|
// to make the '/api/v1.0/mail-domains/?page=1&ordering=created_at'
|
|
|
|
|
// query at login, which will be cached and not called afterward in tests.
|
|
|
|
|
await keyCloakSignIn(page, browserName, 'team-administrator-mail-member');
|
2024-05-02 12:30:52 +02:00
|
|
|
});
|
|
|
|
|
|
2024-05-13 15:21:13 +02:00
|
|
|
test('checks the sort button', async ({ page }) => {
|
|
|
|
|
await page
|
|
|
|
|
.locator('menu')
|
|
|
|
|
.first()
|
|
|
|
|
.getByLabel(`Mail Domains button`)
|
|
|
|
|
.click();
|
|
|
|
|
|
2024-03-26 12:45:10 +01:00
|
|
|
await expect(page).toHaveURL(/mail-domains\//);
|
2024-05-13 15:21:13 +02:00
|
|
|
|
|
|
|
|
const responsePromiseSortDesc = page.waitForResponse(
|
|
|
|
|
(response) =>
|
|
|
|
|
response
|
|
|
|
|
.url()
|
|
|
|
|
.includes('/mail-domains/?page=1&ordering=-created_at') &&
|
|
|
|
|
response.status() === 200,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const responsePromiseSortAsc = page.waitForResponse(
|
|
|
|
|
(response) =>
|
|
|
|
|
response
|
|
|
|
|
.url()
|
|
|
|
|
.includes('/mail-domains/?page=1&ordering=created_at') &&
|
|
|
|
|
response.status() === 200,
|
|
|
|
|
);
|
|
|
|
|
|
2024-08-14 17:43:10 +02:00
|
|
|
const panel = page.getByLabel('Mail domains panel').first();
|
2024-05-13 15:21:13 +02:00
|
|
|
|
|
|
|
|
await panel
|
|
|
|
|
.getByRole('button', {
|
|
|
|
|
name: 'Sort the domain names by creation date ascendent',
|
|
|
|
|
})
|
|
|
|
|
.click();
|
|
|
|
|
|
|
|
|
|
const responseSortAsc = await responsePromiseSortAsc;
|
|
|
|
|
expect(responseSortAsc.ok()).toBeTruthy();
|
|
|
|
|
|
|
|
|
|
await panel
|
|
|
|
|
.getByRole('button', {
|
|
|
|
|
name: 'Sort the domain names by creation date descendent',
|
|
|
|
|
})
|
|
|
|
|
.click();
|
|
|
|
|
|
|
|
|
|
const responseSortDesc = await responsePromiseSortDesc;
|
|
|
|
|
expect(responseSortDesc.ok()).toBeTruthy();
|
|
|
|
|
});
|
|
|
|
|
|
2024-05-02 12:30:52 +02:00
|
|
|
test('when no mail domain exists', async ({ page }) => {
|
|
|
|
|
await page.route('**/api/v1.0/mail-domains/?page=*', async (route) => {
|
|
|
|
|
await route.fulfill({
|
|
|
|
|
json: {
|
|
|
|
|
count: 0,
|
|
|
|
|
next: null,
|
|
|
|
|
previous: null,
|
|
|
|
|
results: [],
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
await page
|
|
|
|
|
.locator('menu')
|
|
|
|
|
.first()
|
|
|
|
|
.getByLabel(`Mail Domains button`)
|
|
|
|
|
.click();
|
2024-03-26 12:45:10 +01:00
|
|
|
await expect(page).toHaveURL(/mail-domains\//);
|
2024-05-02 12:30:52 +02:00
|
|
|
await expect(
|
2024-08-14 17:43:10 +02:00
|
|
|
page.getByLabel('Mail domains panel', { exact: true }),
|
2024-05-02 12:30:52 +02:00
|
|
|
).toBeVisible();
|
2024-08-09 16:23:29 +02:00
|
|
|
await expect(page.getByText('No domains exist.')).toBeVisible();
|
2024-05-02 12:30:52 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('when 4 mail domains exist', async ({ page }) => {
|
|
|
|
|
await page.route('**/api/v1.0/mail-domains/?page=*', async (route) => {
|
|
|
|
|
await route.fulfill({
|
|
|
|
|
json: {
|
|
|
|
|
count: mailDomainsFixtures.length,
|
|
|
|
|
next: null,
|
|
|
|
|
previous: null,
|
|
|
|
|
results: mailDomainsFixtures,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
});
|
2024-04-08 14:35:12 +02:00
|
|
|
|
2024-05-02 12:30:52 +02:00
|
|
|
await page
|
|
|
|
|
.locator('menu')
|
|
|
|
|
.first()
|
|
|
|
|
.getByLabel(`Mail Domains button`)
|
|
|
|
|
.click();
|
2024-03-26 12:45:10 +01:00
|
|
|
await expect(page).toHaveURL(/mail-domains\//);
|
2024-05-02 12:30:52 +02:00
|
|
|
await expect(
|
2024-08-14 17:43:10 +02:00
|
|
|
page.getByLabel('Mail domains panel', { exact: true }),
|
2024-05-02 12:30:52 +02:00
|
|
|
).toBeVisible();
|
2024-08-09 16:23:29 +02:00
|
|
|
await expect(page.getByText('No domains exist.')).toHaveCount(0);
|
2024-08-14 17:43:10 +02:00
|
|
|
|
|
|
|
|
await Promise.all(
|
|
|
|
|
mailDomainsFixtures.map(async ({ name, status }) => {
|
|
|
|
|
const linkName = page.getByRole('link', { name });
|
|
|
|
|
await expect(linkName).toBeVisible();
|
|
|
|
|
await expect(linkName.getByText(`[${status}]`)).toBeVisible();
|
|
|
|
|
}),
|
|
|
|
|
);
|
2024-05-02 12:30:52 +02:00
|
|
|
});
|
2024-04-08 14:35:12 +02:00
|
|
|
});
|
|
|
|
|
});
|