diff --git a/clients/firebase.client.ts b/clients/firebase.client.ts index ea0015223..a926160e7 100644 --- a/clients/firebase.client.ts +++ b/clients/firebase.client.ts @@ -29,9 +29,9 @@ import { import { DateTime } from 'luxon' import { apiGet } from 'clients/api.client' +import { Chat } from 'interfaces/beneficiaire' import { UserType } from 'interfaces/conseiller' import { InfoFichier } from 'interfaces/fichier' -import { Chat } from 'interfaces/beneficiaire' import { InfoOffre, Message, @@ -429,7 +429,7 @@ export function observeDerniersMessagesDuChat( ), (querySnapshot: QuerySnapshot) => { const messages: Message[] = querySnapshot.docs.map(docSnapshotToMessage) - if (messages.length && !messages[messages.length - 1].creationDate) { + if (messages.length && !messages.at(-1)!.creationDate) { return } diff --git a/components/chat/Conversation.tsx b/components/chat/Conversation.tsx index f1904b2b7..7b5507f58 100644 --- a/components/chat/Conversation.tsx +++ b/components/chat/Conversation.tsx @@ -25,10 +25,10 @@ import { BeneficiaireEtChat } from 'interfaces/beneficiaire' import { InfoFichier } from 'interfaces/fichier' import { ByDay, - countItems, fromConseiller, getPreviousItemId, Message, + OfDay, } from 'interfaces/message' import { FormNouveauMessageIndividuel, @@ -82,7 +82,7 @@ export function Conversation({ Message | undefined >() - const [messagesByDay, setMessagesByDay] = useState[]>() + const [messagesByDay, setMessagesByDay] = useState>() const [uploadedFileInfo, setUploadedFileInfo] = useState< InfoFichier | undefined >(undefined) @@ -115,21 +115,12 @@ export function Conversation({ idChatToObserve, chatCredentials.cleChiffrement, { pages: nombreDePages, taillePage: NB_MESSAGES_PAR_PAGE }, - (messagesGroupesParJour: ByDay[]) => { - setMessagesByDay((previousValue) => { - if ( - !messagesGroupesParJour.length || - countItems(messagesGroupesParJour) < NB_MESSAGES_PAR_PAGE || - (previousValue?.length && - countItems(messagesGroupesParJour) - countItems(previousValue) < - NB_MESSAGES_PAR_PAGE) - ) { - setHasNoMoreMessages(true) - } - - return messagesGroupesParJour - }) + (messagesGroupesParJour: ByDay) => { + setMessagesByDay(messagesGroupesParJour) setNombrePagesChargees(nombreDePages) + setHasNoMoreMessages( + messagesGroupesParJour.length < nombreDePages * NB_MESSAGES_PAR_PAGE + ) setLoadingMoreMessages(false) @@ -181,7 +172,7 @@ export function Conversation({ function chargerPlusDeMessages() { const pageSuivante = nombrePagesChargees! + 1 setLoadingMoreMessages(true) - idPrecedentPremierMessage.current = messagesByDay![0].messages[0].id + idPrecedentPremierMessage.current = messagesByDay!.days[0].messages[0].id unsubscribeFromMessages.current() unsubscribeFromMessages.current = observerMessages( @@ -485,50 +476,55 @@ export function Conversation({ {messagesByDay.length > 0 && (
    - {messagesByDay.map((messagesOfADay: ByDay) => ( -
  • -
    -

    {displayDate(messagesOfADay.date)}

    -
    - -
      - {messagesOfADay.messages.map((message: Message) => ( - - {!fromConseiller(message) && ( - - )} - - {fromConseiller(message) && ( - - supprimerMessage(message) - } - onModification={() => - preparerModificationMessage(message) - } - isEnCoursDeModification={ - message.id === messageAModifier?.id - } - /> - )} - - ))} -
    -
  • - ))} + {messagesByDay.days.map( + (messagesOfADay: OfDay) => ( +
  • +
    +

    {displayDate(messagesOfADay.date)}

    +
    + +
      + {messagesOfADay.messages.map((message: Message) => ( + + {!fromConseiller(message) && ( + + )} + + {fromConseiller(message) && ( + + supprimerMessage(message) + } + onModification={() => + preparerModificationMessage(message) + } + isEnCoursDeModification={ + message.id === messageAModifier?.id + } + /> + )} + + ))} +
    +
  • + ) + )}
)} diff --git a/components/chat/DetailMessageListeDeDiffusion.tsx b/components/chat/DetailMessageListeDeDiffusion.tsx index 0a66f5011..c1188475d 100644 --- a/components/chat/DetailMessageListeDeDiffusion.tsx +++ b/components/chat/DetailMessageListeDeDiffusion.tsx @@ -33,10 +33,7 @@ function DetailMessageListeDeDiffusion( ref: ForwardedRef<{ focusRetour: () => void }> ) { useImperativeHandle(ref, () => ({ - focusRetour: () => { - console.log('>>>', 'DETAIL FOCUS RETOUR') - headerRef.current!.focusRetour() - }, + focusRetour: () => headerRef.current!.focusRetour(), })) const isFirstRender = useRef(true) diff --git a/components/chat/MessagesListeDeDiffusion.tsx b/components/chat/MessagesListeDeDiffusion.tsx index 23a902507..f4c7d796e 100644 --- a/components/chat/MessagesListeDeDiffusion.tsx +++ b/components/chat/MessagesListeDeDiffusion.tsx @@ -17,7 +17,7 @@ import ButtonLink from 'components/ui/Button/ButtonLink' import IconComponent, { IconName } from 'components/ui/IconComponent' import SpinningLoader from 'components/ui/SpinningLoader' import { ListeDeDiffusion } from 'interfaces/liste-de-diffusion' -import { ByDay, MessageListeDiffusion } from 'interfaces/message' +import { ByDay, MessageListeDiffusion, OfDay } from 'interfaces/message' import { getMessagesListeDeDiffusion } from 'services/messages.service' import { useChatCredentials } from 'utils/chat/chatCredentialsContext' import { dateIsToday, toShortDate } from 'utils/date' @@ -51,7 +51,7 @@ function MessagesListeDeDiffusion( const headerRef = useRef<{ focusRetour: () => void }>(null) const containerRef = useRef(null) - const [messages, setMessages] = useState[]>() + const [messages, setMessages] = useState>() const [messagerieEstVisible, setMessagerieEstVisible] = useState(true) const [idMessageAFocus, setIdMessageAFocus] = useState() @@ -151,8 +151,8 @@ function MessagesListeDeDiffusion( className='h-full min-h-0 p-4 overflow-y-auto' aria-describedby='description-messages' > - {messages.map( - (messagesOfADay: ByDay, i) => ( + {messages.days.map( + (messagesOfADay: OfDay, i) => (
  • [ }), ] -export const desMessagesParJour = (): ByDay[] => [ - { - date: DateTime.local(2021, 12, 22), - messages: [ - unMessage({ - id: 'message-1', - content: 'Decrypted: Message du 22/12/2021', - creationDate: DateTime.local(2021, 12, 22), - }), - ], - }, - { - date: DateTime.local(2022, 1, 10), - messages: [ - unMessage({ - id: 'message-2', - content: 'Decrypted: Message du 10/1/2022', - creationDate: DateTime.local(2022, 1, 10), - conseillerId: 'conseiller-2', - }), - ], - }, - { - date: DateTime.local(2022, 1, 13, 9), - messages: [ - unMessage({ - id: 'message-3', - content: 'Decrypted: Message du 13/1/2022 9h', - creationDate: DateTime.local(2022, 1, 13, 9), - conseillerId: 'conseiller-3', - }), - unMessage({ - id: 'message-4', - content: 'Decrypted: Message du 13/1/2022 10h', - creationDate: DateTime.local(2022, 1, 13, 10), - }), - ], - }, - { - date: DateTime.local(2022, 1, 15), - messages: [ - unMessage({ - id: 'message-6', - content: 'Decrypted: Je vous partage cette offre', - creationDate: DateTime.local(2022, 1, 15), - type: TypeMessage.MESSAGE_OFFRE, - infoOffre: { - id: 'id-offre', - titre: 'Une offre', - type: TypeOffre.EMPLOI, - }, - }), - ], - }, - { - date: DateTime.local(2022, 1, 16), - messages: [ - unMessage({ - id: 'message-lien-1', - content: - 'Decrypted: Message du 16/1/2022 avec un lien https://www.pass-emploi.com/', - creationDate: DateTime.local(2022, 1, 16), - conseillerId: 'conseiller-2', - }), - ], - }, - { - date: DateTime.local(2022, 1, 17), - messages: [ - unMessage({ - id: 'message-7', - content: 'Decrypted: Je vous partage cet événement', - creationDate: DateTime.local(2022, 1, 17), - type: TypeMessage.MESSAGE_EVENEMENT, - infoEvenement: { - id: 'id-evenement', - titre: 'Un atelier', - date: DateTime.fromISO('2021-12-22T00:00:00.000Z'), - }, - }), - unMessage({ - id: 'message-8', - content: - 'Decrypted: Bonjour, je vous partage un événement afin d’avoir votre avis', - creationDate: DateTime.local(2022, 1, 17), - type: TypeMessage.MESSAGE_EVENEMENT_EMPLOI, - infoEvenementEmploi: { - id: 'id-evenement-emploi', - titre: 'Un événement emploi', - url: 'https://www.lala.com', - }, - }), - unMessage({ - id: 'message-9', - content: - 'Decrypted: Bonjour, je vous partage une session milo afin d’avoir votre avis', - creationDate: DateTime.local(2022, 1, 17), - type: TypeMessage.MESSAGE_SESSION_MILO, - infoSessionImilo: { - id: 'id-session-milo', - titre: 'Une session milo', - }, - }), - ], - }, -] +export const desMessagesParJour = (): ByDay => ({ + length: 10, + days: [ + { + date: DateTime.local(2021, 12, 22), + messages: [ + unMessage({ + id: 'message-1', + content: 'Decrypted: Message du 22/12/2021', + creationDate: DateTime.local(2021, 12, 22), + }), + ], + }, + { + date: DateTime.local(2022, 1, 10), + messages: [ + unMessage({ + id: 'message-2', + content: 'Decrypted: Message du 10/1/2022', + creationDate: DateTime.local(2022, 1, 10), + conseillerId: 'conseiller-2', + }), + ], + }, + { + date: DateTime.local(2022, 1, 13, 9), + messages: [ + unMessage({ + id: 'message-3', + content: 'Decrypted: Message du 13/1/2022 9h', + creationDate: DateTime.local(2022, 1, 13, 9), + conseillerId: 'conseiller-3', + }), + unMessage({ + id: 'message-4', + content: 'Decrypted: Message du 13/1/2022 10h', + creationDate: DateTime.local(2022, 1, 13, 10), + }), + ], + }, + { + date: DateTime.local(2022, 1, 15), + messages: [ + unMessage({ + id: 'message-6', + content: 'Decrypted: Je vous partage cette offre', + creationDate: DateTime.local(2022, 1, 15), + type: TypeMessage.MESSAGE_OFFRE, + infoOffre: { + id: 'id-offre', + titre: 'Une offre', + type: TypeOffre.EMPLOI, + }, + }), + ], + }, + { + date: DateTime.local(2022, 1, 16), + messages: [ + unMessage({ + id: 'message-lien-1', + content: + 'Decrypted: Message du 16/1/2022 avec un lien https://www.pass-emploi.com/', + creationDate: DateTime.local(2022, 1, 16), + conseillerId: 'conseiller-2', + }), + ], + }, + { + date: DateTime.local(2022, 1, 17), + messages: [ + unMessage({ + id: 'message-7', + content: 'Decrypted: Je vous partage cet événement', + creationDate: DateTime.local(2022, 1, 17), + type: TypeMessage.MESSAGE_EVENEMENT, + infoEvenement: { + id: 'id-evenement', + titre: 'Un atelier', + date: DateTime.fromISO('2021-12-22T00:00:00.000Z'), + }, + }), + unMessage({ + id: 'message-8', + content: + 'Decrypted: Bonjour, je vous partage un événement afin d’avoir votre avis', + creationDate: DateTime.local(2022, 1, 17), + type: TypeMessage.MESSAGE_EVENEMENT_EMPLOI, + infoEvenementEmploi: { + id: 'id-evenement-emploi', + titre: 'Un événement emploi', + url: 'https://www.lala.com', + }, + }), + unMessage({ + id: 'message-9', + content: + 'Decrypted: Bonjour, je vous partage une session milo afin d’avoir votre avis', + creationDate: DateTime.local(2022, 1, 17), + type: TypeMessage.MESSAGE_SESSION_MILO, + infoSessionImilo: { + id: 'id-session-milo', + titre: 'Une session milo', + }, + }), + ], + }, + ], +}) export const unMessageListeDiffusion = ( args: Partial = {} @@ -258,40 +261,43 @@ export function desMessagesListeDiffusion(): MessageListeDiffusion[] { } export const desMessagesListeDeDiffusionParJour = - (): ByDay[] => [ - { - date: DateTime.local(2021, 12, 22), - messages: [ - unMessageListeDiffusion({ - id: 'message-1', - content: 'Decrypted: Message du 22/12/2021', - creationDate: DateTime.local(2021, 12, 22), - }), - ], - }, - { - date: DateTime.local(2022, 1, 10), - messages: [ - unMessageListeDiffusion({ - id: 'message-2', - content: 'Decrypted: Message du 10/1/2022', - creationDate: DateTime.local(2022, 1, 10), - }), - ], - }, - { - date: DateTime.local(2022, 1, 13, 9), - messages: [ - unMessageListeDiffusion({ - id: 'message-3', - content: 'Decrypted: Message du 13/1/2022 9h', - creationDate: DateTime.local(2022, 1, 13, 9), - }), - unMessageListeDiffusion({ - id: 'message-4', - content: 'Decrypted: Message du 13/1/2022 10h', - creationDate: DateTime.local(2022, 1, 13, 10), - }), - ], - }, - ] + (): ByDay => ({ + length: 4, + days: [ + { + date: DateTime.local(2021, 12, 22), + messages: [ + unMessageListeDiffusion({ + id: 'message-1', + content: 'Decrypted: Message du 22/12/2021', + creationDate: DateTime.local(2021, 12, 22), + }), + ], + }, + { + date: DateTime.local(2022, 1, 10), + messages: [ + unMessageListeDiffusion({ + id: 'message-2', + content: 'Decrypted: Message du 10/1/2022', + creationDate: DateTime.local(2022, 1, 10), + }), + ], + }, + { + date: DateTime.local(2022, 1, 13, 9), + messages: [ + unMessageListeDiffusion({ + id: 'message-3', + content: 'Decrypted: Message du 13/1/2022 9h', + creationDate: DateTime.local(2022, 1, 13, 9), + }), + unMessageListeDiffusion({ + id: 'message-4', + content: 'Decrypted: Message du 13/1/2022 10h', + creationDate: DateTime.local(2022, 1, 13, 10), + }), + ], + }, + ], + }) diff --git a/interfaces/message.ts b/interfaces/message.ts index 042c1b1b1..728cf7064 100644 --- a/interfaces/message.ts +++ b/interfaces/message.ts @@ -41,6 +41,11 @@ export interface MessageListeDiffusion { } export interface ByDay { + length: number + days: OfDay[] +} + +export interface OfDay { date: DateTime messages: T[] } @@ -90,16 +95,12 @@ export function fromConseiller(message: Message): boolean { return message.sentBy === UserType.CONSEILLER.toLowerCase() } -export function countItems(days: ByDay[]): number { - return days.reduce((count, { messages }) => count + messages.length, 0) -} - export function getPreviousItemId( idCible: string, - days: ByDay[], + { length, days }: ByDay, { orNext }: { orNext?: boolean } = {} ): string | undefined { - if (countItems(days) === 0) return + if (length === 0) return let indexDay = 0, indexItem = 0, diff --git a/package.json b/package.json index 198c93d12..6c602e4fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pass-emploi-web", - "version": "4.23.0", + "version": "4.23.1", "private": true, "engines": { "node": "20.15.0" diff --git a/services/messages.service.ts b/services/messages.service.ts index d86bf4333..fa3f359b9 100644 --- a/services/messages.service.ts +++ b/services/messages.service.ts @@ -13,8 +13,8 @@ import { getChatsDuConseiller, getIdLastMessage, getMessageImportantSnapshot, - getMessagesPeriode, getMessagesGroupe, + getMessagesPeriode, observeChat, observeDerniersMessagesDuChat, rechercherMessages, @@ -25,8 +25,8 @@ import { } from 'clients/firebase.client' import { BaseBeneficiaire, - Chat, BeneficiaireEtChat, + Chat, } from 'interfaces/beneficiaire' import { UserType } from 'interfaces/conseiller' import { InfoFichier } from 'interfaces/fichier' @@ -36,6 +36,7 @@ import { Message, MessageListeDiffusion, MessageRechercheMatch, + OfDay, TypeMessage, } from 'interfaces/message' import { BaseOffre } from 'interfaces/offre' @@ -162,13 +163,13 @@ export function observeDerniersMessages( idChat: string, cleChiffrement: string, { pages, taillePage }: { pages: number; taillePage: number }, - onMessagesGroupesParJour: (messagesGroupesParJour: ByDay[]) => void + onMessagesGroupesParJour: (messagesGroupesParJour: ByDay) => void ): () => void { return observeDerniersMessagesDuChat( idChat, pages * taillePage, (messagesAntechronologiques: Message[]) => { - const messagesGroupesParJour: ByDay[] = grouperMessagesParJour( + const messagesGroupesParJour: ByDay = grouperMessagesParJour( [...messagesAntechronologiques].reverse(), cleChiffrement ) @@ -192,7 +193,7 @@ export function observeJeuneReadingDate( export async function getMessagesListeDeDiffusion( idListeDiffusion: string, cleChiffrement: string -): Promise[]> { +): Promise> { const session = await getSession() const messages = await getMessagesGroupe(session!.user.id, idListeDiffusion) @@ -594,8 +595,8 @@ async function evenementMessage( function grouperMessagesParJour( messages: T[], cleChiffrement: string -): ByDay[] { - const messagesByDay: { [day: string]: ByDay } = {} +): ByDay { + const messagesByDay: { [day: string]: OfDay } = {} messages .filter((message) => message.type !== TypeMessage.NOUVEAU_CONSEILLER) @@ -623,7 +624,7 @@ function grouperMessagesParJour( messagesByDay[day] = messagesOfDay }) - return Object.values(messagesByDay) + return { length: messages.length, days: Object.values(messagesByDay) } } function decryptContentAndFilename( diff --git a/tests/components/ConversationBeneficiaire.test.tsx b/tests/components/ConversationBeneficiaire.test.tsx index 35f626c08..bb27f73ac 100644 --- a/tests/components/ConversationBeneficiaire.test.tsx +++ b/tests/components/ConversationBeneficiaire.test.tsx @@ -54,13 +54,15 @@ describe('', () => { } ) ;(observeDerniersMessages as jest.Mock).mockImplementation( - (_idChat, _cle, pages, fn: (messages: ByDay[]) => void) => { - const messagesPagines = messagesParJour.map((jour) => ({ ...jour })) + (_idChat, _cle, pages, fn: (messages: ByDay) => void) => { + const messagesPagines = messagesParJour.days.map((jour) => ({ + ...jour, + })) messagesPagines[0].messages = [ unMessage({ id: 'message-page-' + Math.min(pages, 2) }), ...messagesPagines[0].messages, ] - fn(messagesPagines) + fn({ length: 10, days: messagesPagines }) return unsubscribe } ) @@ -169,7 +171,7 @@ describe('', () => { ).toHaveAttribute('disabled') }) - const cases = messagesParJour.map((messagesDUnJour) => [messagesDUnJour]) + const cases = messagesParJour.days.map((messagesDUnJour) => [messagesDUnJour]) describe.each(cases)('Pour chaque jour avec message', (messagesDUnJour) => { it(`affiche la date (${toShortDate(messagesDUnJour.date)})`, () => { // Then @@ -221,7 +223,7 @@ describe('', () => { // Then expect(supprimerMessage).toHaveBeenCalledWith( 'idChat', - messagesParJour[0].messages[0], + messagesParJour.days[0].messages[0], 'cleChiffrement' ) @@ -240,14 +242,14 @@ describe('', () => { // Then expect(supprimerMessage).toHaveBeenCalledWith( 'idChat', - messagesParJour.at(-1)!.messages.at(-1)!, + messagesParJour.days.at(-1)!.messages.at(-1)!, 'cleChiffrement' ) }) describe('modification de message', () => { let input: HTMLInputElement - const dernierMessage = messagesParJour.at(-1)!.messages.at(-1)! + const dernierMessage = messagesParJour.days.at(-1)!.messages.at(-1)! beforeEach(async () => { // Given input = screen.getByRole('textbox') diff --git a/tests/components/MessagesListeDeDiffusion.test.tsx b/tests/components/MessagesListeDeDiffusion.test.tsx index 41dcdd8b7..cb618737b 100644 --- a/tests/components/MessagesListeDeDiffusion.test.tsx +++ b/tests/components/MessagesListeDeDiffusion.test.tsx @@ -14,7 +14,7 @@ import { toShortDate } from 'utils/date' jest.mock('services/messages.service') describe('', () => { - let messages: ByDay[] + let messages: ByDay let listeDeDiffusion: ListeDeDiffusion let afficherDetailMessage: (message: MessageListeDiffusion) => void @@ -51,7 +51,7 @@ describe('', () => { const listeJours = screen.getByRole('list', { description: 'Messages envoyés à la liste de diffusion', }) - messages.forEach((jour) => { + messages.days.forEach((jour) => { expect( within(listeJours).getByText(`Le ${toShortDate(jour.date)}`) ).toBeInTheDocument() @@ -70,7 +70,7 @@ describe('', () => { it('permet d’accéder au détail d’un message', async () => { // Then - messages.forEach((jour) => { + messages.days.forEach((jour) => { const listeMessages = screen.getByRole('list', { description: `Le ${toShortDate(jour.date)}`, }) @@ -91,7 +91,7 @@ describe('', () => { it('affiche le détail d’un message', async () => { // Given - const message = messages[0].messages[0] + const message = messages.days[0].messages[0] const creationTime = message.creationDate.toFormat("H 'heure' m") // When diff --git a/tests/interfaces/message.test.ts b/tests/interfaces/message.test.ts index c4f7a799b..fd89680d1 100644 --- a/tests/interfaces/message.test.ts +++ b/tests/interfaces/message.test.ts @@ -7,86 +7,81 @@ describe('getPreviousIndices', () => { const idATrouver = 'idATrouver' it('renvoie undefined pour les contenus vides', async () => { - expect(getPreviousItemId(idATrouver, [])).toEqual(undefined) - expect(getPreviousItemId(idATrouver, [{ date, messages: [] }])).toEqual( + expect(getPreviousItemId(idATrouver, { length: 0, days: [] })).toEqual( undefined ) - expect( - getPreviousItemId(idATrouver, [ - { date, messages: [] }, - { date, messages: [] }, - ]) - ).toEqual(undefined) }) it('renvoie undefined si l’élément n’existe pas', async () => { expect( - getPreviousItemId(idATrouver, [{ date, messages: [{ id: 'id2' }] }]) + getPreviousItemId(idATrouver, { + length: 1, + days: [{ date, messages: [{ id: 'id2' }] }], + }) ).toEqual(undefined) expect( - getPreviousItemId(idATrouver, [ - { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, - { date, messages: [] }, - { date, messages: [{ id: 'id4' }] }, - ]) + getPreviousItemId(idATrouver, { + length: 3, + days: [ + { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, + { date, messages: [] }, + { date, messages: [{ id: 'id4' }] }, + ], + }) ).toEqual(undefined) }) it('renvoie l’élément précédent du même jour', async () => { expect( - getPreviousItemId(idATrouver, [ - { - date, - messages: [{ id: 'id2' }, { id: 'id3' }, { id: idATrouver }], - }, - ]) + getPreviousItemId(idATrouver, { + length: 3, + days: [ + { + date, + messages: [{ id: 'id2' }, { id: 'id3' }, { id: idATrouver }], + }, + ], + }) ).toEqual('id3') }) it('renvoie le dernier élément du jour précédent', async () => { expect( - getPreviousItemId(idATrouver, [ - { date, messages: [{ id: 'id2' }] }, - { - date, - messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], - }, - ]) + getPreviousItemId(idATrouver, { + length: 4, + days: [ + { date, messages: [{ id: 'id2' }] }, + { + date, + messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], + }, + ], + }) ).toEqual('id2') }) it('renvoie le dernier élément du 1er jour précédent avec des éléments', async () => { expect( - getPreviousItemId(idATrouver, [ - { date, messages: [{ id: 'id2' }] }, - { date, messages: [] }, - { date, messages: [] }, - { - date, - messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], - }, - ]) + getPreviousItemId(idATrouver, { + length: 4, + days: [ + { date, messages: [{ id: 'id2' }] }, + { date, messages: [] }, + { date, messages: [] }, + { + date, + messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], + }, + ], + }) ).toEqual('id2') }) it('renvoie undefined si pas d’élément précédent', async () => { expect( - getPreviousItemId(idATrouver, [ - { date, messages: [] }, - { date, messages: [] }, - { - date, - messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], - }, - ]) - ).toEqual(undefined) - }) - - it('renvoie l’élément suivant du même si aucun élément précédent', async () => { - expect( - getPreviousItemId( - idATrouver, - [ + getPreviousItemId(idATrouver, { + length: 3, + days: [ { date, messages: [] }, { date, messages: [] }, { @@ -94,6 +89,25 @@ describe('getPreviousIndices', () => { messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], }, ], + }) + ).toEqual(undefined) + }) + + it('renvoie l’élément suivant du même si aucun élément précédent', async () => { + expect( + getPreviousItemId( + idATrouver, + { + length: 3, + days: [ + { date, messages: [] }, + { date, messages: [] }, + { + date, + messages: [{ id: idATrouver }, { id: 'id3' }, { id: 'id4' }], + }, + ], + }, { orNext: true } ) ).toEqual('id3') @@ -103,11 +117,14 @@ describe('getPreviousIndices', () => { expect( getPreviousItemId( idATrouver, - [ - { date, messages: [] }, - { date, messages: [{ id: idATrouver }] }, - { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, - ], + { + length: 3, + days: [ + { date, messages: [] }, + { date, messages: [{ id: idATrouver }] }, + { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, + ], + }, { orNext: true } ) ).toEqual('id2') @@ -117,12 +134,15 @@ describe('getPreviousIndices', () => { expect( getPreviousItemId( idATrouver, - [ - { date, messages: [] }, - { date, messages: [{ id: idATrouver }] }, - { date, messages: [] }, - { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, - ], + { + length: 3, + days: [ + { date, messages: [] }, + { date, messages: [{ id: idATrouver }] }, + { date, messages: [] }, + { date, messages: [{ id: 'id2' }, { id: 'id3' }] }, + ], + }, { orNext: true } ) ).toEqual('id2') @@ -132,11 +152,14 @@ describe('getPreviousIndices', () => { expect( getPreviousItemId( idATrouver, - [ - { date, messages: [] }, - { date, messages: [] }, - { date, messages: [{ id: idATrouver }] }, - ], + { + length: 1, + days: [ + { date, messages: [] }, + { date, messages: [] }, + { date, messages: [{ id: idATrouver }] }, + ], + }, { orNext: true } ) ).toEqual(undefined) diff --git a/tests/pages/MessageriePage.test.tsx b/tests/pages/MessageriePage.test.tsx index 8905f30d5..ffc8f84df 100644 --- a/tests/pages/MessageriePage.test.tsx +++ b/tests/pages/MessageriePage.test.tsx @@ -38,7 +38,7 @@ describe('MessageriePage client side', () => { let conseillers: ConseillerHistorique[] let updateChatsRef: (chats: BeneficiaireEtChat[]) => void - let messages: ByDay[] + let messages: ByDay beforeEach(async () => { ;(getConseillersDuJeuneClientSide as jest.Mock).mockResolvedValue( @@ -156,7 +156,7 @@ describe('MessageriePage client side', () => { }) it('affiche les messages de la liste de diffusion', async () => { const messageRandom = - await desMessagesListeDeDiffusionParJour()[0].messages[0] + desMessagesListeDeDiffusionParJour().days[0].messages[0] //Then expect( screen.getByText('Messages envoyés à la liste de diffusion')