Skip to content

Commit f08c94a

Browse files
authored
Merge pull request #394 from ansforge/feat/converter/validate-rs-sr-resource-in-rs-ri
Feat/converter : Validation de la présence de la ressource RS-SR dans le RS-RI lors de la conversion
2 parents 5ea4276 + 478a2f2 commit f08c94a

4 files changed

Lines changed: 47 additions & 0 deletions

File tree

converter/converter/cisu/resources_info/resources_info_cisu_constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ class ResourcesInfoCISUConstants:
44
VEHICLE_TYPE_PATH = "$.vehicleType"
55

66
CASE_ID_FIELD = "caseId"
7+
RESOURCE_ID_KEY = "resourceId"
78
PATIENT_ID_KEY = "patientId"
89
POSITION_KEY = "position"
910

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
class ResourcesStatusConstants:
22
RESOURCE_STATUS_PATH = "$.resourceStatus"
33
CASE_ID = "$.caseId"
4+
RESOURCE_ID = "$.resourceId"

converter/converter/cisu/resources_status/resources_status_converter.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
from converter.cisu.resources_info.resources_info_cisu_converter import (
99
ResourcesInfoCISUConverter,
1010
)
11+
from converter.cisu.resources_info.resources_info_cisu_constants import (
12+
ResourcesInfoCISUConstants,
13+
)
1114
from converter.cisu.resources_status.resources_status_constants import (
1215
ResourcesStatusConstants,
1316
)
@@ -46,6 +49,7 @@ def from_rs_to_cisu(
4649
raise ValueError(f"No RS-RI found for caseId: {case_id!r}")
4750

4851
rs_ri = rs_ri_msg.payload
52+
cls.check_resource_belongs_to_case(rs_ri, current_use_case)
4953

5054
rs_sr_edxl_list = [pm.payload for pm in persisted_rs_sr]
5155
rs_sr_edxl_list.append(edxl_json)
@@ -58,3 +62,26 @@ def from_rs_to_cisu(
5862
)
5963

6064
return ResourcesInfoCISUConverter.convert_single_rs_ri(output_json, enriched)
65+
66+
@classmethod
67+
def check_resource_belongs_to_case(
68+
cls, rs_ri: Dict[str, Any], rs_sr_use_case: Dict[str, Any]
69+
) -> None:
70+
case_id = get_field_value(rs_sr_use_case, ResourcesStatusConstants.CASE_ID)
71+
resource_id = get_field_value(
72+
rs_sr_use_case, ResourcesStatusConstants.RESOURCE_ID
73+
)
74+
75+
rs_ri_content = ResourcesInfoCISUConverter.copy_rs_input_use_case_content(rs_ri)
76+
resources = (
77+
get_field_value(rs_ri_content, ResourcesInfoCISUConstants.RESOURCE_PATH)
78+
or []
79+
)
80+
resource_ids_in_rs_ri = {
81+
r.get(ResourcesInfoCISUConstants.RESOURCE_ID_KEY) for r in resources
82+
}
83+
84+
if resource_id not in resource_ids_in_rs_ri:
85+
raise ValueError(
86+
f"Resource '{resource_id}' from RS-SR not found in RS-RI for caseId '{case_id}'"
87+
)

converter/tests/cisu/test_resources_status_converter.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,21 @@ def test_from_rs_to_cisu_no_rs_ri():
7575
):
7676
with pytest.raises(ValueError, match="No RS-RI found for caseId"):
7777
ResourcesStatusConverter.from_rs_to_cisu(rs_sr_new)
78+
79+
80+
def test_from_rs_to_cisu_resource_not_in_rs_ri():
81+
unknown_resource_id = "fr.fire.sis076.cgo-076.resource.UNKNOWN_VLM"
82+
rs_sr = make_rs_sr_from_sample(_CASE_ID, unknown_resource_id, "ARRIVEE")
83+
rs_ri = make_rs_ri_from_sample(_CASE_ID)
84+
85+
with (
86+
patch(
87+
_PATCH_GET_RS_MESSAGES,
88+
return_value=persisted_rs_ri_and_rs_sr(rs_ri, []),
89+
),
90+
pytest.raises(
91+
ValueError,
92+
match=f"Resource '{unknown_resource_id}' from RS-SR not found in RS-RI for caseId '{_CASE_ID}'",
93+
),
94+
):
95+
ResourcesStatusConverter.from_rs_to_cisu(rs_sr)

0 commit comments

Comments
 (0)