Skip to content

Commit 390334f

Browse files
committed
correct unit test
1 parent f873882 commit 390334f

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

delta_backend/.coverage

0 Bytes
Binary file not shown.

delta_backend/src/ConversionChecker.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,14 @@ def _log_error(self, fieldName, fieldValue, e, code=ExceptionMessages.RECORD_CHE
100100
if isinstance(e, Exception):
101101
message = ExceptionMessages.MESSAGES[ExceptionMessages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, str(e))
102102
else:
103-
message = str(e) # if a simple string message was passed
103+
message = str(e) # if a simple string message was passed
104+
105+
# Ensure message-level deduplication
106+
if any(existing.get("message") == message for existing in self.errorRecords):
107+
return
108+
104109
self.errorRecords.append({
105-
"code":code,
110+
"code": code,
106111
"field": fieldName,
107112
"value": fieldValue,
108113
"message": message

delta_backend/src/Converter.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,24 @@ class Converter:
2828
def __init__(self, fhir_data):
2929
self.FHIRData = fhir_data # Store JSON data directly
3030
self.SchemaFile = ConversionLayout.ConvertLayout
31+
# self.ErrorRecords = []
32+
33+
# Utility logs tailored to conveter class errors
34+
def _log_error(self,e,code=ExceptionMessages.UNEXPECTED_EXCEPTION):
35+
message = str(e) # if a simple string message was passed
36+
37+
if any(existing.get("message") == message for existing in ErrorRecords):
38+
return
39+
40+
error_obj = {
41+
"code": code,
42+
"message": message
43+
}
44+
45+
# Ensure message-level deduplication
46+
# if not any(existing.get("message") == message for existing in self.ErrorRecords):
47+
ErrorRecords.append(error_obj)
48+
return error_obj
3149

3250
# create a FHIR parser - uses fhir json data from delta
3351
# (helper methods to extract values from the nested FHIR structure)
@@ -74,10 +92,8 @@ def runConversion(self, json_data, summarise=False, report_unexpected_exception=
7492
dataParser = self._getFHIRParser(self.FHIRData)
7593
except Exception as e:
7694
if report_unexpected_exception:
77-
message = "FHIR Parser Unexpected exception [%s]: %s" % (e.__class__.__name__, e)
78-
p = {"code": 0, "message": message}
79-
ErrorRecords.append(p)
80-
return p
95+
error = self._log_error("FHIR Parser Unexpected exception [%s]: %s" % (e.__class__.__name__, e),code=0)
96+
return error
8197

8298
try:
8399
schemaParser = self._getSchemaParser(self.SchemaFile)
@@ -87,6 +103,9 @@ def runConversion(self, json_data, summarise=False, report_unexpected_exception=
87103
p = {"code": 0, "message": message}
88104
ErrorRecords.append(p)
89105
return p
106+
# error = self._log_error("FHIR Parser Unexpected exception [%s]: %s" % (e.__class__.__name__, e),code=0)
107+
# return error
108+
90109

91110
try:
92111
ConversionValidate = ConversionChecker(dataParser, summarise, report_unexpected_exception)
@@ -128,6 +147,9 @@ def runConversion(self, json_data, summarise=False, report_unexpected_exception=
128147
def getErrorRecords(self):
129148
return ErrorRecords
130149

150+
# def getErrorRecords(self):
151+
# return self.ErrorRecords
152+
131153
def extract_patient_details(self, json_data, FlatFieldName):
132154
if not hasattr(self, "_cached_values"):
133155
self._cached_values = {}

delta_backend/tests/sample_data/fhir_sample.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"coding": [
4747
{
4848
"system": "http://snomed.info/sct",
49-
"code": "13246810000001",
49+
"code": "13246810000001git",
5050
"display": "Administration of first dose of severe acute respiratory syndrome coronavirus 2 vaccine (procedure)"
5151
}
5252
]

delta_backend/tests/test_convert_to_flat_json.py

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
request_json_data = ValuesForTests.json_data
2626
with patch.dict("os.environ", MOCK_ENV_VARS):
2727
from delta import handler, Converter
28-
from Converter import imms, ErrorRecords
28+
from Converter import imms
2929

3030

3131
@patch.dict("os.environ", MOCK_ENV_VARS, clear=True)
@@ -215,22 +215,27 @@ def test_fhir_parser_exception(self, mock_fhir_parser):
215215
self.assertEqual(len(response), 2)
216216
self.assertIn("FHIR Parser Unexpected exception", converter.getErrorRecords()[0]["message"])
217217
self.assertEqual(converter.getErrorRecords()[0]["code"], 0)
218-
218+
219+
@patch("Converter.FHIRParser")
219220
@patch("Converter.SchemaParser")
220-
def test_schema_parser_exception(self, mock_schema_parser):
221+
def test_schema_parser_exception(self, mock_schema_parser, mock_fhir_parser):
222+
223+
# Mock FHIRParser to return normally
224+
mock_fhir_instance = Mock()
225+
mock_fhir_instance.parseFHIRData.return_value = None
226+
mock_fhir_parser.return_value = mock_fhir_instance
227+
221228
# Mock SchemaParser to raise an exception
222229
mock_schema_parser.side_effect = Exception("Schema Parsing Error")
223-
converter = Converter(fhir_data="some_data")
230+
converter = Converter(fhir_data="{}")
224231

225-
response = converter.runConversion("some_data")
232+
converter.runConversion("some_data")
226233

227234
# Check if the error message was added to ErrorRecords
228-
self.assertEqual(len(response), 2)
229-
self.assertIn(
230-
"FHIR Parser Unexpected exception [JSONDecodeError]: Expecting value: line 1 column 1 (char 0)",
231-
converter.getErrorRecords()[0]["message"],
232-
)
233-
self.assertEqual(converter.getErrorRecords()[0]["code"], 0)
235+
errors = converter.getErrorRecords()
236+
self.assertEqual(len(errors), 3)
237+
self.assertIn("Schema Parser Unexpected exception", errors[2]["message"])
238+
self.assertEqual(errors[0]["code"], 0)
234239

235240
@patch("Converter.ConversionChecker")
236241
def test_conversion_checker_exception(self, mock_conversion_checker):
@@ -257,7 +262,7 @@ def test_get_conversions_exception(self, mock_get_conversions):
257262
response = converter.runConversion(ValuesForTests.json_data)
258263

259264
# Check if the error message was added to ErrorRecords
260-
self.assertEqual(len(converter.getErrorRecords()), 3)
265+
self.assertEqual(len(converter.getErrorRecords()), 2)
261266
self.assertIn(
262267
"FHIR Parser Unexpected exception [JSONDecodeError]: Expecting value: line 1 column 1 (char 0)",
263268
converter.getErrorRecords()[0]["message"],
@@ -269,7 +274,6 @@ def test_get_conversions_exception(self, mock_get_conversions):
269274
def test_conversion_exceptions(self, mock_get_key_value, mock_get_conversions):
270275
mock_get_conversions.side_effect = Exception("Error while getting conversions")
271276
mock_get_key_value.side_effect = Exception("Key value retrieval failed")
272-
ErrorRecords.clear()
273277
converter = Converter(fhir_data="some_data")
274278

275279
schema = {
@@ -383,7 +387,7 @@ def test_convert_to_date(self, MockLookUpData):
383387
self.assertIn("Date cannot be in the future", messages)
384388

385389
# Confirm Total Errors Per conversion
386-
self.assertEqual(len(checker.errorRecords), 5)
390+
self.assertEqual(len(checker.errorRecords), 4)
387391

388392
@patch("ConversionChecker.LookUpData")
389393
def test_convert_to_date_time(self, MockLookUpData):
@@ -536,6 +540,7 @@ def _run_test(self, expected_forename):
536540
flat_json = self.converter.runConversion(request_json_data, False, True)
537541
self.assertEqual(flat_json[0]["PERSON_FORENAME"], expected_forename)
538542

543+
539544
class TestPersonSurNameToFlatJson(unittest.TestCase):
540545

541546
def test_person_surname_multiple_names_official(self):
@@ -624,6 +629,7 @@ def _run_test_surname(self, expected_forename):
624629
flat_json = self.converter.runConversion(request_json_data, False, True)
625630
self.assertEqual(flat_json[0]["PERSON_SURNAME"], expected_forename)
626631

632+
627633
class TestPersonPostalCodeToFlatJson(unittest.TestCase):
628634
def test_person_postal_code_single_address(self):
629635
"""Test case where only one address instance exists"""
@@ -712,6 +718,7 @@ def _run_postal_code_test(self, expected_postal_code):
712718
flat_json = self.converter.runConversion(request_json_data, False, True)
713719
self.assertEqual(flat_json[0]["PERSON_POSTCODE"], expected_postal_code)
714720

721+
715722
class TestPersonSiteCodeToFlatJson(unittest.TestCase):
716723
def test_site_code_single_performer(self):
717724
"""Test case where only one performer instance exists"""
@@ -830,6 +837,7 @@ def _run_site_code_test(self, expected_site_code):
830837
flat_json = self.converter.runConversion(request_json_data, False, True)
831838
self.assertEqual(flat_json[0].get("SITE_CODE"), expected_site_code)
832839

840+
833841
class TestPersonSiteUriToFlatJson(unittest.TestCase):
834842
def test_site_uri_single_performer(self):
835843
"""Test case where only one performer instance exists"""
@@ -920,6 +928,7 @@ def _run_site_uri_test(self, expected_site_code):
920928
flat_json = self.converter.runConversion(request_json_data, False, True)
921929
self.assertEqual(flat_json[0].get("SITE_CODE_TYPE_URI"), expected_site_code)
922930

931+
923932
class TestPractitionerForeNameToFlatJson(unittest.TestCase):
924933
def test_practitioner_forename_multiple_names_official(self):
925934
"""Test case where multiple name instances exist, and one has use=official with period covering vaccination date"""
@@ -1035,6 +1044,7 @@ def _run_practitioner_test(self, expected_forename):
10351044
flat_json = self.converter.runConversion(request_json_data, False, True)
10361045
self.assertEqual(flat_json[0]["PERFORMING_PROFESSIONAL_FORENAME"], expected_forename)
10371046

1047+
10381048
class TestPractitionerSurNameToFlatJson(unittest.TestCase):
10391049
def test_practitioner_surname_multiple_names_official(self):
10401050
"""Test case where multiple name instances exist, and one has use=official with period covering vaccination date"""

delta_backend/tests/test_delta.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from src.delta import send_message, handler # Import after setting environment variables
1212
import json
1313

14+
1415
class DeltaTestCase(unittest.TestCase):
1516

1617
def setUp(self):

0 commit comments

Comments
 (0)