Skip to content

Commit c4986ba

Browse files
authored
autogenerated date for test (#845)
* autogenerated date for test and remove PII logs
1 parent 00fa09b commit c4986ba

File tree

5 files changed

+57
-8
lines changed

5 files changed

+57
-8
lines changed

backend/tests/utils/generic_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from decimal import Decimal
77
from typing import Literal, Any
88
from jsonpath_ng.ext import parse
9+
from datetime import datetime, date
10+
from typing import Union, List
911

1012

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

backend/tests/utils/test_generic_utils.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import unittest
44
from src.models.utils.generic_utils import form_json
5-
from tests.utils.generic_utils import load_json_data
5+
from tests.utils.generic_utils import load_json_data, format_date_types
6+
7+
import unittest
8+
from datetime import datetime, date
69

710

811
class TestFormJson(unittest.TestCase):
@@ -70,3 +73,25 @@ def test_elements_whitespace_and_case_are_handled(self):
7073
)
7174
self.assertEqual(res["id"], self.response["id"])
7275
self.assertEqual(res["meta"]["versionId"], self.response["version"])
76+
77+
78+
class TestFormatFutureDates(unittest.TestCase):
79+
def test_date_mode_formats_dates_and_datetimes(self):
80+
inputs = [date(2100, 1, 2), datetime(2100, 1, 3, 12, 0, 0)]
81+
expected = ["2100-01-02", "2100-01-03"]
82+
self.assertEqual(format_date_types(inputs, mode="date"), expected)
83+
84+
def test_datetime_mode_formats_dates_and_datetimes(self):
85+
inputs = [date(2100, 1, 2), datetime(2100, 1, 3, 12, 0, 0)]
86+
expected = ["2100-01-02", "2100-01-03T12:00:00"]
87+
self.assertEqual(format_date_types(inputs, mode="datetime"), expected)
88+
89+
def test_default_auto_mode_is_currently_unsupported(self):
90+
# Current implementation raises TypeError when mode is not 'date' or 'datetime'
91+
inputs = [date(2100, 1, 2)]
92+
with self.assertRaises(TypeError):
93+
format_date_types(inputs) # default mode is 'auto'
94+
95+
96+
if __name__ == "__main__":
97+
unittest.main()

backend/tests/utils/values_for_tests.py

Lines changed: 11 additions & 5 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
@@ -392,4 +399,3 @@ class InvalidValues:
392399
]
393400

394401
invalid_dose_quantity = {"value": 2, "unit": "ml", "code": "258773002"}
395-

lambdas/id_sync/src/pds_details.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ def pds_get_patient_details(nhs_number: str) -> dict:
2727
)
2828
pds_service = PdsService(authenticator, pds_env)
2929
patient = pds_service.get_patient_details(nhs_number)
30-
logger.info("get patient details. response: %s", patient)
3130
return patient
3231
except Exception as e:
3332
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
@@ -27,7 +27,6 @@ def get_patient_details(self, patient_id) -> dict | None:
2727
response = requests.get(f"{self.base_url}/{patient_id}", headers=request_headers, timeout=5)
2828

2929
if response.status_code == 200:
30-
logger.info(f"PDS. Response: {response.json()}")
3130
return response.json()
3231
elif response.status_code == 404:
3332
logger.info(f"PDS. Patient not found for ID: {patient_id}")

0 commit comments

Comments
 (0)