Skip to content

Commit b4b7bdb

Browse files
committed
Remove NEW & array
1 parent f1ef2ef commit b4b7bdb

File tree

7 files changed

+196
-180
lines changed

7 files changed

+196
-180
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ openapi.json
2929
!**/.vscode/settings.json.default
3030

3131
devtools/volume/
32+
delta_backend/deploy_lambda.sh

delta_backend/poetry.lock

Lines changed: 167 additions & 139 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

delta_backend/src/Converter.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
class Converter:
2020

2121
def __init__(self, fhir_data):
22-
self.imms = []
2322
self.converted = {}
2423
self.error_records = []
2524
self.fhir_data = fhir_data # Store JSON data directly
@@ -126,8 +125,7 @@ def runConversion(self, json_data, summarise=False, report_unexpected_exception=
126125
error_summary = ""
127126
self.converted["CONVERSION_ERRORS"] = error_summary
128127

129-
self.imms.append(self.converted)
130-
return self.imms
128+
return self.converted
131129

132130
def getErrorRecords(self):
133131
return self.error_records

delta_backend/src/delta.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,14 @@ def handler(event, context):
6868
supplier_system = new_image["SupplierSystem"]["S"]
6969
if supplier_system not in ("DPSFULL", "DPSREDUCED"):
7070
operation = new_image["Operation"]["S"]
71-
if operation == "CREATE":
72-
operation = "NEW"
71+
# TODO check NEW is correct
72+
# action_flag = "NEW" if operation == "CREATE" else operation
73+
action_flag = operation
7374
resource_json = json.loads(new_image["Resource"]["S"])
7475
FHIRConverter = Converter(json.dumps(resource_json))
7576
flat_json = FHIRConverter.runConversion(resource_json) # Get the flat JSON
7677
error_records = FHIRConverter.getErrorRecords()
77-
flat_json[0]["ACTION_FLAG"] = operation
78+
flat_json["ACTION_FLAG"] = action_flag
7879
response = delta_table.put_item(
7980
Item={
8081
"PK": str(uuid.uuid4()),
@@ -84,7 +85,7 @@ def handler(event, context):
8485
"SupplierSystem": supplier_system,
8586
"DateTimeStamp": approximate_creation_time.isoformat(),
8687
"Source": delta_source,
87-
"Imms": str(flat_json),
88+
"Imms": flat_json,
8889
"ExpiresAt": expiry_time_epoch,
8990
}
9091
)

delta_backend/tests/test_convert_to_flat_json.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
import json
22
import unittest
3-
import os
4-
import time
5-
from datetime import datetime, timedelta
6-
from decimal import Decimal
73
from copy import deepcopy
8-
from unittest import TestCase
94
from unittest.mock import patch, Mock
105
from moto import mock_dynamodb, mock_sqs
11-
from boto3 import resource as boto3_resource, client as boto3_client
6+
from boto3 import resource as boto3_resource
127
from tests.utils_for_converter_tests import ValuesForTests, ErrorValuesForTests
13-
from botocore.config import Config
14-
from pathlib import Path
15-
from zoneinfo import ZoneInfo
168
from SchemaParser import SchemaParser
179
from Converter import Converter
1810
from ConversionChecker import ConversionChecker, RecordError
@@ -130,11 +122,16 @@ def assert_dynamodb_record(self, operation_flag, items, expected_values, expecte
130122
self.assertGreater(len(filtered_items), 0, f"No matching item found for {operation_flag}")
131123

132124
imms_data = filtered_items[0]["Imms"]
133-
self.assertIsInstance(imms_data, str)
125+
self.assertIsInstance(imms_data, dict)
134126
self.assertGreater(len(imms_data), 0)
135127

136128
# Check Imms JSON structure matches exactly
137-
self.assertEqual(imms_data, str(expected_imms), "Imms data does not match expected JSON structure")
129+
# self.assertEqual(imms_data, expected_imms, "Imms data does not match expected JSON structure")
130+
for key, expected_value in expected_imms.items():
131+
actual = imms_data.get(key)
132+
print(f"Key: {key}, Actual: {actual}, Expected: {expected_value}")
133+
self.assertEqual(actual, expected_value, f"{key} mismatch")
134+
138135

139136
for key, expected_value in expected_values.items():
140137
self.assertIn(key, filtered_items[0], f"{key} is missing")
@@ -169,13 +166,12 @@ def test_fhir_converter_json_error_scenario(self):
169166
errorRecords = FHIRConverter.getErrorRecords()
170167

171168
# Check if bad data creates error records
172-
print(f"Error Test Case, {len(errorRecords)}")
173169
self.assertTrue(len(errorRecords) > 0)
174170

175171
def test_handler_imms_convert_to_flat_json(self):
176172
"""Test that the Imms field contains the correct flat JSON data for CREATE, UPDATE, and DELETE operations."""
177173
expected_action_flags = [
178-
{"Operation": "CREATE", "EXPECTED_ACTION_FLAG": "NEW"},
174+
{"Operation": "CREATE", "EXPECTED_ACTION_FLAG": "CREATE"},
179175
{"Operation": "UPDATE", "EXPECTED_ACTION_FLAG": "UPDATE"},
180176
{"Operation": "DELETE", "EXPECTED_ACTION_FLAG": "DELETE"},
181177
]
@@ -435,7 +431,6 @@ def test_convert_to_date(self, MockLookUpData):
435431

436432
# 7 Validate all error logs of various responses
437433
messages = [err["message"] for err in checker.errorRecords]
438-
print(f"Error Test Case, {messages}")
439434

440435
self.assertIn("Value is not a string", messages)
441436

@@ -486,7 +481,6 @@ def test_convert_to_date_time(self, MockLookUpData):
486481
self.assertEqual(result, "")
487482

488483
messages = [err["message"] for err in checker.errorRecords]
489-
print(f"Error Test Case, {messages}")
490484

491485
self.assertIn("Unexpected exception [ValueError]", messages[0])
492486
self.assertIn("Unsupported Format or offset", messages[1])
@@ -676,7 +670,7 @@ def _run_test(self, expected_forename):
676670
"""Helper function to run the test"""
677671
self.converter = Converter(json.dumps(request_json_data))
678672
flat_json = self.converter.runConversion(request_json_data, False, True)
679-
self.assertEqual(flat_json[0]["PERSON_FORENAME"], expected_forename)
673+
self.assertEqual(flat_json["PERSON_FORENAME"], expected_forename)
680674

681675
class TestPersonSurNameToFlatJson(unittest.TestCase):
682676

@@ -764,7 +758,7 @@ def _run_test_surname(self, expected_forename):
764758
"""Helper function to run the test"""
765759
self.converter = Converter(json.dumps(request_json_data))
766760
flat_json = self.converter.runConversion(request_json_data, False, True)
767-
self.assertEqual(flat_json[0]["PERSON_SURNAME"], expected_forename)
761+
self.assertEqual(flat_json["PERSON_SURNAME"], expected_forename)
768762

769763

770764
class TestPersonPostalCodeToFlatJson(unittest.TestCase):
@@ -853,7 +847,7 @@ def _run_postal_code_test(self, expected_postal_code):
853847
"""Helper function to run the test"""
854848
self.converter = Converter(json.dumps(request_json_data))
855849
flat_json = self.converter.runConversion(request_json_data, False, True)
856-
self.assertEqual(flat_json[0]["PERSON_POSTCODE"], expected_postal_code)
850+
self.assertEqual(flat_json["PERSON_POSTCODE"], expected_postal_code)
857851

858852

859853
class TestPersonSiteCodeToFlatJson(unittest.TestCase):
@@ -972,7 +966,7 @@ def _run_site_code_test(self, expected_site_code):
972966
"""Helper function to run the test"""
973967
self.converter = Converter(json.dumps(request_json_data))
974968
flat_json = self.converter.runConversion(request_json_data, False, True)
975-
self.assertEqual(flat_json[0].get("SITE_CODE"), expected_site_code)
969+
self.assertEqual(flat_json.get("SITE_CODE"), expected_site_code)
976970

977971

978972
class TestPersonSiteUriToFlatJson(unittest.TestCase):
@@ -1063,7 +1057,7 @@ def _run_site_uri_test(self, expected_site_code):
10631057
"""Helper function to run the test"""
10641058
self.converter = Converter(json.dumps(request_json_data))
10651059
flat_json = self.converter.runConversion(request_json_data, False, True)
1066-
self.assertEqual(flat_json[0].get("SITE_CODE_TYPE_URI"), expected_site_code)
1060+
self.assertEqual(flat_json.get("SITE_CODE_TYPE_URI"), expected_site_code)
10671061

10681062

10691063
class TestPractitionerForeNameToFlatJson(unittest.TestCase):
@@ -1179,7 +1173,7 @@ def _run_practitioner_test(self, expected_forename):
11791173
"""Helper function to run the test"""
11801174
self.converter = Converter(json.dumps(request_json_data))
11811175
flat_json = self.converter.runConversion(request_json_data, False, True)
1182-
self.assertEqual(flat_json[0]["PERFORMING_PROFESSIONAL_FORENAME"], expected_forename)
1176+
self.assertEqual(flat_json["PERFORMING_PROFESSIONAL_FORENAME"], expected_forename)
11831177

11841178

11851179
class TestPractitionerSurNameToFlatJson(unittest.TestCase):
@@ -1293,7 +1287,7 @@ def _run_test_practitioner_surname(self, expected_forename):
12931287
"""Helper function to run the test"""
12941288
self.converter = Converter(json.dumps(request_json_data))
12951289
flat_json = self.converter.runConversion(request_json_data, False, True)
1296-
self.assertEqual(flat_json[0]["PERFORMING_PROFESSIONAL_SURNAME"], expected_forename)
1290+
self.assertEqual(flat_json["PERFORMING_PROFESSIONAL_SURNAME"], expected_forename)
12971291

12981292
if __name__ == "__main__":
12991293
unittest.main()

delta_backend/tests/test_converter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ def test_runConversion_success(self, mock_checker, mock_schema_parser, mock_fhir
7878

7979
result = converter.runConversion(json_data={"occurrenceDateTime": "2023-01-01T12:00:00"})
8080

81-
self.assertEqual(len(result), 1)
82-
self.assertIn("someFlatField", result[0])
83-
self.assertEqual(result[0]["someFlatField"], "converted_value")
81+
self.assertEqual(len(result), 2)
82+
self.assertIn("someFlatField", result)
83+
self.assertEqual(result["someFlatField"], "converted_value")
8484

8585
@patch('Converter.extract_person_names', return_value=("John", "Doe"))
8686
@patch('Converter.get_valid_address', return_value="12345")

delta_backend/tests/utils_for_converter_tests.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ def get_event(event_name="INSERT", operation="CREATE", supplier="EMIS"):
167167
@staticmethod
168168
def get_expected_imms(expected_action_flag):
169169
"""Returns expected Imms JSON data with the given action flag."""
170-
return [
171-
{
170+
return {
172171
"NHS_NUMBER": "9000000009",
173172
"PERSON_FORENAME": "Sam",
174173
"PERSON_SURNAME": "Trailor",
@@ -205,10 +204,8 @@ def get_expected_imms(expected_action_flag):
205204
"LOCATION_CODE_TYPE_URI": "https://fhir.nhs.uk/Id/ods-organization-code",
206205
"CONVERSION_ERRORS": ''
207206
}
208-
]
209207

210-
expected_imms = [
211-
{
208+
expected_imms = {
212209
"NHS_NUMBER": "9000000009",
213210
"PERSON_FORENAME": "Sam",
214211
"PERSON_SURNAME": "Trailor",
@@ -245,10 +242,8 @@ def get_expected_imms(expected_action_flag):
245242
"LOCATION_CODE_TYPE_URI": "https://fhir.nhs.uk/Id/ods-organization-code",
246243
"CONVERSION_ERRORS": ''
247244
}
248-
]
249245

250-
expected_imms2 = [
251-
{
246+
expected_imms2 = {
252247
"NHS_NUMBER": "9000000009",
253248
"PERSON_FORENAME": "Sam",
254249
"PERSON_SURNAME": "Trailor",
@@ -285,7 +280,6 @@ def get_expected_imms(expected_action_flag):
285280
"LOCATION_CODE_TYPE_URI": "https://fhir.nhs.uk/Id/ods-organization-code",
286281
"CONVERSION_ERRORS": ''
287282
}
288-
]
289283

290284

291285
class ErrorValuesForTests:

0 commit comments

Comments
 (0)