package dev.lions.unionflow.server.api.enums.notification;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/**
 * Tests unitaires pour TypeNotification.
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-12-09
 */
@DisplayName("Tests TypeNotification")
class TypeNotificationTest {

  @Test
  @DisplayName("Tous les types de notification doivent avoir un libellé")
  void testTousLesTypesOntLibelle() {
    for (TypeNotification type : TypeNotification.values()) {
      assertThat(type.getLibelle()).isNotNull().isNotBlank();
    }
  }

  @Test
  @DisplayName("EMAIL doit avoir le libellé correct")
  void testEmail() {
    assertThat(TypeNotification.EMAIL.getLibelle()).isEqualTo("Email");
  }

  @Test
  @DisplayName("SMS doit avoir le libellé correct")
  void testSMS() {
    assertThat(TypeNotification.SMS.getLibelle()).isEqualTo("SMS");
  }

  @Test
  @DisplayName("PUSH doit avoir le libellé correct")
  void testPush() {
    assertThat(TypeNotification.PUSH.getLibelle()).isEqualTo("Push Notification");
  }

  @Test
  @DisplayName("IN_APP doit avoir le libellé correct")
  void testInApp() {
    assertThat(TypeNotification.IN_APP.getLibelle()).isEqualTo("Notification In-App");
  }

  @Test
  @DisplayName("SYSTEME doit avoir le libellé correct")
  void testSysteme() {
    assertThat(TypeNotification.SYSTEME.getLibelle()).isEqualTo("Notification Système");
  }

  @Test
  @DisplayName("isActiveeParDefaut doit retourner true pour tous sauf SYSTEME")
  void testIsActiveeParDefaut() {
    assertThat(TypeNotification.EMAIL.isActiveeParDefaut()).isTrue();
    assertThat(TypeNotification.SMS.isActiveeParDefaut()).isTrue();
    assertThat(TypeNotification.PUSH.isActiveeParDefaut()).isTrue();
    assertThat(TypeNotification.IN_APP.isActiveeParDefaut()).isTrue();
    assertThat(TypeNotification.SYSTEME.isActiveeParDefaut()).isFalse();
  }

  @Test
  @DisplayName("Toutes les valeurs de l'enum doivent être présentes")
  void testToutesLesValeurs() {
    assertThat(TypeNotification.values()).hasSize(5);
    assertThat(TypeNotification.values())
        .containsExactlyInAnyOrder(
            TypeNotification.EMAIL,
            TypeNotification.SMS,
            TypeNotification.PUSH,
            TypeNotification.IN_APP,
            TypeNotification.SYSTEME);
  }
}

