From 7916f7d7d0b2154a684381ebd89ddcab46593842 Mon Sep 17 00:00:00 2001 From: daproclaima Date: Wed, 7 Aug 2024 18:00:53 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20show=20names=20in=20mailb?= =?UTF-8?q?ox=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - show a concatenation of first and last names for each row in mailbox table - update related e2e tests --- .../components/MailDomainsContent.tsx | 28 +++++++++++++++++-- .../desk/src/features/mail-domains/types.tsx | 2 ++ .../__tests__/app-desk/mail-domain.spec.ts | 14 ++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) 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 b66aa66..f43f8a0 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 @@ -1,3 +1,5 @@ +import { UUID } from 'crypto'; + import { Button, DataGrid, @@ -17,7 +19,11 @@ import { MailDomain, MailDomainMailbox } from '../types'; import { CreateMailboxForm } from './forms/CreateMailboxForm'; -export type ViewMailbox = { email: string; id: string }; +export type ViewMailbox = { + name: string; + email: string; + id: UUID; +}; // FIXME : ask Cunningham to export this type type SortModelItem = { @@ -69,6 +75,7 @@ export function MailDomainsContent({ mailDomain }: { mailDomain: MailDomain }) { mailDomain && data?.results?.length ? data.results.map((mailbox: MailDomainMailbox) => ({ email: `${mailbox.local_part}@${mailDomain.name}`, + name: `${mailbox.first_name} ${mailbox.last_name}`, id: mailbox.id, })) : []; @@ -76,6 +83,7 @@ export function MailDomainsContent({ mailDomain }: { mailDomain: MailDomain }) { useEffect(() => { setPagesCount(data?.count ? Math.ceil(data.count / pageSize) : 0); }, [data?.count, pageSize, setPagesCount]); + return isLoading ? ( @@ -88,19 +96,35 @@ export function MailDomainsContent({ mailDomain }: { mailDomain: MailDomain }) { closeModal={() => setIsCreateMailboxFormVisible(false)} /> ) : null} + + {error && } + ( + + {row.name} + + ), + }, { field: 'email', headerName: t('Emails'), 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 c22c2ed..1b064ba 100644 --- a/src/frontend/apps/desk/src/features/mail-domains/types.tsx +++ b/src/frontend/apps/desk/src/features/mail-domains/types.tsx @@ -19,5 +19,7 @@ export interface MailDomain { export interface MailDomainMailbox { id: UUID; local_part: string; + first_name: string; + last_name: string; secondary_email: string; } 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 1a26ab4..20f78cf 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 @@ -163,11 +163,15 @@ test.describe('Mail domain', () => { domainFr: { page1: Array.from({ length: 20 }, (_, i) => ({ id: `456ac6ca-0402-4615-8005-69bc1efde${i}f`, + first_name: 'john', + last_name: 'doe', local_part: `local_part-${i}`, secondary_email: `secondary_email-${i}`, })), page2: Array.from({ length: 2 }, (_, i) => ({ id: `456ac6ca-0402-4615-8005-69bc1efde${i}d`, + first_name: 'john', + last_name: 'doe', local_part: `local_part-${i}`, secondary_email: `secondary_email-${i}`, })), @@ -235,6 +239,10 @@ test.describe('Mail domain', () => { page.getByRole('heading', { name: 'domain.fr' }), ).toBeVisible(); + await expect( + page.getByRole('button', { name: /Names/ }).first(), + ).toBeVisible(); + await expect( page.getByRole('button', { name: /Emails/ }).first(), ).toBeVisible(); @@ -249,6 +257,12 @@ test.describe('Mail domain', () => { ), ); + const table = page.locator('table'); + await expect(table).toBeVisible(); + + const tdNames = await table.getByText('John Doe').all(); + expect(tdNames.length).toEqual(20); + await expect( page.locator('.c__pagination__list').getByRole('button', { name: '1' }), ).toBeVisible();