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

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

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

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

  @Test
  @DisplayName("Toutes les méthodes de paiement doivent avoir un libellé")
  void testToutesLesMethodesOntLibelle() {
    for (MethodePaiement methode : MethodePaiement.values()) {
      assertThat(methode.getLibelle()).isNotNull().isNotBlank();
    }
  }

  @Test
  @DisplayName("Toutes les valeurs de l'enum doivent être présentes")
  void testToutesLesValeurs() {
    assertThat(MethodePaiement.values().length).isGreaterThan(0);
    for (MethodePaiement methode : MethodePaiement.values()) {
      assertThat(methode).isNotNull();
      assertThat(methode.name()).isNotBlank();
    }
  }

  @Test
  @DisplayName("isMobileMoney - méthodes mobile money retournent true")
  void testIsMobileMoneyTrue() {
    assertThat(MethodePaiement.WAVE_MOBILE_MONEY.isMobileMoney()).isTrue();
    assertThat(MethodePaiement.ORANGE_MONEY.isMobileMoney()).isTrue();
    assertThat(MethodePaiement.MTN_MOBILE_MONEY.isMobileMoney()).isTrue();
    assertThat(MethodePaiement.MOOV_MONEY.isMobileMoney()).isTrue();
  }

  @Test
  @DisplayName("isMobileMoney - autres méthodes retournent false")
  void testIsMobileMoneyFalse() {
    assertThat(MethodePaiement.VIREMENT_BANCAIRE.isMobileMoney()).isFalse();
    assertThat(MethodePaiement.CARTE_BANCAIRE.isMobileMoney()).isFalse();
    assertThat(MethodePaiement.ESPECES.isMobileMoney()).isFalse();
    assertThat(MethodePaiement.CHEQUE.isMobileMoney()).isFalse();
    assertThat(MethodePaiement.AUTRE.isMobileMoney()).isFalse();
  }
}

