Skip to content

Commit

Permalink
ITEM-282 : Ajout TU sur vérification fichier enrichi suppression
Browse files Browse the repository at this point in the history
  • Loading branch information
pierre-maraval committed Oct 15, 2024
1 parent 017c2a8 commit a2e07a1
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
}
Expand All @@ -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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -48,32 +48,48 @@ 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++;
}
}
}

/**
* 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
*
* @param ligne ligne du fichier à analyser
* @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);
}
}
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/fr/abes/item/core/constant/Constant.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.";

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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)"))
Expand All @@ -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));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
321654987;341725201;123
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
321654987;341725201;123456789
2 changes: 2 additions & 0 deletions core/src/test/resources/fichierEnrichiSupp/checkEpnVide.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
123456789;341725201;
2 changes: 2 additions & 0 deletions core/src/test/resources/fichierEnrichiSupp/checkOk3Cols.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
123456789;341725201;321654987
2 changes: 2 additions & 0 deletions core/src/test/resources/fichierEnrichiSupp/checkPpnNonOk.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
123;341725201;123456789
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
123456789;341720001;456789321
2 changes: 2 additions & 0 deletions core/src/test/resources/fichierEnrichiSupp/checkRcrNonOk.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ppn;rcr;epn
123456789;12;123456789

0 comments on commit a2e07a1

Please sign in to comment.