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

Merge branch 'fix_modele' into 'main'

[SOY] corrections pour rendre le paramètre modele non obligatoire dans les calculs

See merge request !31
parents d0d4671b d02c8c7d
No related branches found
Tags 2.0.1
1 merge request!31[SOY] corrections pour rendre le paramètre modele non obligatoire dans les calculs
Pipeline #335613 passed
......@@ -2,6 +2,10 @@
Tous les changements de ce projet seront documentés dans ce document.
## [2.0.1] - 2024-07-10
- Correction bug lors du lancement d'un calcul pour un équipement physique dont le modèle n'est pas renseigné -> [Issue8](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/8)
## [2.0.0] - 2024-06-14
Adaptations pour être conforme avec le référentiel méthodologique d'évaluation environnementale des Systèmes d'Information [(RCP SI)](https://librairie.ademe.fr/consommer-autrement/6649-referentiel-methodologique-d-evaluation-environnementale-des-systemes-d-information-si.html):
......
......@@ -7,7 +7,7 @@ physical-eq-005;P2720DC;2;;2022-11-04;2023-06-16;-4.5;-1;2;Monitor;In stock;Fran
physical-eq-006;PIXEL 6;1;;2022-10-18;2022-12-18;0.1;0.2;0.2;Communication Device;Missing;France;;;;MY ENTERPRISE;;365;;;test;haute
physical-eq-007;UP2516D;1;;2022-07-31;2023-06-16;4.5;;;Monitor;Retired;France;;;;MY ENTERPRISE;;365;;;0.9;basse
physical-eq-008;UP2516D;2;;2022-03-10;2023-06-16;4.5;1;2;Wrong / Type;In stock;France;;;;MY ENTERPRISE;;365;;COPE;0.6;
physical-eq-009;Unknown;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;COPE;0;
physical-eq-009;;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;COPE;0;
physical-eq-010;Unknown;3;;2021-08-09;2023-06-16;4.5;1;2;IP Router;In use;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-011;HP 8440p;1;;2021-08-05;2023-06-16;4.5;1;2;Wrong \type;Missing;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-012;HP 8440p;1;;2023-04-27;2023-06-16;4.5;1;2;Personal Computer;Retired;France;;;;MY ENTERPRISE;;365;;;;
......@@ -17,7 +17,7 @@ physical-eq-015;CROSSCALL;1;;2022-08-20;2023-06-16;4.5;1;2;Communication Device;
physical-eq-016;CROSSCALL;11;;2022-05-20;2023-06-16;4.5;1;2;Communication Device;In stock;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-017;CROSSCALL;8;;2022-05-28;2023-06-16;4.5;1;2;Communication Device;In use;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-018;HUAWEI P9;11;;2021-01-28;2023-06-16;4.5;1;2;Communication Device;In stock;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-019;HUAWEI P9;4;;2022-08-18;2023-06-16;4.5;1;2;Communication Device;Retired;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-019;;4;;2022-08-18;2023-06-16;4.5;1;2;Communication Device;Retired;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-020;HUAWEI P9;1;;2023-06-18;2023-06-16;4.5;1;2;Communication Device;Missing;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-021;HUAWEI P9;32;;2021-01-28;2023-06-16;4.5;1;2;Communication Device;Missing;France;;;;MY ENTERPRISE;;365;;;;
physical-eq-022;HUAWEI P9;9;;2024-08-18;2023-06-16;4.5;1;2;Communication Device;Retired;France;;;;MY ENTERPRISE;;365;;;;
......
......@@ -46,8 +46,9 @@ public class EnrichissementEquipementPhysiqueService {
});
calculEquipementPhysique.setHypotheses(hypotheses);
calculEquipementPhysique.setCorrespondanceRefEquipement(referentielClient.getCorrespondanceRefEquipement(equipementPhysiqueDTO.getModele()));
if (equipementPhysiqueDTO.getModele() != null) {
calculEquipementPhysique.setCorrespondanceRefEquipement(referentielClient.getCorrespondanceRefEquipement(equipementPhysiqueDTO.getModele()));
}
calculEquipementPhysique.setTypeEquipement(referentielClient.getTypeEquipement(equipementPhysiqueDTO.getType()));
calculEquipementPhysique.setImpactsEquipement(new ArrayList<>());
......
......@@ -121,7 +121,7 @@ class EnrichissementEquipementPhysiqueServiceTest {
}
@Test
void testServiceEnrichissementEquipementPhysqique_correspondanceRefEquipement() throws JsonProcessingException {
void testServiceEnrichissementEquipementPhysique_correspondanceRefEquipement() throws JsonProcessingException {
/* MOCK REFERENTIEL : CorrespondanceRefEquipement */
Mockito.when(referentielClient.getCorrespondanceRefEquipement("blade-server--28")).thenReturn(mapper.readValue("""
......@@ -150,7 +150,7 @@ class EnrichissementEquipementPhysiqueServiceTest {
@Test
void testServiceEnrichissementEquipementPhysqique_typeEquipement() throws JsonProcessingException {
void testServiceEnrichissementEquipementPhysique_typeEquipement() throws JsonProcessingException {
/* MOCK REFERENTIEL : CorrespondanceRefEquipement */
Mockito.when(referentielClient.getTypeEquipement("Server")).thenReturn(mapper.readValue("""
......@@ -163,6 +163,8 @@ class EnrichissementEquipementPhysiqueServiceTest {
var impactEquipementDTO = new ImpactEquipementDTO();
impactEquipementDTO.setValeur(2.2);
equipementPhysiqueDTO.setModele(null);
Mockito.when(referentielClient.getImpactEquipement(eq("default-ref-server"), any(), any())).thenReturn(impactEquipementDTO);
var actual = enrichissementEquipementPhysiqueService.serviceEnrichissementEquipementPhysique(equipementPhysiqueDTO);
......
......@@ -103,11 +103,15 @@ public class ErrorManagementService {
// CA 1.5
// L'ajout d'un équipement physique dont le type d'équipement ne possède pas de refEquipementParDefaut et dont le Modele n'est pas présent dans la table des ref_CorrespondanceRefEqP sort l'erreur suivante dans le rapport de contrôle
if (StringUtils.isBlank(refEquipementParDefaut)) {
CorrespondanceRefEquipementDTO refCorrespondance = referentielServicePort.getCorrespondance(equipementPhysique.getModele());
if (refCorrespondance == null) {
if (equipementPhysique.getModele() == null) {
erreurs.add(messageProperties.getMessages().get("EQUIPEMENT_CORRESPONDANCE_INCONNUE").formatted(equipementPhysique.getNomEquipementPhysique(), equipementPhysique.getType()));
} else {
refEquipement = refCorrespondance.getRefEquipementCible();
CorrespondanceRefEquipementDTO refCorrespondance = referentielServicePort.getCorrespondance(equipementPhysique.getModele());
if (refCorrespondance == null) {
erreurs.add(messageProperties.getMessages().get("EQUIPEMENT_CORRESPONDANCE_INCONNUE").formatted(equipementPhysique.getNomEquipementPhysique(), equipementPhysique.getType()));
} else {
refEquipement = refCorrespondance.getRefEquipementCible();
}
}
}
......
......@@ -16,6 +16,7 @@ import org.mte.numecoeval.expositiondonneesentrees.domain.model.EquipementPhysiq
import org.mte.numecoeval.expositiondonneesentrees.domain.model.OperationNonIT;
import org.mte.numecoeval.expositiondonneesentrees.domain.ports.output.ReferentielServicePort;
import org.mte.numecoeval.expositiondonneesentrees.infrastructure.config.MessageProperties;
import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.CorrespondanceRefEquipementDTO;
import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.CritereDTO;
import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.EtapeDTO;
import org.mte.numecoeval.expositiondonneesentrees.referentiels.generated.api.model.FacteurCaracterisationDTO;
......@@ -165,7 +166,88 @@ public class ErrorManagementServiceTest {
}
@Test
void importOperationNonIT_with_TypeNotInRefType_shouldReturnReportWith1Error() {
void importEqPhysique_shouldReturnReportWithoutError() {
EquipementPhysique eq1 = EquipementPhysique.builder()
.nomEquipementPhysique("physical-eq-001")
.quantite(1.0)
.dureeUsageInterne(1.0)
.dureeUsageAval(0.0)
.statut("In use")
.paysDUtilisation("France")
.build();
var actual = errorManagementService.checkEquipementPhysique(eq1, "ref");
Assertions.assertFalse(actual.getKey().stream().anyMatch("L'équipement physical-eq-001 de type null ne possède pas de référence d'équipement par défaut dans la table ref_type_item et pas de correspondance dans la table ref_correspondance_ref_eqp"::equals));
}
@Test
void importEqPhysique_with_ModeleNull_shouldReturnReportWith1Error() {
EquipementPhysique eq1 = EquipementPhysique.builder()
.nomEquipementPhysique("physical-eq-001")
.quantite(1.0)
.type("phone")
.dureeUsageInterne(1.0)
.dureeUsageAval(0.0)
.statut("In use")
.paysDUtilisation("France")
.build();
Mockito.lenient().when(referentielServicePort.getCorrespondance(eq1.getType())).thenReturn(null);
var actual = errorManagementService.checkEquipementPhysique(eq1, "");
Assertions.assertTrue(actual.getKey().stream().anyMatch("L'équipement physical-eq-001 de type phone ne possède pas de référence d'équipement par défaut dans la table ref_type_item et pas de correspondance dans la table ref_correspondance_ref_eqp"::equals));
}
@Test
void importEqPhysique_with_ModeleAndCorrepondance_shouldReportWithoutError() throws JsonProcessingException {
EquipementPhysique eq1 = EquipementPhysique.builder()
.nomEquipementPhysique("physical-eq-001")
.quantite(1.0)
.modele("P123")
.type("phone")
.dureeUsageInterne(1.0)
.dureeUsageAval(0.0)
.statut("In use")
.paysDUtilisation("France")
.build();
/* MOCK REFERENTIEL : CorrespondanceRefEquipement */
Mockito.lenient().when(referentielServicePort.getCorrespondance(eq1.getModele())).thenReturn(mapper.readValue("""
{
"modeleEquipementSource": "P123",
"refEquipementCible": "smartphone-1"
}
""", CorrespondanceRefEquipementDTO.class));
var actual = errorManagementService.checkEquipementPhysique(eq1, "");
Assertions.assertFalse(actual.getKey().stream().anyMatch("L'équipement physical-eq-001 de type null ne possède pas de référence d'équipement par défaut dans la table ref_type_item et pas de correspondance dans la table ref_correspondance_ref_eqp"::equals));
}
@Test
void importEqPhysique_with_Modele_without_Correspondance_shouldReturnReportWith1Error() throws JsonProcessingException {
EquipementPhysique eq1 = EquipementPhysique.builder()
.nomEquipementPhysique("physical-eq-001")
.quantite(1.0)
.type("phone")
.dureeUsageInterne(1.0)
.dureeUsageAval(0.0)
.statut("In use")
.paysDUtilisation("France")
.build();
/* MOCK REFERENTIEL : CorrespondanceRefEquipement */
Mockito.lenient().when(referentielServicePort.getCorrespondance(eq1.getModele())).thenReturn(mapper.readValue("""
{
"modeleEquipementSource": "P123",
"refEquipementCible": "smartphone-1"
}
""", CorrespondanceRefEquipementDTO.class));
var actual = errorManagementService.checkEquipementPhysique(eq1, "");
Assertions.assertTrue(actual.getKey().stream().anyMatch("L'équipement physical-eq-001 de type phone ne possède pas de référence d'équipement par défaut dans la table ref_type_item et pas de correspondance dans la table ref_correspondance_ref_eqp"::equals));
}
@Test
void importOperationNonIT_with_TypeNotInRefType_shouldNotReturnError() {
OperationNonIT eq1 = OperationNonIT.builder()
.nomItemNonIT("Batiment_datacenter_St_Malo")
.quantite(1.0)
......
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