Skip to content

Commit 566975b

Browse files
committed
wip
1 parent 12fc4cb commit 566975b

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

tests/regression/subjects/test_create_subjects.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
create_subject,
1313
)
1414
from utils.date_time_utils import DateTimeUtils
15-
from utils.subject_utils import get_active_invitation_plan
1615

17-
random_offset = DateTimeUtils.random_offset
1816
from playwright.sync_api import Page
1917

18+
2019
@pytest.fixture
2120
def db_connection():
2221
"""

tests_utils/test_date_time_utils.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import pytest
2-
import utils.date_time_utils
2+
from utils.date_time_utils import DateTimeUtils
33
from datetime import datetime, timedelta
44

5-
pytestmark = [pytest.mark.utils]
6-
75

86
def test_current_datetime():
9-
dtu = utils.date_time_utils.DateTimeUtils()
7+
dtu = DateTimeUtils()
108
current_date = datetime.now()
119
assert dtu.current_datetime() == current_date.strftime("%d/%m/%Y %H:%M")
1210
assert dtu.current_datetime("%Y-%m-%d %H:%M") == current_date.strftime(
@@ -18,15 +16,15 @@ def test_current_datetime():
1816

1917

2018
def test_format_date():
21-
dtu = utils.date_time_utils.DateTimeUtils()
19+
dtu = DateTimeUtils()
2220
date = datetime(2022, 12, 31)
2321
assert dtu.format_date(date, "%d/%m/%Y") == "31/12/2022"
2422
assert dtu.format_date(date, "%Y/%m/%d") == "2022/12/31"
2523
assert dtu.format_date(date, "%d %B %Y") == "31 December 2022"
2624

2725

2826
def test_add_days():
29-
dtu = utils.date_time_utils.DateTimeUtils()
27+
dtu = DateTimeUtils()
3028
date = datetime.now()
3129
new_date = dtu.add_days(date, 5)
3230
assert new_date == date + timedelta(days=5)
@@ -45,13 +43,23 @@ def test_add_days():
4543

4644

4745
def test_get_day_of_week_with_specific_date():
48-
dtu = utils.date_time_utils.DateTimeUtils()
46+
dtu = DateTimeUtils()
4947
date = datetime(2023, 11, 8) # Known Wednesday
5048
day_of_week = dtu.get_day_of_week(date)
5149
assert day_of_week in VALID_WEEKDAYS
5250

5351

5452
def test_get_day_of_week_with_default_today():
55-
dtu = utils.date_time_utils.DateTimeUtils()
53+
dtu = DateTimeUtils()
5654
day_of_week = dtu.get_day_of_week()
5755
assert day_of_week in VALID_WEEKDAYS
56+
57+
58+
def test_random_offset_within_bounds():
59+
start_date = datetime(2025, 1, 1)
60+
end_date = datetime(2025, 1, 31)
61+
62+
for _ in range(100): # Run multiple times to catch edge randomness
63+
offset = DateTimeUtils.random_offset(start_date, end_date)
64+
assert isinstance(offset, int)
65+
assert 0 <= offset <= (end_date - start_date).days

utils/date_time_utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,6 @@ def random_offset(start_date: datetime, end_date: datetime) -> int:
169169
int: A random offset in days between start_date and end_date.
170170
"""
171171
delta_days = (end_date - start_date).days
172+
if start_date > end_date:
173+
raise ValueError("start_date must be earlier than end_date")
172174
return random.randint(0, max(delta_days, 0))

utils/subject_utils.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from datetime import datetime, timedelta
22
from dataclasses import dataclass
3-
from datetime import datetime
43

54

65
@dataclass
@@ -28,6 +27,7 @@ class InvitationPlan:
2827

2928

3029
def get_active_invitation_plan(hub_code, sc_code, db_connection) -> InvitationPlan:
30+
#TODO: Replace with real DB logic so that this function accepts real parameters
3131
"""
3232
Retrieves the currently active invitation plan for a given hub and screening centre.
3333
Replace with real DB logic using your ORM or SQL execution layer.
@@ -50,15 +50,13 @@ def calculate_subject_shortfall(active_plan: InvitationPlan, daily_target: int)
5050
"""
5151
invitations_per_day = active_plan.invitations_per_day
5252
invitations_due = active_plan.invitations_due
53-
plan_duration_days = (active_plan.end_date - active_plan.start_date).days
54-
5553
estimated_total = int(
5654
(daily_target / invitations_per_day) * invitations_due * 1.01 - invitations_due
5755
)
5856
return max(0, estimated_total)
5957

6058

61-
def create_subject(birth_date, screening_centre, hub, region):
59+
def create_subject(birth_date: datetime, screening_centre: str, hub: str, region: str) -> None:
6260
"""
6361
Creates a new subject in the database.
6462
You’ll likely want to use your existing data generation utilities or raw SQL here.

0 commit comments

Comments
 (0)