diff --git a/interface-contracts.json b/interface-contracts.json index d409c56..5f4bdbc 100644 --- a/interface-contracts.json +++ b/interface-contracts.json @@ -19,6 +19,12 @@ } }, + + + + + + "PasserCommande": { "input": { "clientId": "uuid", diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidAdressException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidAdressException.java new file mode 100644 index 0000000..996a601 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidAdressException.java @@ -0,0 +1,7 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.commande.exception; + +public class NotValidAdressException extends RuntimeException { + public NotValidAdressException(String message) { + super(message); + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidCommandeException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidCommandeException.java new file mode 100644 index 0000000..c7016a1 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidCommandeException.java @@ -0,0 +1,7 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.commande.exception; + +public class NotValidCommandeException extends RuntimeException { + public NotValidCommandeException(String message) { + super(message); + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidLigneCommandeException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidLigneCommandeException.java new file mode 100644 index 0000000..3a3a656 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/exception/NotValidLigneCommandeException.java @@ -0,0 +1,7 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.commande.exception; + +public class NotValidLigneCommandeException extends RuntimeException { + public NotValidLigneCommandeException(String message) { + super(message); + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidator.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidator.java new file mode 100644 index 0000000..3c6345c --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidator.java @@ -0,0 +1,88 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.commande.validator; + +import fr.iut_fbleau.but3.dev62.mylibrary.commande.AdresseInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.ComandeInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.LigneCommandeInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidAdressException; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidCommandeException; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidLigneCommandeException; + +import java.util.List; +import java.util.Objects; + +public final class CommandeValidator { + + public static final String LIGNE_COMMANDE_IS_NOT_VALIDE = "Ligne commande is not valide"; + public static final String MODE_PAIEMENT_IS_NOT_VALIDE = "Mode Paiement is not valide"; + public static final String LIST_LIGNE_COMANDE_IS_NOT_VALIDE = "List ligne commande is not valide"; + public static final String STREET_IS_NOT_VALIDE = "rue is not valide"; + + public static final String CITY_IS_NOT_VALIDE = "city is not valide"; + public static final String CODE_POSTAL_IS_NOT_VALIDE = "code postal is not valide"; + public static final String COUNTRY_IS_NOT_VALIDE = "Country is not valide"; + + + public static void validate(LigneCommandeInfo ligneCommandeInfo) { + if (ligneCommandeInfo.quantite()<=0){ + throw new NotValidLigneCommandeException(LIGNE_COMMANDE_IS_NOT_VALIDE); + } + } + + public static void validate(ComandeInfo comandeInfo) { + + validateModePaiement(comandeInfo); + validateListLigneCommande(comandeInfo); + } + + public static void validate(AdresseInfo adresseInfo) { + validateStreet(adresseInfo); + validateCity(adresseInfo); + validateCodePostal(adresseInfo); + validateCountry(adresseInfo); + } + + + + private static void validateModePaiement(ComandeInfo comandeInfo) { + if(comandeInfo.modePayement()!="CB"&& comandeInfo.modePayement()!="PAYPAL"&&comandeInfo.modePayement()!="POINTS_FIDELITE"){ + throw new NotValidCommandeException(MODE_PAIEMENT_IS_NOT_VALIDE); + } + } + + private static void validateListLigneCommande(ComandeInfo comandeInfo) { + if (comandeInfo.listeLigne() == null + || comandeInfo.listeLigne().isEmpty() + || comandeInfo.listeLigne().stream().anyMatch(Objects::isNull)){ + throw new NotValidCommandeException(LIST_LIGNE_COMANDE_IS_NOT_VALIDE); + } + + } + + private static void validateStreet(AdresseInfo adresseInfo) { + if (adresseInfo.rue() == null || adresseInfo.rue().isBlank()){ + throw new NotValidAdressException(STREET_IS_NOT_VALIDE); + } + } + private static void validateCity(AdresseInfo adresseInfo) { + if (adresseInfo.ville() == null || adresseInfo.ville().isBlank()){ + throw new NotValidAdressException(CITY_IS_NOT_VALIDE); + } + } + + private static void validateCodePostal(AdresseInfo adresseInfo) { + if (adresseInfo.codePostal() == null || adresseInfo.codePostal().isBlank()){ + throw new NotValidAdressException(CODE_POSTAL_IS_NOT_VALIDE); + } + } + + private static void validateCountry(AdresseInfo adresseInfo) { + if (adresseInfo.pays() == null || adresseInfo.pays().isBlank()){ + throw new NotValidAdressException(COUNTRY_IS_NOT_VALIDE); + } + } + + + + + +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidatorTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidatorTest.java new file mode 100644 index 0000000..0cd006a --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/commande/validator/CommandeValidatorTest.java @@ -0,0 +1,166 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.commande.validator; + +import fr.iut_fbleau.but3.dev62.mylibrary.commande.AdresseInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.ComandeInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.LigneCommandeInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.ModePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.entity.LigneCommande; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidAdressException; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidCommandeException; +import fr.iut_fbleau.but3.dev62.mylibrary.commande.exception.NotValidLigneCommandeException; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.*; + +import java.util.*; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +public class CommandeValidatorTest { + + + @Test + void testValidateValideLigneCommande () { + LigneCommandeInfo ligneCommandeValide = new LigneCommandeInfo(5); + + + assertDoesNotThrow(() -> CommandeValidator.validate(ligneCommandeValide)); + } + @ParameterizedTest + @ValueSource(ints = {-5,0 }) + void testValidateNotValideLigneCommande (int notValiteQuantite) { + LigneCommandeInfo ligneCommandeNotValide = new LigneCommandeInfo(notValiteQuantite); + NotValidLigneCommandeException exception = assertThrows( + NotValidLigneCommandeException.class, + () -> CommandeValidator.validate(ligneCommandeNotValide) + ); + + assertEquals(CommandeValidator.LIGNE_COMMANDE_IS_NOT_VALIDE, exception.getMessage()); + } + + + @ParameterizedTest + @EnumSource(value = ModePaiement.class, names = {"CB", "PAYPAL", "POINTS_FIDELITE"}) + void testValidateValideCommande(ModePaiement modePaiement) { + LigneCommandeInfo ligneCommandeValide = new LigneCommandeInfo(5); + List listeLigne = new ArrayList<>(); + listeLigne.add(ligneCommandeValide); + String modePaiementValide = modePaiement.toString(); + ComandeInfo commandeValid = new ComandeInfo(listeLigne, modePaiementValide); + + assertDoesNotThrow(() -> CommandeValidator.validate(commandeValid)); + } + + @ParameterizedTest + @ValueSource(strings = {"jambon", " ", ""}) + void testValidateNotValideModePaiement(String modePaiementError) { + LigneCommandeInfo ligneCommandeValide = new LigneCommandeInfo(5); + List listeLigne = new ArrayList<>(); + listeLigne.add(ligneCommandeValide); + String modePaiementValide = modePaiementError; + ComandeInfo commandeValid = new ComandeInfo(listeLigne, modePaiementValide); + + NotValidCommandeException exception = assertThrows( + NotValidCommandeException.class, + () -> CommandeValidator.validate(commandeValid) + ); + assertEquals(CommandeValidator.MODE_PAIEMENT_IS_NOT_VALIDE, exception.getMessage()); + } + + @ParameterizedTest + @MethodSource("provideInvalidOrderLists") + void testValidateNotValideListLigneCommande(List listeLigne) { + String modePaiementValide = ModePaiement.CB.toString(); + ComandeInfo commandeValid = new ComandeInfo(listeLigne, modePaiementValide); + NotValidCommandeException exception = assertThrows( + NotValidCommandeException.class, + () -> CommandeValidator.validate(commandeValid) + ); + assertEquals(CommandeValidator.LIST_LIGNE_COMANDE_IS_NOT_VALIDE, exception.getMessage()); + + } + static Stream provideInvalidOrderLists() { + return Stream.of( + Arguments.of(Collections.emptyList()), + Arguments.of(Arrays.asList(new LigneCommandeInfo(5), null, null, new LigneCommandeInfo(12))), + Arguments.of((List) null) + ); + } + + @Nested + class TestAdress{ + + + @Test + void testValidateValideLigneCommande () { + AdresseInfo adress = new AdresseInfo("rue du chien","La Rochette","7700","France"); + + assertDoesNotThrow(() -> CommandeValidator.validate(adress)); + } + + + + + @ParameterizedTest + @NullSource + @ValueSource(strings = {" ", " ", "\t", "\n"}) + void testValidateNotValideStreet(String notvalideStreet) { + AdresseInfo adress = new AdresseInfo(notvalideStreet,"La Rochette","7700","France"); + NotValidAdressException exception = assertThrows( + NotValidAdressException.class, + () -> CommandeValidator.validate(adress) + ); + assertEquals(CommandeValidator.STREET_IS_NOT_VALIDE, exception.getMessage()); + } + + @ParameterizedTest + @NullSource + @ValueSource(strings = {" ", " ", "\t", "\n"}) + void testValidateNotValideCity(String notvalideCity) { + AdresseInfo adress = new AdresseInfo("rue du chien",notvalideCity,"7700","France"); + NotValidAdressException exception = assertThrows( + NotValidAdressException.class, + () -> CommandeValidator.validate(adress) + ); + assertEquals(CommandeValidator.CITY_IS_NOT_VALIDE, exception.getMessage()); + } + + @ParameterizedTest + @NullSource + @ValueSource(strings = {" ", " ", "\t", "\n"}) + void testValidateNotValideCodePostal(String notvalideCodePostal) { + AdresseInfo adress = new AdresseInfo("rue du chien","La Rochette",notvalideCodePostal,"France"); + NotValidAdressException exception = assertThrows( + NotValidAdressException.class, + () -> CommandeValidator.validate(adress) + ); + assertEquals(CommandeValidator.CODE_POSTAL_IS_NOT_VALIDE, exception.getMessage()); + } + + @ParameterizedTest + @NullSource + @ValueSource(strings = {" ", " ", "\t", "\n"}) + void testValidateNotValideCountry(String notvalideCountry) { + AdresseInfo adress = new AdresseInfo("rue du chien","La Rochette","7700",notvalideCountry); + NotValidAdressException exception = assertThrows( + NotValidAdressException.class, + () -> CommandeValidator.validate(adress) + ); + assertEquals(CommandeValidator.COUNTRY_IS_NOT_VALIDE, exception.getMessage()); + } + + } + + + + + + + + + + + +}