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, + }, }, ];