From b3576b1f35e1f1137c1ab7e314243e07a1e79022 Mon Sep 17 00:00:00 2001 From: OURY Sarah <sarah.oury@soprasteria.com> Date: Thu, 14 Mar 2024 16:00:09 +0000 Subject: [PATCH] [SOY] fix warning taux utilisation --- .../impl/ImportDonneesEntreePortImpl.java | 15 ++--- .../config/ApplicationPortConfig.java | 5 +- .../service/DefaultValueService.java | 32 ++++++++++ .../ImportDonneesEntreePortImplTest.java | 5 +- .../service/DefaultValueServiceTest.java | 63 +++++++++++++++++++ 5 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueService.java create mode 100644 services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueServiceTest.java diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java index 2b155742..5a2cf1ad 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/domain/ports/input/impl/ImportDonneesEntreePortImpl.java @@ -10,6 +10,7 @@ import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.ImportDonn import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort; import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.StatutTraitement; import org.mte.numecoeval.expositiondonneesentrees.infrastructure.helper.CSVHelper; +import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.DefaultValueService; import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService; import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.TypeEquipementDTO; import org.slf4j.Logger; @@ -51,6 +52,8 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { final ErrorManagementService errorManagementService; + final DefaultValueService defaultValueService; + final Map<String, String> errorMessages; @Value("#{'${constraints.mode-utilisation}'.split(',')}") @@ -190,6 +193,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { .setTrim(true) .setSkipHeaderRecord(true) .build().parse(reader); + records.forEach(csvRecord -> { String typeEquipement = csvRecord.get("type"); @@ -207,13 +211,6 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { Float goTelecharge = goTelechargeStr == null ? null : NumberUtils.toFloat(goTelechargeStr); var tauxUtilisationStr = CSVHelper.safeString(csvRecord, "tauxUtilisation"); Double tauxUtilisation = NumberUtils.isCreatable(tauxUtilisationStr) ? NumberUtils.toDouble(tauxUtilisationStr) : null; - if (tauxUtilisation != null && (tauxUtilisation < 0 || tauxUtilisation > 1)) { - tauxUtilisation = null; - } - var modeUtilisation = CSVHelper.safeString(csvRecord, "modeUtilisation"); - if (!modeUtilisationList.contains(modeUtilisation)) { - modeUtilisation = null; - } EquipementPhysique equipementToAdd = EquipementPhysique.builder() .statutTraitement(STATUT_TRAITEMENT_EN_ATTENTE) @@ -232,7 +229,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { .nbCoeur(CSVHelper.safeString(csvRecord, "nbCoeur")) .nomCourtDatacenter(CSVHelper.safeString(csvRecord, "nomCourtDatacenter", "refDatacenter")) .goTelecharge(goTelecharge) - .modeUtilisation(modeUtilisation) + .modeUtilisation(CSVHelper.safeString(csvRecord, "modeUtilisation")) .tauxUtilisation(tauxUtilisation) .nbJourUtiliseAn(CSVHelper.safeDouble(csvRecord, "nbJourUtiliseAn")) .consoElecAnnuelle(CSVHelper.safeDouble(csvRecord, "consoElecAnnuelle")) @@ -244,7 +241,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { var erreurs = errorManagementService.checkEquipementPhysique(equipementToAdd, refTypeEquipementOpt.get().getRefEquipementParDefaut()); rapportImport.getErreurs().addAll(erreurs.getKey()); avertissements.addAll(erreurs.getValue()); - + defaultValueService.setEquipementValeurDefaut(equipementToAdd); domainModels.add(equipementToAdd); } }); diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/config/ApplicationPortConfig.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/config/ApplicationPortConfig.java index 7a62c6b9..3a321cd0 100644 --- a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/config/ApplicationPortConfig.java +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/config/ApplicationPortConfig.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.ImportDonneesEntreePort; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.impl.ImportDonneesEntreePortImpl; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort; +import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.DefaultValueService; import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -17,13 +18,13 @@ import java.util.List; public class ApplicationPortConfig { private ReferentielServicePort referentielServicePort; - private ErrorManagementService errorManagementService; + private DefaultValueService defaultValueService; private MessageProperties messageProperties; private List<String> modeUtilisationList; @Bean public ImportDonneesEntreePort importDonneesEntreePort() { - return new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, messageProperties.getMessages(), modeUtilisationList); + return new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, defaultValueService, messageProperties.getMessages(), modeUtilisationList); } } diff --git a/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueService.java b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueService.java new file mode 100644 index 00000000..7d2a97d6 --- /dev/null +++ b/services/api-expositiondonneesentrees/src/main/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueService.java @@ -0,0 +1,32 @@ +package org.mte.numecoeval.expositiondonneesentrees.infrastructure.service; + +import lombok.AllArgsConstructor; +import org.mte.numecoeval.expositiondonneesentrees.domain.model.EquipementPhysique; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@AllArgsConstructor +public class DefaultValueService { + + @Value("#{'${constraints.mode-utilisation}'.split(',')}") + private List<String> modeUtilisationList; + + /** + * fonction à effet de bord qui permet de réaffecter certaines variables à leur valeur par défaut lorsque leur valeur initiale est incorrecte (créé un avertissement) + * + * @param equipementPhysique un equipementPhysique à enregistrer en base + */ + public void setEquipementValeurDefaut(EquipementPhysique equipementPhysique) { + if (equipementPhysique.getModeUtilisation() != null && !modeUtilisationList.contains(equipementPhysique.getModeUtilisation())) { + equipementPhysique.setModeUtilisation(null); + } + + Double taux = equipementPhysique.getTauxUtilisation(); + if (taux != null && (taux < 0 || taux > 1)) { + equipementPhysique.setTauxUtilisation(null); + } + } +} diff --git a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/domain/port/input/ImportDonneesEntreePortImplTest.java b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/domain/port/input/ImportDonneesEntreePortImplTest.java index a92ad7fc..d4063d47 100644 --- a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/domain/port/input/ImportDonneesEntreePortImplTest.java +++ b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/domain/port/input/ImportDonneesEntreePortImplTest.java @@ -9,6 +9,7 @@ import org.mockito.MockitoAnnotations; import org.mte.numecoeval.expositiondonneesentrees.domain.model.*; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.impl.ImportDonneesEntreePortImpl; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort; +import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.DefaultValueService; import org.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService; import org.springframework.web.multipart.MultipartFile; @@ -31,12 +32,14 @@ class ImportDonneesEntreePortImplTest { ImportDonneesEntreePortImpl importDonneesEntreePort; ErrorManagementService errorManagementService; + DefaultValueService defaultValueService; + private List<String> modeUtilisationList; @BeforeEach public void init() { MockitoAnnotations.openMocks(this); - importDonneesEntreePort = new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, errorMessages, modeUtilisationList); + importDonneesEntreePort = new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, defaultValueService, errorMessages, modeUtilisationList); } @Test diff --git a/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueServiceTest.java b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueServiceTest.java new file mode 100644 index 00000000..71e0a047 --- /dev/null +++ b/services/api-expositiondonneesentrees/src/test/java/org/mte/numecoeval/expositiondonneesentrees/infrastructure/service/DefaultValueServiceTest.java @@ -0,0 +1,63 @@ +package org.mte.numecoeval.expositiondonneesentrees.infrastructure.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mte.numecoeval.expositiondonneesentrees.domain.model.EquipementPhysique; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@ExtendWith(MockitoExtension.class) +public class DefaultValueServiceTest { + @InjectMocks + DefaultValueService defaultValueService; + private String mode = "COPE"; + + @BeforeEach + public void init() { + List<String> modeUtilisationList = List.of(mode); + defaultValueService = new DefaultValueService(modeUtilisationList); + } + + public EquipementPhysique equipementPhysique() { + return EquipementPhysique.builder().build(); + } + + @Test + void importEqPhysique_with_TauxUtilisationBiggerThan1_shouldBeReplacedByNull() { + EquipementPhysique eq1 = equipementPhysique(); + eq1.setTauxUtilisation(21.0); + defaultValueService.setEquipementValeurDefaut(eq1); + assertNull(eq1.getTauxUtilisation()); + } + + @Test + void importEqPhysique_with_TauxUtilisationOK_shouldReturnSameTaux() { + EquipementPhysique eq1 = equipementPhysique(); + double tauxOK = 0.74; + eq1.setTauxUtilisation(tauxOK); + defaultValueService.setEquipementValeurDefaut(eq1); + assertEquals(tauxOK, eq1.getTauxUtilisation(), 0.01); + } + + @Test + void importEqPhysique_with_ModeUtilisationKO_shouldBeReplacedByNull() { + EquipementPhysique eq1 = equipementPhysique(); + eq1.setModeUtilisation("MODE_INCONNU"); + defaultValueService.setEquipementValeurDefaut(eq1); + assertNull(eq1.getModeUtilisation()); + } + + @Test + void importEqPhysique_with_ModeUtilisationOK_shouldReturnSameMode() { + EquipementPhysique eq1 = equipementPhysique(); + eq1.setModeUtilisation(mode); + defaultValueService.setEquipementValeurDefaut(eq1); + assertEquals(mode, eq1.getModeUtilisation()); + } +} -- GitLab