diff --git a/src/frontend/apps/desk/src/features/mail-domains/components/MailDomainsContent.tsx b/src/frontend/apps/desk/src/features/mail-domains/components/MailDomainsContent.tsx
index 07a8179..b66aa66 100644
--- a/src/frontend/apps/desk/src/features/mail-domains/components/MailDomainsContent.tsx
+++ b/src/frontend/apps/desk/src/features/mail-domains/components/MailDomainsContent.tsx
@@ -91,6 +91,7 @@ export function MailDomainsContent({ mailDomain }: { mailDomain: MailDomain }) {
void;
+ abilities: MailDomain['abilities'];
}) => {
const { t } = useTranslation();
@@ -147,12 +150,14 @@ const TopBanner = ({
-
+ {abilities.post ? (
+
+ ) : null}
>
);
diff --git a/src/frontend/apps/desk/src/features/mail-domains/types.tsx b/src/frontend/apps/desk/src/features/mail-domains/types.tsx
index 69b4976..c22c2ed 100644
--- a/src/frontend/apps/desk/src/features/mail-domains/types.tsx
+++ b/src/frontend/apps/desk/src/features/mail-domains/types.tsx
@@ -6,6 +6,14 @@ export interface MailDomain {
created_at: string;
updated_at: string;
slug: string;
+ abilities: {
+ get: boolean;
+ patch: boolean;
+ put: boolean;
+ post: boolean;
+ delete: boolean;
+ manage_accesses: boolean;
+ };
}
export interface MailDomainMailbox {
diff --git a/src/frontend/apps/e2e/__tests__/app-desk/mail-domain-create-mailbox.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/mail-domain-create-mailbox.spec.ts
index 4246c6f..9393565 100644
--- a/src/frontend/apps/e2e/__tests__/app-desk/mail-domain-create-mailbox.spec.ts
+++ b/src/frontend/apps/e2e/__tests__/app-desk/mail-domain-create-mailbox.spec.ts
@@ -15,6 +15,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'domainfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'mails.fr',
@@ -22,6 +30,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'mailsfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'versailles.net',
@@ -29,6 +45,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'versaillesnet',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'paris.fr',
@@ -36,6 +60,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'parisfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
];
@@ -99,8 +131,7 @@ test.describe('Mail domain create mailbox', () => {
await keyCloakSignIn(page, browserName);
});
- // user should have administrator or owner role on this domain to be able perform this action
- test('checks user can create a mailbox for a mail domain', async ({
+ test('checks user can create a mailbox when he has post ability', async ({
page,
}) => {
const newMailbox = {
@@ -224,6 +255,62 @@ test.describe('Mail domain create mailbox', () => {
);
});
+ test('checks user is not allowed to create a mailbox when he is missing post ability', async ({
+ page,
+ }) => {
+ const localMailDomainsFixtures = [...mailDomainsFixtures];
+ localMailDomainsFixtures[0].abilities.post = false;
+ const localMailDomainDomainFr = localMailDomainsFixtures[0];
+ const localMailboxFixtures = { ...mailboxesFixtures };
+
+ const interceptRequests = (page: Page) => {
+ void page.route('**/api/v1.0/mail-domains/?page=*', (route) => {
+ void route.fulfill({
+ json: {
+ count: localMailDomainsFixtures.length,
+ next: null,
+ previous: null,
+ results: localMailDomainsFixtures,
+ },
+ });
+ });
+
+ void page.route('**/api/v1.0/mail-domains/domainfr', (route) => {
+ void route.fulfill({
+ json: localMailDomainDomainFr,
+ });
+ });
+
+ void page.route(
+ '**/api/v1.0/mail-domains/domainfr/mailboxes/?page=1**',
+ (route) => {
+ void route.fulfill({
+ json: {
+ count: localMailboxFixtures.domainFr.page1.length,
+ next: null,
+ previous: null,
+ results: localMailboxFixtures.domainFr.page1,
+ },
+ });
+ },
+ { times: 1 },
+ );
+ };
+
+ void interceptRequests(page);
+
+ await page
+ .locator('menu')
+ .first()
+ .getByLabel(`Mail Domains button`)
+ .click();
+ await page.getByRole('listbox').first().getByText('domain.fr').click();
+
+ await expect(
+ page.getByRole('button', { name: 'Create a mailbox' }),
+ ).not.toBeInViewport();
+ });
+
test('checks client invalidation messages are displayed and no mailbox creation request is sent when fields are not properly filled', async ({
page,
}) => {
diff --git a/src/frontend/apps/e2e/__tests__/app-desk/mail-domain.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/mail-domain.spec.ts
index 439a524..1a26ab4 100644
--- a/src/frontend/apps/e2e/__tests__/app-desk/mail-domain.spec.ts
+++ b/src/frontend/apps/e2e/__tests__/app-desk/mail-domain.spec.ts
@@ -12,6 +12,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'domainfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'mails.fr',
@@ -19,6 +27,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'mailsfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'versailles.net',
@@ -26,6 +42,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'versaillesnet',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'paris.fr',
@@ -33,6 +57,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'parisfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
];
diff --git a/src/frontend/apps/e2e/__tests__/app-desk/mail-domains.spec.ts b/src/frontend/apps/e2e/__tests__/app-desk/mail-domains.spec.ts
index 0f8707c..6c0abab 100644
--- a/src/frontend/apps/e2e/__tests__/app-desk/mail-domains.spec.ts
+++ b/src/frontend/apps/e2e/__tests__/app-desk/mail-domains.spec.ts
@@ -11,6 +11,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'domainfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'mails.fr',
@@ -18,6 +26,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'mailsfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'versailles.net',
@@ -25,6 +41,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'versaillesnet',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
{
name: 'paris.fr',
@@ -32,6 +56,14 @@ const mailDomainsFixtures: MailDomain[] = [
created_at: currentDateIso,
updated_at: currentDateIso,
slug: 'parisfr',
+ abilities: {
+ get: true,
+ patch: true,
+ put: true,
+ post: true,
+ delete: true,
+ manage_accesses: true,
+ },
},
];