diff --git a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java index ef00e45d..4fa2ff0e 100644 --- a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java +++ b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java @@ -80,24 +80,6 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i return indexZone; } - /** - * Méthode de vérification de la première partie de la ligne du fichier enrichi. - * Les trois premières colonnes doivent être : ppn;rcr;epn; - * - * @param ligne : ligne à traiter - * @throws FileCheckingException : erreur dans le format de la ligne - */ - protected void check3Cols(String ligne, int maxSize, String errorMessage) throws FileCheckingException { - if (ligne.split(";").length < maxSize) { - throw new FileCheckingException(errorMessage); - } - if (ligne.length() < 12) { - throw new FileCheckingException(errorMessage); - } - if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) { - throw new FileCheckingException(errorMessage); - } - } /** * Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande @@ -117,7 +99,7 @@ protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws * @throws FileCheckingException : erreur de format de fichier */ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException { - if (!ppn.matches("\\d{1,9}X?$")){ + if (!ppn.matches("^\\d{8}[0-9X]$")){ throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN); } } @@ -128,7 +110,7 @@ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingExcept * @throws FileCheckingException: erreur de format de l'epn */ protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException { - if (!epn.matches("\\d{1,9}X?$")) { + if (!epn.matches("^\\d{8}[0-9X]$")) { throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN); } } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java index 332c943d..de7ba550 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiModif.java @@ -56,7 +56,7 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx throw new FileCheckingException(Constant.ERR_FILE_NOTRAIT); } String ligne = Utilitaires.checkBom(bufLecteur.readLine()); - check3Cols(ligne, 4, Constant.ERR_FILE_3COL_MODIF); + check3Cols(ligne); String tagSubTag = ligne.split(";")[3]; if (tagSubTag.matches("e\\d{2}\\$a")) { throw new FileCheckingException(Constant.ERR_FILE_4COLZONE + tagSubTag); @@ -83,6 +83,25 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx } + /** + * Méthode de vérification de la première partie de la ligne du fichier enrichi. + * Les trois premières colonnes doivent être : ppn;rcr;epn; + * + * @param ligne : ligne à traiter + * @throws FileCheckingException : erreur dans le format de la ligne + */ + private void check3Cols(String ligne) throws FileCheckingException { + if (ligne.split(";").length < 4) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); + } + if (ligne.length() < 12) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); + } + if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF); + } + } + /** * vérification de la validité de la zone de la quatrième colonne * sur la première ligne du fichier enrichi diff --git a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java index b1873e3a..b96ab193 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java @@ -23,7 +23,7 @@ public class FichierEnrichiSupp extends AbstractFichier implements Fichier { @Autowired public FichierEnrichiSupp(@Value("") final String filename) { this.filename = filename; - this.ligneCourante=2; + this.ligneCourante = 2; } @Override @@ -48,7 +48,7 @@ public void checkFileContent(Demande d) throws FileCheckingException, IOExceptio try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString()); BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) { String ligne = Utilitaires.checkBom(bufLecteur.readLine()); - check3Cols(ligne, 3, Constant.ERR_FILE_3COL_SUPP); + check3Cols(ligne); while ((ligne = bufLecteur.readLine()) != null) { checkBodyLine(ligne, demandeSupp); ligneCourante++; @@ -56,6 +56,25 @@ public void checkFileContent(Demande d) throws FileCheckingException, IOExceptio } } + /** + * Méthode de vérification de la première partie de la ligne du fichier enrichi. + * Les trois premières colonnes doivent être : ppn;rcr;epn; + * + * @param ligne : ligne à traiter + * @throws FileCheckingException : erreur dans le format de la ligne + */ + private void check3Cols(String ligne) throws FileCheckingException { + if (ligne.split(";").length < 3) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + if (ligne.length() < 11) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) { + throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP); + } + } + /** * Méthode de vérification d'une ligne du corps du fichier enrichi * @@ -63,17 +82,14 @@ public void checkFileContent(Demande d) throws FileCheckingException, IOExceptio * @throws FileCheckingException : erreur de format de la ligne */ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileCheckingException { - if (ligne.length() < 13) { - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante - + Constant.ERR_FILE_LINELENGTH); - } try { String[] tabligne = ligne.split(";"); checkRcr(tabligne[1], demandeSupp.getRcr(), ligneCourante); checkPpn(tabligne[0], ligneCourante); - if (!tabligne[2].isEmpty()) + //cas ou l'epn est renseigné + if (tabligne.length > 2) checkEpn(tabligne[2], ligneCourante); - }catch (IndexOutOfBoundsException e) { + } catch (IndexOutOfBoundsException e) { throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH); } } diff --git a/core/src/main/java/fr/abes/item/core/constant/Constant.java b/core/src/main/java/fr/abes/item/core/constant/Constant.java index 19ef065f..e1ad5234 100644 --- a/core/src/main/java/fr/abes/item/core/constant/Constant.java +++ b/core/src/main/java/fr/abes/item/core/constant/Constant.java @@ -112,13 +112,13 @@ public class Constant implements Serializable { public static final String ERR_FILE_ERRLINE = "Erreur ligne "; public static final String ERR_FILE_ONLYONEPPN = "la ligne ne doit contenir qu'un ppn (sur 9 caractères)."; public static final String ERR_FILE_HEAD4TH = "La valeur en-tête de la quatrieme colonne n'est pas valide."; - public static final String ERR_FILE_LINELENGTH = "Il y a un problème lié à la longueur de la ligne."; + public static final String ERR_FILE_LINELENGTH = " : Il y a un problème lié à la longueur de la ligne."; public static final String ERR_FILE_TYPEFILE = "Type de fichier inconnu: "; public static final String ERR_FILE_TYPEDEMANDE = " pour le type de demande "; public static final String ERR_FILE_4COLNONVIDE = "La valeur de la 4è colonne ne doit pas être vide."; public static final String ERR_FILE_4COLZONE = "impossible de lancer un traitement sur la zone "; public static final String ERR_FILE_4COLVIDE = "La valeur de la 4è colonne doit être vide."; - public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demandeModif."; + public static final String ERR_FILE_WRONGRCR = "La valeur du rcr ne correspond pas au rcr de la demande."; public static final String ERR_FILE_WRONGPPN = "Le PPN n'est pas conforme."; public static final String ERR_FILE_WRONGEPN = "La valeur de l'epn n'est pas conforme."; diff --git a/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java index 7a049dee..3ee32424 100644 --- a/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java +++ b/core/src/test/java/fr/abes/item/core/components/TestFichierEnrichiSupp.java @@ -1,5 +1,6 @@ package fr.abes.item.core.components; +import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_SUPPRESSION; import fr.abes.item.core.entities.item.DemandeSupp; import fr.abes.item.core.entities.item.EtatDemande; @@ -8,19 +9,21 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.io.IOException; import java.nio.file.Paths; import java.util.Date; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; @DisplayName("Test pour FichierEnrichi Suppression") public class TestFichierEnrichiSupp { @DisplayName("checkNok3Cols") @Test void checkNok3Cols() { - DemandeSupp demandeSupp = new DemandeSupp("341720001", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); - FichierEnrichiSupp fic = new FichierEnrichiSupp("Nok3Cols.csv"); + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkNok3Cols.csv"); fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); assertThat(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains("La première ligne du fichier doit contenir 3 colonnes (ppn;rcr;epn)")) @@ -29,25 +32,64 @@ void checkNok3Cols() { @DisplayName("checkOk3Cols") @Test - void checkOk3Cols() {} + void checkOk3Cols() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkOk3Cols.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } @DisplayName("checkPpnNonOk") @Test - void checkPpnNonOk() {} + void checkPpnNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkPpnNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGPPN)); + } @DisplayName("checkRcrNonOk") @Test - void checkRcrNonOk() {} + void checkRcrNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkRcrNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGRCR)); + } @DisplayName("checkEpnVide") @Test - void checkEpnVide() {} + void checkEpnVide() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnVide.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } @DisplayName("checkEpnNonVideOk") @Test - void checkEpnNonVideOk() {} + void checkEpnNonVideOk() throws IOException, FileCheckingException { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnNonVideOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + fic.checkFileContent(demandeSupp); + } @DisplayName("checkEpnNonVideNonOk") @Test - void checkEpnNonVideNonOk() {} + void checkEpnNonVideNonOk() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkEpnNonVideNonOk.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGEPN)); + } + + @DisplayName("checkRcrDiffDemande") + @Test + void checkRcrDiffDemande() { + DemandeSupp demandeSupp = new DemandeSupp("341725201", new Date(), new Date(), TYPE_SUPPRESSION.EPN, "", new EtatDemande(1), new Utilisateur(1)); + FichierEnrichiSupp fic = new FichierEnrichiSupp("checkRcrDiffDemande.csv"); + fic.setPath(Paths.get("src/test/resources/fichierEnrichiSupp")); + assertTrue(assertThrows(FileCheckingException.class, () -> fic.checkFileContent(demandeSupp)).getMessage().contains(Constant.ERR_FILE_WRONGRCR)); + } } diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv new file mode 100644 index 00000000..81301c9a --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +321654987;341725201;123 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv new file mode 100644 index 00000000..562fb034 --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnNonVideOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +321654987;341725201;123456789 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv b/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv new file mode 100644 index 00000000..baafbbee --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341725201; \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/Nok3Cols.csv b/core/src/test/resources/fichierEnrichiSupp/checkNok3Cols.csv similarity index 100% rename from core/src/test/resources/fichierEnrichiSupp/Nok3Cols.csv rename to core/src/test/resources/fichierEnrichiSupp/checkNok3Cols.csv diff --git a/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv b/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv new file mode 100644 index 00000000..2110b66c --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341725201;321654987 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv new file mode 100644 index 00000000..6d32498a --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123;341725201;123456789 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv b/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv new file mode 100644 index 00000000..fd950380 --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkRcrDiffDemande.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;341720001;456789321 \ No newline at end of file diff --git a/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv b/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv new file mode 100644 index 00000000..ad8a312b --- /dev/null +++ b/core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv @@ -0,0 +1,2 @@ +ppn;rcr;epn +123456789;12;123456789 \ No newline at end of file