Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 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
11 changes: 8 additions & 3 deletions src/hope/apps/utils/age_at_registration.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
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
birth_date_parsed = parser.parse(birth_date).date()
created_at_date = created_at.date()
# return None if birth_date is future date
if birth_date_parsed > created_at_date:
return None
return relativedelta(created_at_date, birth_date_parsed).years
except ValueError:
return None
16 changes: 16 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,16 @@
from datetime import datetime
Comment thread
pavlo-mk marked this conversation as resolved.

from hope.apps.utils.age_at_registration import calculate_age_at_registration


def test_calculate_age_at_registration() -> None:
Comment thread
pavlo-mk marked this conversation as resolved.
Outdated
# ValueError
result = calculate_age_at_registration(datetime(2026, 10, 10), "ValueErrorHere")
assert result is None

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

result = calculate_age_at_registration(datetime(2025, 10, 10), "2000-10-10")
assert result == 25
Loading