Skip to content

Commit 80cd8ff

Browse files
committed
Unit Tests Pass
1 parent 26d507a commit 80cd8ff

File tree

2 files changed

+115
-116
lines changed

2 files changed

+115
-116
lines changed

delta_backend/src/delta.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,6 @@ def handler(event, context):
176176
log_data["operation_outcome"] = operation_outcome
177177
firehose_log["event"] = log_data
178178
firehose_logger.send_log(firehose_log)
179-
return {"statusCode": 500, "body": "Internal server error"}
180-
181-
# raise Exception(f"Delta Lambda failure: {e}")
179+
# @TODO remove this exception and replace with 500 response
180+
# after investigating the impact of this change ``` return {"statusCode": 500, "body": "Internal server error"} ```
181+
raise Exception(f"Delta Lambda failure: {e}")

delta_backend/tests/test_delta.py

Lines changed: 112 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ def setUp_mock_resources(self, mock_boto_resource, mock_boto_client):
5151

5252
@staticmethod
5353
def get_event(event_name="INSERT", operation="CREATE", supplier="EMIS", n_records=1):
54-
""" create test event for the handler function"""
55-
pk = "covid#"
54+
"""Create test event for the handler function."""
5655
return {
5756
"Records": [
58-
DeltaTestCase.get_event_record(f"{pk}#000{i}", event_name, operation, supplier)
57+
DeltaTestCase.get_event_record(f"covid#{i+1}2345", event_name, operation, supplier)
5958
for i in range(n_records)
6059
]
6160
}
@@ -69,12 +68,12 @@ def get_event_record(pk, event_name="INSERT", operation="CREATE", supplier="EMIS
6968
"ApproximateCreationDateTime": 1690896000,
7069
"NewImage": {
7170
"PK": {"S": pk},
72-
"PatientSK": {"S": "covid#12345"},
71+
"PatientSK": {"S": pk},
7372
"IdentifierPK": {"S": "system#1"},
7473
"Operation": {"S": operation},
7574
"SupplierSystem": {"S": supplier},
7675
"Resource": {
77-
"S": get_test_data_resource(),
76+
"S": json.dumps(get_test_data_resource()),
7877
},
7978
},
8079
},
@@ -85,11 +84,11 @@ def get_event_record(pk, event_name="INSERT", operation="CREATE", supplier="EMIS
8584
"dynamodb": {
8685
"ApproximateCreationDateTime": 1690896000,
8786
"Keys": {
88-
"PK": {"S": "covid#12345"},
89-
"PatientSK": {"S": "covid#12345"},
87+
"PK": {"S": pk},
88+
"PatientSK": {"S": pk},
9089
"SupplierSystem": {"S": "EMIS"},
9190
"Resource": {
92-
"S": get_test_data_resource
91+
"S": json.dumps(get_test_data_resource()),
9392
},
9493
},
9594
},
@@ -148,7 +147,7 @@ def test_handler_success_insert(self, mock_boto_resource):
148147
@patch("boto3.resource")
149148
def test_handler_failure(self, mock_boto_resource):
150149
# Arrange
151-
mock_boto_resource.side_effect = Exception("Simulated DynamoDB failure")
150+
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
152151
event = self.get_event()
153152

154153
# Act
@@ -157,107 +156,107 @@ def test_handler_failure(self, mock_boto_resource):
157156
# Assert
158157
self.assertEqual(result["statusCode"], 500)
159158

160-
# @patch("boto3.resource")
161-
# def test_handler_success_update(self, mock_boto_resource):
162-
# # Arrange
163-
# self.setup_mock_dynamodb(mock_boto_resource)
164-
# event = self.get_event(event_name="UPDATE", operation="UPDATE")
165-
166-
# # Act
167-
# result = handler(event, self.context)
168-
169-
# # Assert
170-
# self.assertEqual(result["statusCode"], 200)
171-
172-
# @patch("boto3.resource")
173-
# def test_handler_success_remove(self, mock_boto_resource):
174-
# # Arrange
175-
# self.setup_mock_dynamodb(mock_boto_resource)
176-
# event = self.get_event(event_name="REMOVE", operation="DELETE")
177-
178-
# # Act
179-
# result = handler(event, self.context)
180-
181-
# # Assert
182-
# self.assertEqual(result["statusCode"], 200)
183-
184-
# @patch("boto3.resource")
185-
# @patch("boto3.client")
186-
# def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client):
187-
# # Arrange
188-
# self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
189-
# mock_boto_client.return_value = MagicMock()
190-
# event = self.get_event()
191-
192-
# # Act & Assert
193-
194-
# result = handler(event, self.context)
195-
# self.assertEqual(result["statusCode"], 500)
196-
197-
# @patch("boto3.resource")
198-
# @patch("boto3.client")
199-
# def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client):
200-
# # Arrange
201-
# self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
202-
# event = self.get_event()
203-
# context = {}
204-
205-
# # Act & Assert
206-
# with self.assertRaises(Exception):
207-
# handler(event, context)
208-
209-
# @patch("boto3.resource")
210-
# @patch("delta.handler")
211-
# def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_boto_client):
212-
# # Arrange
213-
# self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
214-
# event = self.get_event()
215-
# context = {}
216-
217-
# # Act & Assert
218-
# with self.assertRaises(Exception):
219-
# handler(event, context)
220-
221-
# @patch("delta.firehose_logger.send_log") # Mock Firehose logger
222-
# @patch("delta.logger.info") # Mock logging
223-
# def test_dps_record_skipped(self, mock_logger_info, mock_firehose_send_log):
224-
# event = self.get_event(supplier="DPSFULL")
225-
# context = {}
226-
227-
# response = handler(event, context)
228-
# print(f"final response1: {response}")
229-
230-
# self.assertEqual(response["statusCode"], 200)
231-
# self.assertEqual(response["body"], "Record from DPS skipped for 12345")
232-
233-
# # Check logging and Firehose were called
234-
# mock_logger_info.assert_called_with("Record from DPS skipped for 12345")
235-
236-
# # TODO - amend test once error handling implemented
237-
# @patch("delta.firehose_logger.send_log")
238-
# @patch("delta.logger.info")
239-
# @patch("Converter.Converter")
240-
# @patch("delta.boto3.resource")
241-
# def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_firehose_send_log):
242-
# mock_converter_instance = MagicMock()
243-
# mock_converter_instance.runConversion.return_value = [{}]
244-
# mock_converter_instance.getErrorRecords.return_value = [{"error": "Invalid field"}]
245-
# mock_converter.return_value = mock_converter_instance
246-
247-
# # Mock DynamoDB put_item success
248-
# mock_table = MagicMock()
249-
# mock_dynamodb.return_value.Table.return_value = mock_table
250-
# mock_table.put_item.return_value = {"ResponseMetadata": {"HTTPStatusCode": 200}}
251-
252-
# event = self.get_event()
253-
# context = {}
254-
255-
# response = handler(event, context)
256-
# print(f"final response: {response}")
257-
258-
# # self.assertEqual(response["statusCode"], 207)
259-
# # self.assertIn("Partial success", response["body"])
260-
261-
# # Check logging and Firehose were called
262-
# # mock_logger_info.assert_called()
263-
# # mock_firehose_send_log.assert_called()
159+
@patch("boto3.resource")
160+
def test_handler_success_update(self, mock_boto_resource):
161+
# Arrange
162+
self.setup_mock_dynamodb(mock_boto_resource)
163+
event = self.get_event(event_name="UPDATE", operation="UPDATE")
164+
165+
# Act
166+
result = handler(event, self.context)
167+
168+
# Assert
169+
self.assertEqual(result["statusCode"], 200)
170+
171+
@patch("boto3.resource")
172+
def test_handler_success_remove(self, mock_boto_resource):
173+
# Arrange
174+
self.setup_mock_dynamodb(mock_boto_resource)
175+
event = self.get_event(event_name="REMOVE", operation="DELETE")
176+
177+
# Act
178+
result = handler(event, self.context)
179+
180+
# Assert
181+
self.assertEqual(result["statusCode"], 200)
182+
183+
@patch("boto3.resource")
184+
@patch("boto3.client")
185+
def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client):
186+
# Arrange
187+
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
188+
mock_boto_client.return_value = MagicMock()
189+
event = self.get_event()
190+
191+
# Act & Assert
192+
193+
result = handler(event, self.context)
194+
self.assertEqual(result["statusCode"], 500)
195+
196+
@patch("boto3.resource")
197+
@patch("boto3.client")
198+
def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client):
199+
# Arrange
200+
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
201+
event = self.get_event()
202+
context = {}
203+
204+
# Act & Assert
205+
with self.assertRaises(Exception):
206+
handler(event, context)
207+
208+
@patch("boto3.resource")
209+
@patch("delta.handler")
210+
def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_boto_client):
211+
# Arrange
212+
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
213+
event = self.get_event()
214+
context = {}
215+
216+
# Act & Assert
217+
with self.assertRaises(Exception):
218+
handler(event, context)
219+
220+
@patch("delta.firehose_logger.send_log") # Mock Firehose logger
221+
@patch("delta.logger.info") # Mock logging
222+
def test_dps_record_skipped(self, mock_logger_info, mock_firehose_send_log):
223+
event = self.get_event(supplier="DPSFULL")
224+
context = {}
225+
226+
response = handler(event, context)
227+
print(f"final response1: {response}")
228+
229+
self.assertEqual(response["statusCode"], 200)
230+
self.assertEqual(response["body"], "Record from DPS skipped for 12345")
231+
232+
# Check logging and Firehose were called
233+
mock_logger_info.assert_called_with("Record from DPS skipped for 12345")
234+
235+
# TODO - amend test once error handling implemented
236+
@patch("delta.firehose_logger.send_log")
237+
@patch("delta.logger.info")
238+
@patch("Converter.Converter")
239+
@patch("delta.boto3.resource")
240+
def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_firehose_send_log):
241+
mock_converter_instance = MagicMock()
242+
mock_converter_instance.runConversion.return_value = [{}]
243+
mock_converter_instance.getErrorRecords.return_value = [{"error": "Invalid field"}]
244+
mock_converter.return_value = mock_converter_instance
245+
246+
# Mock DynamoDB put_item success
247+
mock_table = MagicMock()
248+
mock_dynamodb.return_value.Table.return_value = mock_table
249+
mock_table.put_item.return_value = {"ResponseMetadata": {"HTTPStatusCode": 200}}
250+
251+
event = self.get_event()
252+
context = {}
253+
254+
response = handler(event, context)
255+
print(f"final response: {response}")
256+
257+
# self.assertEqual(response["statusCode"], 207)
258+
# self.assertIn("Partial success", response["body"])
259+
260+
# Check logging and Firehose were called
261+
# mock_logger_info.assert_called()
262+
# mock_firehose_send_log.assert_called()

0 commit comments

Comments
 (0)