diff --git a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java index 05c1b14b..21f19400 100644 --- a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java +++ b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java @@ -13,6 +13,7 @@ import fr.abes.item.core.configuration.factory.StrategyFactory; import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_DEMANDE; +import fr.abes.item.core.service.ReferenceService; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; @@ -54,6 +55,7 @@ public class JobConfiguration { private final StrategyFactory strategyFactory; private final ProxyRetry proxyRetry; + private final ReferenceService referenceService; @Value("${batch.min.hour}") int minHour; @@ -69,9 +71,10 @@ public class JobConfiguration { private Integer nbPpnInFileResult; - public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry) { + public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService) { this.strategyFactory = strategyFactory; this.proxyRetry = proxyRetry; + this.referenceService = referenceService; } @Bean @@ -88,7 +91,7 @@ public LignesFichierReader reader() { @Bean @StepScope public LignesFichierProcessor processor() { - return new LignesFichierProcessor(strategyFactory, proxyRetry); + return new LignesFichierProcessor(strategyFactory, proxyRetry, this.referenceService); } @Bean public LignesFichierWriter writer() { diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java index 79916edc..e6bbdd02 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/CreerFichierSauvegardeTasklet.java @@ -1,6 +1,7 @@ package fr.abes.item.batch.traitement; -import fr.abes.item.core.components.FichierSauvegardeSupp; +import fr.abes.item.core.components.FichierSauvegardeSuppCsv; +import fr.abes.item.core.components.FichierSauvegardeSuppTxt; import fr.abes.item.core.configuration.factory.FichierFactory; import fr.abes.item.core.configuration.factory.StrategyFactory; import fr.abes.item.core.constant.Constant; @@ -25,7 +26,8 @@ public class CreerFichierSauvegardeTasklet implements Tasklet, StepExecutionList private final StrategyFactory factory; private final String uploadPath; private Demande demande; - private FichierSauvegardeSupp fichier; + private FichierSauvegardeSuppTxt fichierTxt; + private FichierSauvegardeSuppCsv fichierCsv; public CreerFichierSauvegardeTasklet(StrategyFactory factory, String uploadPath) { this.factory = factory; @@ -45,17 +47,23 @@ public void beforeStep(@NonNull StepExecution stepExecution) { } @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - this.fichier = (FichierSauvegardeSupp) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE, TYPE_DEMANDE.SUPP); - fichier.generateFileName(this.demande); - fichier.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId())); + this.fichierTxt = (FichierSauvegardeSuppTxt) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE, TYPE_DEMANDE.SUPP); + fichierTxt.generateFileName(this.demande); + fichierTxt.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId())); + this.fichierCsv = (FichierSauvegardeSuppCsv) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE_2, TYPE_DEMANDE.SUPP); + fichierCsv.generateFileName(this.demande); + fichierCsv.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId())); + fichierCsv.writeHeader(); return RepeatStatus.FINISHED; } @Override public ExitStatus afterStep(StepExecution stepExecution) { if (stepExecution.getExitStatus().equals(ExitStatus.COMPLETED)) { - stepExecution.getJobExecution().getExecutionContext().put("fichierTxtPath", this.fichier.getPath().toString()); - stepExecution.getJobExecution().getExecutionContext().put("fichierTxtName", this.fichier.getFilename()); + stepExecution.getJobExecution().getExecutionContext().put("fichierTxtPath", this.fichierTxt.getPath().toString()); + stepExecution.getJobExecution().getExecutionContext().put("fichierTxtName", this.fichierTxt.getFilename()); + stepExecution.getJobExecution().getExecutionContext().put("fichierCsvPath", this.fichierCsv.getPath().toString()); + stepExecution.getJobExecution().getExecutionContext().put("fichierCsvName", this.fichierCsv.getFilename()); } return stepExecution.getExitStatus(); } diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java index f8a2b4c2..72e2e756 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java @@ -7,7 +7,8 @@ import fr.abes.cbs.notices.Zone; import fr.abes.item.batch.traitement.ProxyRetry; import fr.abes.item.batch.traitement.model.*; -import fr.abes.item.core.components.FichierSauvegardeSupp; +import fr.abes.item.core.components.FichierSauvegardeSuppCsv; +import fr.abes.item.core.components.FichierSauvegardeSuppTxt; import fr.abes.item.core.configuration.factory.StrategyFactory; import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_DEMANDE; @@ -15,6 +16,7 @@ import fr.abes.item.core.exception.QueryToSudocException; import fr.abes.item.core.exception.StorageException; import fr.abes.item.core.service.IDemandeService; +import fr.abes.item.core.service.ReferenceService; import fr.abes.item.core.service.impl.DemandeSuppService; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; @@ -31,18 +33,22 @@ import java.nio.file.Path; import java.sql.SQLException; import java.util.List; +import java.util.Optional; @Slf4j public class LignesFichierProcessor implements ItemProcessor, StepExecutionListener { private final StrategyFactory strategyFactory; private final ProxyRetry proxyRetry; - private FichierSauvegardeSupp fichierSauvegardeSupp; + private final ReferenceService referenceService; + private FichierSauvegardeSuppTxt fichierSauvegardeSuppTxt; + private FichierSauvegardeSuppCsv fichierSauvegardeSuppcsv; private Demande demande; - public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry) { + public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry,ReferenceService referenceService) { this.strategyFactory = strategyFactory; this.proxyRetry = proxyRetry; + this.referenceService = referenceService; } @@ -55,9 +61,14 @@ public void beforeStep(StepExecution stepExecution) { IDemandeService demandeService = strategyFactory.getStrategy(IDemandeService.class, typeDemande); Integer demandeId = (Integer) executionContext.get("demandeId"); this.demande = demandeService.findById(demandeId); - this.fichierSauvegardeSupp = new FichierSauvegardeSupp(); - this.fichierSauvegardeSupp.setPath(Path.of(String.valueOf(executionContext.get("fichierTxtPath")))); - this.fichierSauvegardeSupp.setFilename(String.valueOf(executionContext.get("fichierTxtName"))); + this.fichierSauvegardeSuppTxt = new FichierSauvegardeSuppTxt(); + this.fichierSauvegardeSuppTxt.setPath(Path.of(String.valueOf(executionContext.get("fichierTxtPath")))); + this.fichierSauvegardeSuppTxt.setFilename(String.valueOf(executionContext.get("fichierTxtName"))); + + this.fichierSauvegardeSuppcsv = new FichierSauvegardeSuppCsv(this.referenceService); + this.fichierSauvegardeSuppcsv.setPath(Path.of(String.valueOf(executionContext.get("fichierCsvPath")))); + this.fichierSauvegardeSuppcsv.setFilename(String.valueOf(executionContext.get("fichierCsvName"))); + log.info(Constant.POUR_LA_DEMANDE + this.demande.getNumDemande()); } @@ -144,8 +155,10 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) //récupération des exemplaires existants pour cette ligne List exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) .getExemplairesExistants(ligneFichierDtoSupp.getPpn()); - if (!exemplairesExistants.isEmpty()){ - this.fichierSauvegardeSupp.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplairesExistants); + Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); + if (exemplaireASupprimerOpt.isPresent()){ + this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); } //supprimer l'exemplaire this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp); diff --git a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java new file mode 100644 index 00000000..7aa7a714 --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java @@ -0,0 +1,121 @@ +package fr.abes.item.core.components; + +import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.Zone; +import fr.abes.item.core.constant.Constant; +import fr.abes.item.core.constant.TYPE_DEMANDE; +import fr.abes.item.core.entities.item.Demande; +import fr.abes.item.core.exception.FileCheckingException; +import fr.abes.item.core.exception.StorageException; +import fr.abes.item.core.service.ReferenceService; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Path; +import java.util.List; + +@Setter +@Getter +@Component +@Slf4j +public class FichierSauvegardeSuppCsv extends AbstractFichier implements Fichier { + + private final ReferenceService referenceService; + + public FichierSauvegardeSuppCsv(ReferenceService referenceService) { + this.referenceService = referenceService; + } + + public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException { + try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true); + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { + // création de la liste de référence pour trouver l'emplacement de chaque zone et sous-zone + List listDeReference = referenceService.constructHeaderCsv(); + listDeReference.remove(0); + // ajout de la ligne + out.println(ppn + ";" + gererZones(listDeReference, exemplaire)); + } catch (IOException ex) { + throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt"); + } + } + + public String gererZones(List listeZonesEtSousZones, Exemplaire exemplaire) { + return gererZonesRecursif(listeZonesEtSousZones, 0, exemplaire, "", null); + } + + private String gererZonesRecursif(List listeZonesEtSousZones, int index, Exemplaire exemplaire, String resultat, Zone zone) { + if (index >= listeZonesEtSousZones.size()) { + if (resultat != null && !resultat.isEmpty()) { + return resultat.substring(0, resultat.length()-1); + } + return null; + } + String zoneSousZone = listeZonesEtSousZones.get(index); + + if (zoneSousZone.startsWith("$")) { + if (zone != null) { + String sousZone = zone.findSubLabel(zoneSousZone); + if (sousZone != null) { + resultat += sousZone; + } + } + } else { + zone = exemplaire.findZone(zoneSousZone.split("\\$")[0],0); + if (zone != null) { + String sousZone = zone.findSubLabel(zoneSousZone.split("\\$")[1]); + if (sousZone != null) { + resultat += sousZone; + } + } + } + return gererZonesRecursif(listeZonesEtSousZones, index+1, exemplaire, resultat + ";", zone); + } + + @Override + public String getFilename() { + return this.filename; + } + + @Override + public void setPath(Path path) { + this.path = path; + } + + @Override + public int getType() { + return Constant.ETATDEM_ATTENTE_2; + } + + @Override + public TYPE_DEMANDE getDemandeType() { + return TYPE_DEMANDE.SUPP; + } + + @Override + public void generateFileName(Demande demande) { + this.filename = Constant.FIC_SAUVEGARDE_NAME + demande.getId() + Constant.EXTENSIONCSV; + } + + @Override + public void checkFileContent(Demande d) throws FileCheckingException, IOException { + //non implémentée + } + + public void writeHeader() { + try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true); + BufferedWriter bw = new BufferedWriter(fw); + PrintWriter out = new PrintWriter(bw)) { + // ajout de la ligne + out.println(String.join(";", this.referenceService.constructHeaderCsv())); + } catch (IOException ex) { + throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt"); + } + } +} diff --git a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppTxt.java similarity index 81% rename from core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSupp.java rename to core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppTxt.java index 79acf377..ee008613 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSupp.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppTxt.java @@ -8,6 +8,7 @@ import fr.abes.item.core.exception.StorageException; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.BufferedWriter; @@ -15,23 +16,20 @@ import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Path; -import java.util.List; @Setter @Getter @Component -public class FichierSauvegardeSupp extends AbstractFichier implements Fichier { +@Slf4j +public class FichierSauvegardeSuppTxt extends AbstractFichier implements Fichier { - public void writePpnInFile(String ppn, List exemplaires) throws StorageException { + public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException { try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { out.println(ppn); - out.println("\n"); - exemplaires.forEach(exemplaire -> { - out.println(exemplaire); - out.println("\n"); - }); + out.print("\n"); + out.println(exemplaire); out.println("\n"); } catch (IOException ex) { throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt"); 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 2f287a5c..bf8ce134 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 @@ -25,6 +25,8 @@ public class Constant implements Serializable { public static final int ETATDEM_SIMULATION = 4; //Simulation terminée, demandeModif en attente de traitement par le batch public static final int ETATDEM_ATTENTE = 5; + //Etat en attente fictif pour gérer les 2 fichiers de sauvegardes pour les demandes de SUPP + public static final int ETATDEM_ATTENTE_2 = 11; //DemandeModif en cours de traitement par le batch public static final int ETATDEM_ENCOURS = 6; //DemandeModif traiteée et terminée @@ -50,7 +52,6 @@ public class Constant implements Serializable { public static final String TEXTE_991_CREA = "Exemplaire créé en masse par ITEM"; public static final String AUCUNE_DEMANDE = "AUCUNE DEMANDE"; public static final String DEFAULT = "default"; - public static final String DEMANDE = "La demande "; /**Authentication failed*/ public static final String UTILISATEUR_ABSENT_BASE = "Cet utilisateur n'existe pas dans la base de données."; diff --git a/core/src/main/java/fr/abes/item/core/entities/item/ZonesAutorisees.java b/core/src/main/java/fr/abes/item/core/entities/item/ZonesAutorisees.java index 9aa1f208..0613194d 100644 --- a/core/src/main/java/fr/abes/item/core/entities/item/ZonesAutorisees.java +++ b/core/src/main/java/fr/abes/item/core/entities/item/ZonesAutorisees.java @@ -27,7 +27,7 @@ public class ZonesAutorisees implements Serializable, GenericEntity { @Column(name = "INDICATEURS") private String indicateurs; - @OneToMany(mappedBy = "zone", fetch = FetchType.LAZY) + @OneToMany(mappedBy = "zone", fetch = FetchType.EAGER) private List sousZonesAutorisees; @ManyToMany diff --git a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java index f66fa3af..f449131a 100644 --- a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java +++ b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java @@ -1,14 +1,10 @@ package fr.abes.item.core.service; -import fr.abes.item.core.entities.item.EtatDemande; -import fr.abes.item.core.entities.item.IndexRecherche; -import fr.abes.item.core.entities.item.Traitement; -import fr.abes.item.core.entities.item.TypeExemp; -import fr.abes.item.core.repository.item.IEtatDemandeDao; -import fr.abes.item.core.repository.item.ITraitementDao; -import fr.abes.item.core.repository.item.ITypeExempDao; +import fr.abes.item.core.entities.item.*; +import fr.abes.item.core.repository.item.*; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -18,11 +14,13 @@ public class ReferenceService { private final IEtatDemandeDao etatDemandeDao; private final ITypeExempDao typeExempDao; private final ITraitementDao traitementDao; + private final IZonesAutoriseesDao iZonesAutoriseesDao; - public ReferenceService(IEtatDemandeDao etatDemandeDao, ITypeExempDao typeExempDao, ITraitementDao traitementDao) { + public ReferenceService(IEtatDemandeDao etatDemandeDao, ITypeExempDao typeExempDao, ITraitementDao traitementDao, IZonesAutoriseesDao iZonesAutoriseesDao) { this.etatDemandeDao = etatDemandeDao; this.typeExempDao = typeExempDao; this.traitementDao = traitementDao; + this.iZonesAutoriseesDao = iZonesAutoriseesDao; } @@ -65,4 +63,19 @@ public Traitement findTraitementById(Integer id) { public Integer findTraitementByDemandeId(Integer id) { return traitementDao.findTraitementByDemandeModifId(id); } + + public List constructHeaderCsv() { + List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); + List headerCsv = new ArrayList<>(); + headerCsv.add("PPN"); + for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { + if(!zonesAutorisees.getLabelZone().startsWith("L")){ + headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle()); + for (SousZonesAutorisees sousZonesAutorisees : zonesAutorisees.getSousZonesAutorisees()) { + headerCsv.add(sousZonesAutorisees.getLibelle()); + } + } + } + return headerCsv; + } } diff --git a/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java b/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java new file mode 100644 index 00000000..5b373d0d --- /dev/null +++ b/core/src/test/java/fr/abes/item/core/components/FichierSauvegardeSuppCsvTest.java @@ -0,0 +1,95 @@ +package fr.abes.item.core.components; + +import com.google.common.collect.Lists; +import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.TYPE_NOTICE; +import fr.abes.cbs.notices.Zone; +import fr.abes.item.core.service.ReferenceService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest(classes = {FichierSauvegardeSuppCsv.class}) +class FichierSauvegardeSuppCsvTest { + + @Autowired + private FichierSauvegardeSuppCsv fichierSauvegardeSuppCsv; + + @MockBean + private ReferenceService referenceService; + + @Test + void gererZonesAvec1Exemplaire() throws ZoneException { + List listZoneSousZone = List.of("930$c;$d;991$a".split(";")); + + Exemplaire exemplaire = new Exemplaire(); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE); + zone930.addSubLabel("$c", "test 930$c"); + zone930.addSubLabel("$d", "test 930$d"); + + exemplaire.addZone(zone930); + exemplaire.addZone("991", "$a", "test 991$a"); + + String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire); + + assertEquals("test 930$c;test 930$d;test 991$a", result); + } + + @Test + void gererZonesAvec1ExemplaireEtListeLongue() throws ZoneException { + List listZoneSousZone = List.of("915$a;917$a;930$a;$c;$d;$i;$j;991$a".split(";")); + + Exemplaire exemplaire = new Exemplaire(); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE); + zone930.addSubLabel("$c", "test 930$c"); + zone930.addSubLabel("$d", "test 930$d"); + + exemplaire.addZone(zone930); + exemplaire.addZone("991", "$a", "test 991$a"); + + String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire); + + assertEquals(";;;test 930$c;test 930$d;;;test 991$a", result); + } + + @Test + void gererZonesAvec1ExemplaireLong() throws ZoneException { + List listZoneSousZone = List.of("930$c;$i;$d".split(";")); + + Exemplaire exemplaire = new Exemplaire(); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE); + zone930.addSubLabel("$c", "test 930$c"); + zone930.addSubLabel("$d", "test 930$d"); + + exemplaire.addZone(zone930); + exemplaire.addZone("991", "$a", "test 991$a"); + + String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire); + + assertEquals("test 930$c;;test 930$d", result); + } + + @Test + void gereZonesAvecListeVide() throws ZoneException { + List listZoneSousZone = Lists.newArrayList(); + + Exemplaire exemplaire = new Exemplaire(); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE); + zone930.addSubLabel("$c", "test 930$c"); + zone930.addSubLabel("$d", "test 930$d"); + + exemplaire.addZone(zone930); + exemplaire.addZone("991", "$a", "test 991$a"); + + String result = fichierSauvegardeSuppCsv.gererZones(listZoneSousZone, exemplaire); + + assertNull(result); + } +} diff --git a/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java new file mode 100644 index 00000000..585c6277 --- /dev/null +++ b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java @@ -0,0 +1,73 @@ +package fr.abes.item.core.service; + +import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.ZoneException; +import fr.abes.item.core.entities.item.SousZonesAutorisees; +import fr.abes.item.core.entities.item.ZonesAutorisees; +import fr.abes.item.core.exception.QueryToSudocException; +import fr.abes.item.core.repository.item.IEtatDemandeDao; +import fr.abes.item.core.repository.item.ITraitementDao; +import fr.abes.item.core.repository.item.ITypeExempDao; +import fr.abes.item.core.repository.item.IZonesAutoriseesDao; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest(classes = {ReferenceService.class}) +class ReferenceServiceTest { + @Autowired + private ReferenceService referenceService; + @MockBean + private IEtatDemandeDao etatDemandeDao; + @MockBean + private ITypeExempDao typeExempDao; + @MockBean + private ITraitementDao traitementDao; + @MockBean + private IZonesAutoriseesDao iZonesAutoriseesDao; + + @Test + void constructHeaderCsv() { + // création de la zonesAutorisées1 + SousZonesAutorisees sousZonesAutorisees1 = new SousZonesAutorisees(); + sousZonesAutorisees1.setLibelle("$a"); + List sousZonesAutoriseesList1 = new ArrayList<>(); + sousZonesAutoriseesList1.add(sousZonesAutorisees1); + ZonesAutorisees zonesAutorisees1 = new ZonesAutorisees(); + zonesAutorisees1.setLabelZone("917"); + zonesAutorisees1.setSousZonesAutorisees(sousZonesAutoriseesList1); + + // création de la zoneAutorisées2 + SousZonesAutorisees sousZonesAutorisees2 = new SousZonesAutorisees(); + sousZonesAutorisees2.setLibelle("$c"); + SousZonesAutorisees sousZonesAutorisees3 = new SousZonesAutorisees(); + sousZonesAutorisees3.setLibelle("$d"); + List sousZonesAutorisees2List = new ArrayList<>(); + sousZonesAutorisees2List.add(sousZonesAutorisees2); + sousZonesAutorisees2List.add(sousZonesAutorisees3); + ZonesAutorisees zonesAutorisees2 = new ZonesAutorisees(); + zonesAutorisees2.setLabelZone("930"); + zonesAutorisees2.setSousZonesAutorisees(sousZonesAutorisees2List); + + // création de la liste de test + List zonesAutoriseesList = new ArrayList<>(); + zonesAutoriseesList.add(zonesAutorisees1); + zonesAutoriseesList.add(zonesAutorisees2); + + Mockito.when(iZonesAutoriseesDao.findAll()).thenReturn(zonesAutoriseesList); + + List test = referenceService.constructHeaderCsv(); + List reference = List.of("PPN;917$a;930$c;$d;".split(";")); + + assertEquals(reference,test); + + } +} diff --git a/pom.xml b/pom.xml index f200ed7d..73adca4d 100644 --- a/pom.xml +++ b/pom.xml @@ -147,6 +147,12 @@ maven-model 3.6.3 + + + com.opencsv + opencsv + 5.9 +