Skip to content

Commit 9b611a0

Browse files
committed
autogenerated date for test (#845)
* autogenerated date for test and remove PII logs
1 parent df95250 commit 9b611a0

File tree

5 files changed

+57
-7
lines changed

5 files changed

+57
-7
lines changed

backend/tests/utils/generic_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from typing import Any, Literal
88

99
from jsonpath_ng.ext import parse
10+
from datetime import datetime, date
11+
from typing import Union, List
1012

1113

1214
def load_json_data(filename: str):
@@ -92,3 +94,21 @@ def update_contained_resource_field(
9294
{field_to_update: update_value}
9395
)
9496
return json_data
97+
98+
def format_date_types(dates: List[Union[date, datetime]], mode: str = "auto") -> List[str]:
99+
"""
100+
Accepts a list of date or datetime objects and returns them as strings:
101+
- datetime → ISO 8601 string with timezone if present
102+
- date → 'YYYY-MM-DD'
103+
"""
104+
formatted = []
105+
106+
for future_date in dates:
107+
if mode == "datetime":
108+
formatted.append(future_date.isoformat()) # full datetime with timezone
109+
elif mode == "date":
110+
formatted.append(future_date.strftime('%Y-%m-%d')) # just date
111+
else:
112+
raise TypeError(f"Unsupported type {type(future_date)}; expected date or datetime.")
113+
114+
return formatted

backend/tests/utils/test_generic_utils.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import unittest
44

55
from src.models.utils.generic_utils import form_json
6-
from tests.utils.generic_utils import load_json_data
6+
from tests.utils.generic_utils import load_json_data, format_date_types
7+
8+
import unittest
9+
from datetime import datetime, date
710

811

912
class TestFormJson(unittest.TestCase):
@@ -68,3 +71,25 @@ def test_elements_whitespace_and_case_are_handled(self):
6871
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements={raw_elements}")
6972
self.assertEqual(res["id"], self.response["id"])
7073
self.assertEqual(res["meta"]["versionId"], self.response["version"])
74+
75+
76+
class TestFormatFutureDates(unittest.TestCase):
77+
def test_date_mode_formats_dates_and_datetimes(self):
78+
inputs = [date(2100, 1, 2), datetime(2100, 1, 3, 12, 0, 0)]
79+
expected = ["2100-01-02", "2100-01-03"]
80+
self.assertEqual(format_date_types(inputs, mode="date"), expected)
81+
82+
def test_datetime_mode_formats_dates_and_datetimes(self):
83+
inputs = [date(2100, 1, 2), datetime(2100, 1, 3, 12, 0, 0)]
84+
expected = ["2100-01-02", "2100-01-03T12:00:00"]
85+
self.assertEqual(format_date_types(inputs, mode="datetime"), expected)
86+
87+
def test_default_auto_mode_is_currently_unsupported(self):
88+
# Current implementation raises TypeError when mode is not 'date' or 'datetime'
89+
inputs = [date(2100, 1, 2)]
90+
with self.assertRaises(TypeError):
91+
format_date_types(inputs) # default mode is 'auto'
92+
93+
94+
if __name__ == "__main__":
95+
unittest.main()

backend/tests/utils/values_for_tests.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
from dataclasses import dataclass
44
from decimal import Decimal
5+
from .generic_utils import format_date_types
6+
from datetime import datetime, timedelta
7+
58

69
# Lists of data types for 'invalid data type' testing
710
integers = [-1, 0, 1]
@@ -291,16 +294,20 @@ class InvalidValues:
291294
"2000-02-30", # Invalid combination of month and day
292295
]
293296

294-
for_future_dates = [
295-
"2100-01-01", # Year in future
296-
"2050-12-31", # Year in future
297-
"2029-06-15", # Year in future
297+
now = datetime.now()
298+
sample_inputs = [
299+
now + timedelta(days=1),
300+
now + timedelta(days=365),
301+
now + timedelta(days=730)
298302
]
299303

304+
for_future_dates = format_date_types(sample_inputs, mode = "date")
305+
300306
# Strings which are not in acceptable date time format
301307
for_date_time_string_formats_for_relaxed_timezone = [
302308
"", # Empty string
303309
"invalid", # Invalid format
310+
*format_date_types(sample_inputs, mode = "datetime"),
304311
"20000101", # Date digits only (i.e. without hypens)
305312
"20000101000000", # Date and time digits only
306313
"200001010000000000", # Date, time and timezone digits only

lambdas/id_sync/src/pds_details.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def pds_get_patient_details(nhs_number: str) -> dict:
2929
)
3030
pds_service = PdsService(authenticator, pds_env)
3131
patient = pds_service.get_patient_details(nhs_number)
32-
logger.info("get patient details. response: %s", patient)
3332
return patient
3433
except Exception as e:
3534
msg = f"Error getting PDS patient details for {nhs_number}"

lambdas/shared/src/common/pds_service.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def get_patient_details(self, patient_id) -> dict | None:
3131
response = requests.get(f"{self.base_url}/{patient_id}", headers=request_headers, timeout=5)
3232

3333
if response.status_code == 200:
34-
logger.info(f"PDS. Response: {response.json()}")
3534
return response.json()
3635
elif response.status_code == 404:
3736
logger.info(f"PDS. Patient not found for ID: {patient_id}")

0 commit comments

Comments
 (0)