Files
unionflow-server-impl-quarkus/src/test/java/dev/lions/unionflow/server/entity/ConversationTest.java
dahoud 719d45e1fe feat(messaging): module messagerie unifié avec contact policies + member blocks
Refactor complet : fusion de Conversation + Message en un module Messaging unique
avec ContactPolicy (règles qui-peut-parler-à-qui) et MemberBlock (blocages utilisateur).

- Migration V28 : tables conversations/conversation_participants/messages/
  contact_policies/member_blocks
- Nouvelles entités : ContactPolicy, ConversationParticipant, MemberBlock
  (Conversation/Message mises à jour avec relations)
- Nouvelles repositories : ContactPolicyRepository, ConversationParticipantRepository,
  MemberBlockRepository
- MessagingResource (nouveau) remplace ConversationResource + MessageResource
- MessagingService (nouveau) remplace ConversationService + MessageService
  avec vérifications appartenance org + policies + blocages avant envoi
- Anciens fichiers Conversation/Message Resource/Service/Tests supprimés
2026-04-15 20:23:04 +00:00

167 lines
5.4 KiB
Java

package dev.lions.unionflow.server.entity;
import dev.lions.unionflow.server.api.enums.messagerie.StatutConversation;
import dev.lions.unionflow.server.api.enums.messagerie.TypeConversation;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.time.LocalDate;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@DisplayName("Conversation")
class ConversationTest {
private static Membre newMembre() {
Membre m = new Membre();
m.setId(UUID.randomUUID());
m.setNumeroMembre("M1");
m.setPrenom("Alpha");
m.setNom("Diallo");
m.setEmail("alpha@test.com");
m.setDateNaissance(LocalDate.now());
return m;
}
private static Organisation newOrg() {
Organisation org = new Organisation();
org.setId(UUID.randomUUID());
org.setNom("Tontine Test");
return org;
}
@Test
@DisplayName("getters/setters — tous les champs")
void gettersSetters() {
Conversation conv = new Conversation();
Organisation org = newOrg();
conv.setOrganisation(org);
conv.setTypeConversation(TypeConversation.DIRECTE);
conv.setStatut(StatutConversation.ACTIVE);
conv.setTitre("Discussion");
conv.setNombreMessages(5);
assertThat(conv.getOrganisation()).isEqualTo(org);
assertThat(conv.getTypeConversation()).isEqualTo(TypeConversation.DIRECTE);
assertThat(conv.getStatut()).isEqualTo(StatutConversation.ACTIVE);
assertThat(conv.getTitre()).isEqualTo("Discussion");
assertThat(conv.getNombreMessages()).isEqualTo(5);
}
@Test
@DisplayName("estActive — ACTIVE → true")
void estActive_active() {
Conversation conv = buildMinimal();
conv.setStatut(StatutConversation.ACTIVE);
assertThat(conv.estActive()).isTrue();
}
@Test
@DisplayName("estActive — ARCHIVEE → false")
void estActive_archivee() {
Conversation conv = buildMinimal();
conv.setStatut(StatutConversation.ARCHIVEE);
assertThat(conv.estActive()).isFalse();
}
@Test
@DisplayName("archiver — passe le statut à ARCHIVEE")
void archiver() {
Conversation conv = buildMinimal();
conv.setStatut(StatutConversation.ACTIVE);
conv.archiver();
assertThat(conv.getStatut()).isEqualTo(StatutConversation.ARCHIVEE);
assertThat(conv.estActive()).isFalse();
}
@Test
@DisplayName("enregistrerNouveauMessage — incrémente le compteur et met à jour la date")
void enregistrerNouveauMessage() {
Conversation conv = buildMinimal();
conv.setNombreMessages(3);
conv.enregistrerNouveauMessage();
assertThat(conv.getNombreMessages()).isEqualTo(4);
assertThat(conv.getDernierMessageAt()).isNotNull();
}
@Test
@DisplayName("enregistrerNouveauMessage — part de null")
void enregistrerNouveauMessage_partDeNull() {
Conversation conv = buildMinimal();
conv.setNombreMessages(null);
conv.enregistrerNouveauMessage();
assertThat(conv.getNombreMessages()).isEqualTo(1);
}
@Test
@DisplayName("onCreate — initialise statut et nombreMessages si null")
void onCreate_initDefaults() {
Conversation conv = new Conversation();
conv.setOrganisation(newOrg());
conv.setTypeConversation(TypeConversation.DIRECTE);
conv.onCreate();
assertThat(conv.getStatut()).isEqualTo(StatutConversation.ACTIVE);
assertThat(conv.getNombreMessages()).isEqualTo(0);
assertThat(conv.getDateCreation()).isNotNull();
assertThat(conv.getActif()).isTrue();
}
@Test
@DisplayName("ROLE_CANAL — roleCible renseigné")
void roleCanalType() {
Conversation conv = buildMinimal();
conv.setTypeConversation(TypeConversation.ROLE_CANAL);
conv.setRoleCible("TRESORIER");
conv.setTitre("Trésorier");
assertThat(conv.getTypeConversation()).isEqualTo(TypeConversation.ROLE_CANAL);
assertThat(conv.getRoleCible()).isEqualTo("TRESORIER");
}
@Test
@DisplayName("participants initialisé à liste vide (builder default)")
void participants_initializedEmpty() {
Conversation conv = Conversation.builder()
.organisation(newOrg())
.typeConversation(TypeConversation.DIRECTE)
.build();
assertThat(conv.getParticipants()).isNotNull().isEmpty();
assertThat(conv.getMessages()).isNotNull().isEmpty();
}
@Test
@DisplayName("equals et hashCode")
void equalsHashCode() {
UUID id = UUID.randomUUID();
Organisation org = newOrg();
Conversation a = buildMinimal();
a.setId(id);
a.setOrganisation(org);
Conversation b = buildMinimal();
b.setId(id);
b.setOrganisation(org);
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
}
@Test
@DisplayName("toString non null")
void toString_nonNull() {
assertThat(buildMinimal().toString()).isNotNull().isNotEmpty();
}
private Conversation buildMinimal() {
Conversation conv = new Conversation();
conv.setOrganisation(newOrg());
conv.setTypeConversation(TypeConversation.DIRECTE);
conv.setStatut(StatutConversation.ACTIVE);
conv.setNombreMessages(0);
return conv;
}
}