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