Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions src/hope/apps/utils/age_at_registration.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
from typing import Any
from datetime import datetime

from dateutil import parser
from dateutil.relativedelta import relativedelta


def calculate_age_at_registration(
created_at: Any,
created_at: datetime,
birth_date: str,
) -> int | None:
try:
return relativedelta(created_at.date(), parser.parse(birth_date).date()).years
calculated_age_years = relativedelta(created_at.date(), parser.parse(birth_date).date()).years
# return None if age is less then 0
if calculated_age_years < 0:
return None
return calculated_age_years
except ValueError:
return None
24 changes: 24 additions & 0 deletions tests/unit/apps/utils/test_age_at_registration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from datetime import datetime

from hope.apps.utils.age_at_registration import calculate_age_at_registration


def test_calculate_age_at_registration_value_error() -> None:
result = calculate_age_at_registration(datetime(2026, 10, 10), "ValueErrorHere")
assert result is None


def test_calculate_age_at_registration_future_birthday() -> None:
# birthdate in future
result = calculate_age_at_registration(datetime(2026, 10, 10), "9999-10-10")
assert result is None


def test_calculate_age_at_registration_zero() -> None:
result = calculate_age_at_registration(datetime(2023, 12, 12), "2023-12-12")
assert result == 0


def test_calculate_age_at_registration() -> None:
result = calculate_age_at_registration(datetime(2025, 10, 10), "2000-10-10")
assert result == 25
Loading