11import json
2+ import os
23import unittest
34from copy import deepcopy
5+ from datetime import datetime
46from unittest .mock import patch , Mock
57from moto import mock_aws
68from boto3 import resource as boto3_resource
@@ -83,18 +85,23 @@ def get_event(event_name=EventName.CREATE, operation="operation", supplier="EMIS
8385 def assert_dynamodb_record (self , operation_flag , action_flag , items , expected_values , expected_imms , response ):
8486 """
8587 Asserts that a record with the expected structure exists in DynamoDB.
86- Ignores dynamically generated fields like PK, DateTimeStamp, and ExpiresAt .
88+ Ignores the dynamically generated field PK .
8789 Ensures that the 'Imms' field matches exactly.
90+ Ensures that the ExpiresAt field has been calculated correctly.
8891 """
8992 self .assertTrue (response )
9093
91- filtered_items = [
92- {k : v for k , v in item .items () if k not in [ "PK" , "DateTimeStamp" , "ExpiresAt" ] }
94+ unfiltered_items = [
95+ {k : v for k , v in item .items ()}
9396 for item in items
9497 if item .get ("Operation" ) == operation_flag
9598 and item .get ("Imms" , {}).get ("ACTION_FLAG" ) == action_flag
9699 ]
97100
101+ filtered_items = [
102+ {k : v for k , v in item .items () if k not in ["PK" , "DateTimeStamp" , "ExpiresAt" ]}
103+ for item in unfiltered_items
104+ ]
98105 self .assertGreater (len (filtered_items ), 0 , f"No matching item found for { operation_flag } " )
99106
100107 imms_data = filtered_items [0 ]["Imms" ]
@@ -108,6 +115,12 @@ def assert_dynamodb_record(self, operation_flag, action_flag, items, expected_va
108115 self .assertIn (key , filtered_items [0 ], f"{ key } is missing" )
109116 self .assertEqual (filtered_items [0 ][key ], expected_value , f"{ key } mismatch" )
110117
118+ # Check that the value of ExpiresAt is DELTA_TTL days after DateTimeStamp
119+ expected_seconds = int (os .environ ["DELTA_TTL" ]) * 24 * 60 * 60
120+ date_time = int (datetime .fromisoformat (unfiltered_items [0 ]["DateTimeStamp" ]).timestamp ())
121+ expires_at = unfiltered_items [0 ]["ExpiresAt" ]
122+ self .assertEqual (expires_at - date_time , expected_seconds )
123+
111124 def test_fhir_converter_json_direct_data (self ):
112125 """it should convert fhir json data to flat json"""
113126 json_data = json .dumps (ValuesForTests .json_data )
0 commit comments