diff --git a/converter/converter/cisu/identical_cisu_converter.py b/converter/converter/cisu/identical_cisu_converter.py new file mode 100644 index 000000000..cc3de26a6 --- /dev/null +++ b/converter/converter/cisu/identical_cisu_converter.py @@ -0,0 +1,13 @@ +from typing import Dict, Any + +from converter.cisu.base_cisu_converter import BaseCISUConverter + + +class IdenticalCISUConverter(BaseCISUConverter): + @classmethod + def from_rs_to_cisu(cls, edxl_json) -> Dict[str, Any]: + return edxl_json + + @classmethod + def from_cisu_to_rs(cls, edxl_json: Dict[str, Any]) -> Dict[str, Any]: + return edxl_json diff --git a/converter/converter/cisu/reference/reference_converter.py b/converter/converter/cisu/reference/reference_converter.py new file mode 100644 index 000000000..d20e063d2 --- /dev/null +++ b/converter/converter/cisu/reference/reference_converter.py @@ -0,0 +1,13 @@ +from converter.cisu.identical_cisu_converter import IdenticalCISUConverter + + +class ReferenceConverter(IdenticalCISUConverter): + REFERENCE_MESSAGE_TYPE = "reference" + + @classmethod + def get_rs_message_type(cls) -> str: + return cls.REFERENCE_MESSAGE_TYPE + + @classmethod + def get_cisu_message_type(cls) -> str: + return cls.REFERENCE_MESSAGE_TYPE diff --git a/converter/converter/conversion_strategy/cisu_conversion_strategy.py b/converter/converter/conversion_strategy/cisu_conversion_strategy.py index 059823833..3ba116f4d 100644 --- a/converter/converter/conversion_strategy/cisu_conversion_strategy.py +++ b/converter/converter/conversion_strategy/cisu_conversion_strategy.py @@ -3,6 +3,7 @@ from converter.cisu.create_case.create_case_cisu_converter import ( CreateCaseCISUConverter, ) +from converter.cisu.reference.reference_converter import ReferenceConverter from converter.cisu.resources_info.resources_info_cisu_converter import ( ResourcesInfoCISUConverter, ) @@ -80,6 +81,8 @@ def select_conversion_strategy(message_content): return CreateCaseCISUConverter elif "resourcesInfo" in message_content or "resourcesInfoCisu" in message_content: return ResourcesInfoCISUConverter + elif "reference" in message_content: + return ReferenceConverter else: deducted_message_type = extract_message_type_from_message_content( message_content diff --git a/converter/tests/cisu/snapshots/snap_test_reference_converter.py b/converter/tests/cisu/snapshots/snap_test_reference_converter.py new file mode 100644 index 000000000..3f3c54dc8 --- /dev/null +++ b/converter/tests/cisu/snapshots/snap_test_reference_converter.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# snapshottest: v1 - https://goo.gl/zC4yUc +from __future__ import unicode_literals + +from snapshottest import Snapshot + + +snapshots = Snapshot() + +snapshots[ + "TestSnapshotReferenceConverter::test_exhaustive_snapshot_cisu_to_rs 1" +] = """{ + "distributionID": "fr.health.samuA_2608323d-507d-4cbf-bf74-52007f8124ea", + "senderID": "fr.health.samuA", + "dateTimeSent": "2022-09-27T08:23:34+02:00", + "dateTimeExpires": "2072-09-27T08:23:34+02:00", + "distributionStatus": "Actual", + "distributionKind": "Report", + "descriptor": { + "language": "fr-FR", + "explicitAddress": { + "explicitAddressScheme": "hubex", + "explicitAddressValue": "fr.health.samuB" + } + }, + "content": [ + { + "jsonContent": { + "embeddedJsonContent": { + "message": { + "messageId": "2608323d-507d-4cbf-bf74-52007f8124ea", + "sender": { + "name": "samuA", + "URI": "hubsante:fr.health.samuA" + }, + "sentAt": "2022-09-27T08:23:34+02:00", + "status": "Actual", + "kind": "Report", + "recipient": [ + { + "name": "samuB", + "URI": "hubsante:fr.health.samuB" + } + ], + "reference": { + "distributionID": "fr.health.samuB_2607723d-507d-4cbf-bf74-12345f7064cd", + "refused": false, + "errorDistributionID": "2607723d-507d-4cbf-bf74-12345f7064cd", + "step": "ERREUR" + } + } + } + } + } + ] +}""" + +snapshots[ + "TestSnapshotReferenceConverter::test_exhaustive_snapshot_rs_to_cisu 1" +] = """{ + "distributionID": "fr.health.samuA_2608323d-507d-4cbf-bf74-52007f8124ea", + "senderID": "fr.health.samuA", + "dateTimeSent": "2022-09-27T08:23:34+02:00", + "dateTimeExpires": "2072-09-27T08:23:34+02:00", + "distributionStatus": "Actual", + "distributionKind": "Report", + "descriptor": { + "language": "fr-FR", + "explicitAddress": { + "explicitAddressScheme": "hubex", + "explicitAddressValue": "fr.health.samuB" + } + }, + "content": [ + { + "jsonContent": { + "embeddedJsonContent": { + "message": { + "messageId": "2608323d-507d-4cbf-bf74-52007f8124ea", + "sender": { + "name": "samuA", + "URI": "hubsante:fr.health.samuA" + }, + "sentAt": "2022-09-27T08:23:34+02:00", + "status": "Actual", + "kind": "Report", + "recipient": [ + { + "name": "samuB", + "URI": "hubsante:fr.health.samuB" + } + ], + "reference": { + "distributionID": "fr.health.samuB_2607723d-507d-4cbf-bf74-12345f7064cd", + "refused": false, + "errorDistributionID": "2607723d-507d-4cbf-bf74-12345f7064cd", + "step": "ERREUR" + } + } + } + } + } + ] +}""" diff --git a/converter/tests/cisu/test_identical_cisu_converter.py b/converter/tests/cisu/test_identical_cisu_converter.py new file mode 100644 index 000000000..98bf09763 --- /dev/null +++ b/converter/tests/cisu/test_identical_cisu_converter.py @@ -0,0 +1,15 @@ +from converter.cisu.identical_cisu_converter import IdenticalCISUConverter + +mock_message = {"message": {"content": "This is a mock CISU message.", "status": "200"}} + + +def test_from_rs_to_cisu(): + initial_message = mock_message.copy() + converted_message = IdenticalCISUConverter.from_rs_to_cisu(initial_message) + assert converted_message == mock_message + + +def test_from_cisu_to_rs(): + initial_message = mock_message.copy() + converted_message = IdenticalCISUConverter.from_cisu_to_rs(initial_message) + assert converted_message == mock_message diff --git a/converter/tests/cisu/test_reference_converter.py b/converter/tests/cisu/test_reference_converter.py new file mode 100644 index 000000000..541145914 --- /dev/null +++ b/converter/tests/cisu/test_reference_converter.py @@ -0,0 +1,23 @@ +import json +from snapshottest import TestCase +from converter.cisu.reference.reference_converter import ReferenceConverter +from tests.constants import TestConstants +from tests.test_helpers import TestHelper + + +class TestSnapshotReferenceConverter(TestCase): + def test_exhaustive_snapshot_rs_to_cisu(self): + message = TestHelper.create_edxl_json_from_sample( + TestConstants.EDXL_HEALTH_TO_HEALTH_ENVELOPE_PATH, + "tests/fixtures/RC-REF/RC-REF_V3.0_exhaustive_fill.json", + ) + output_data = ReferenceConverter.from_rs_to_cisu(message) + self.assertMatchSnapshot(json.dumps(output_data, indent=2)) + + def test_exhaustive_snapshot_cisu_to_rs(self): + message = TestHelper.create_edxl_json_from_sample( + TestConstants.EDXL_HEALTH_TO_HEALTH_ENVELOPE_PATH, + "tests/fixtures/RC-REF/RC-REF_V3.0_exhaustive_fill.json", + ) + output_data = ReferenceConverter.from_cisu_to_rs(message) + self.assertMatchSnapshot(json.dumps(output_data, indent=2))