Skip to content
Snippets Groups Projects
Commit 6a2a6cd8 authored by LEMERCIER Denis's avatar LEMERCIER Denis
Browse files

Merge branch 'fix_warning_taux_utilisation' into 'develop'

[SOY] fix warning taux utilisation

See merge request !13
parents 718971b8 b3576b1f
No related branches found
No related tags found
2 merge requests!22Préparation release 1.4.0,!13[SOY] fix warning taux utilisation
Pipeline #257824 passed
...@@ -10,6 +10,7 @@ import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.ImportDonn ...@@ -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.domain.ports.output.ReferentielServicePort;
import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.StatutTraitement; import org.mte.numecoeval.expositiondonneesentrees.generated.api.model.StatutTraitement;
import org.mte.numecoeval.expositiondonneesentrees.infrastructure.helper.CSVHelper; 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.infrastructure.service.ErrorManagementService;
import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.TypeEquipementDTO; import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.TypeEquipementDTO;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -51,6 +52,8 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { ...@@ -51,6 +52,8 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
final ErrorManagementService errorManagementService; final ErrorManagementService errorManagementService;
final DefaultValueService defaultValueService;
final Map<String, String> errorMessages; final Map<String, String> errorMessages;
@Value("#{'${constraints.mode-utilisation}'.split(',')}") @Value("#{'${constraints.mode-utilisation}'.split(',')}")
...@@ -190,6 +193,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { ...@@ -190,6 +193,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
.setTrim(true) .setTrim(true)
.setSkipHeaderRecord(true) .setSkipHeaderRecord(true)
.build().parse(reader); .build().parse(reader);
records.forEach(csvRecord -> records.forEach(csvRecord ->
{ {
String typeEquipement = csvRecord.get("type"); String typeEquipement = csvRecord.get("type");
...@@ -207,13 +211,6 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { ...@@ -207,13 +211,6 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
Float goTelecharge = goTelechargeStr == null ? null : NumberUtils.toFloat(goTelechargeStr); Float goTelecharge = goTelechargeStr == null ? null : NumberUtils.toFloat(goTelechargeStr);
var tauxUtilisationStr = CSVHelper.safeString(csvRecord, "tauxUtilisation"); var tauxUtilisationStr = CSVHelper.safeString(csvRecord, "tauxUtilisation");
Double tauxUtilisation = NumberUtils.isCreatable(tauxUtilisationStr) ? NumberUtils.toDouble(tauxUtilisationStr) : null; 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() EquipementPhysique equipementToAdd = EquipementPhysique.builder()
.statutTraitement(STATUT_TRAITEMENT_EN_ATTENTE) .statutTraitement(STATUT_TRAITEMENT_EN_ATTENTE)
...@@ -232,7 +229,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { ...@@ -232,7 +229,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
.nbCoeur(CSVHelper.safeString(csvRecord, "nbCoeur")) .nbCoeur(CSVHelper.safeString(csvRecord, "nbCoeur"))
.nomCourtDatacenter(CSVHelper.safeString(csvRecord, "nomCourtDatacenter", "refDatacenter")) .nomCourtDatacenter(CSVHelper.safeString(csvRecord, "nomCourtDatacenter", "refDatacenter"))
.goTelecharge(goTelecharge) .goTelecharge(goTelecharge)
.modeUtilisation(modeUtilisation) .modeUtilisation(CSVHelper.safeString(csvRecord, "modeUtilisation"))
.tauxUtilisation(tauxUtilisation) .tauxUtilisation(tauxUtilisation)
.nbJourUtiliseAn(CSVHelper.safeDouble(csvRecord, "nbJourUtiliseAn")) .nbJourUtiliseAn(CSVHelper.safeDouble(csvRecord, "nbJourUtiliseAn"))
.consoElecAnnuelle(CSVHelper.safeDouble(csvRecord, "consoElecAnnuelle")) .consoElecAnnuelle(CSVHelper.safeDouble(csvRecord, "consoElecAnnuelle"))
...@@ -244,7 +241,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort { ...@@ -244,7 +241,7 @@ public class ImportDonneesEntreePortImpl implements ImportDonneesEntreePort {
var erreurs = errorManagementService.checkEquipementPhysique(equipementToAdd, refTypeEquipementOpt.get().getRefEquipementParDefaut()); var erreurs = errorManagementService.checkEquipementPhysique(equipementToAdd, refTypeEquipementOpt.get().getRefEquipementParDefaut());
rapportImport.getErreurs().addAll(erreurs.getKey()); rapportImport.getErreurs().addAll(erreurs.getKey());
avertissements.addAll(erreurs.getValue()); avertissements.addAll(erreurs.getValue());
defaultValueService.setEquipementValeurDefaut(equipementToAdd);
domainModels.add(equipementToAdd); domainModels.add(equipementToAdd);
} }
}); });
......
...@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; ...@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.ImportDonneesEntreePort; 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.input.impl.ImportDonneesEntreePortImpl;
import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort; 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.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
...@@ -17,13 +18,13 @@ import java.util.List; ...@@ -17,13 +18,13 @@ import java.util.List;
public class ApplicationPortConfig { public class ApplicationPortConfig {
private ReferentielServicePort referentielServicePort; private ReferentielServicePort referentielServicePort;
private ErrorManagementService errorManagementService; private ErrorManagementService errorManagementService;
private DefaultValueService defaultValueService;
private MessageProperties messageProperties; private MessageProperties messageProperties;
private List<String> modeUtilisationList; private List<String> modeUtilisationList;
@Bean @Bean
public ImportDonneesEntreePort importDonneesEntreePort() { public ImportDonneesEntreePort importDonneesEntreePort() {
return new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, messageProperties.getMessages(), modeUtilisationList); return new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, defaultValueService, messageProperties.getMessages(), modeUtilisationList);
} }
} }
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);
}
}
}
...@@ -9,6 +9,7 @@ import org.mockito.MockitoAnnotations; ...@@ -9,6 +9,7 @@ import org.mockito.MockitoAnnotations;
import org.mte.numecoeval.expositiondonneesentrees.domain.model.*; import org.mte.numecoeval.expositiondonneesentrees.domain.model.*;
import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.impl.ImportDonneesEntreePortImpl; import org.mte.numecoeval.expositiondonneesentrees.domain.ports.input.impl.ImportDonneesEntreePortImpl;
import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort; 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.mte.numecoeval.expositiondonneesentrees.infrastructure.service.ErrorManagementService;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -31,12 +32,14 @@ class ImportDonneesEntreePortImplTest { ...@@ -31,12 +32,14 @@ class ImportDonneesEntreePortImplTest {
ImportDonneesEntreePortImpl importDonneesEntreePort; ImportDonneesEntreePortImpl importDonneesEntreePort;
ErrorManagementService errorManagementService; ErrorManagementService errorManagementService;
DefaultValueService defaultValueService;
private List<String> modeUtilisationList; private List<String> modeUtilisationList;
@BeforeEach @BeforeEach
public void init() { public void init() {
MockitoAnnotations.openMocks(this); MockitoAnnotations.openMocks(this);
importDonneesEntreePort = new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, errorMessages, modeUtilisationList); importDonneesEntreePort = new ImportDonneesEntreePortImpl(referentielServicePort, errorManagementService, defaultValueService, errorMessages, modeUtilisationList);
} }
@Test @Test
......
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());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment