From ef646a8e548101ed7755b4d62274a2399900c51e Mon Sep 17 00:00:00 2001 From: coder-bot Date: Tue, 18 Aug 2026 14:48:18 +0000 Subject: [PATCH] WIP checkpoint: Enforce 18+ age gate at account registration --- backend/pytest.ini | 3 ++ backend/tests/__init__.py | 0 backend/tests/test_auth_age_gate.py | 64 +++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 backend/pytest.ini create mode 100644 backend/tests/__init__.py create mode 100644 backend/tests/test_auth_age_gate.py diff --git a/backend/pytest.ini b/backend/pytest.ini new file mode 100644 index 0000000..78c5011 --- /dev/null +++ b/backend/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +asyncio_mode = auto +testpaths = tests diff --git a/backend/tests/__init__.py b/backend/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/tests/test_auth_age_gate.py b/backend/tests/test_auth_age_gate.py new file mode 100644 index 0000000..389eaf5 --- /dev/null +++ b/backend/tests/test_auth_age_gate.py @@ -0,0 +1,64 @@ +"""Tests for the 18+ age gate on user registration.""" + +from datetime import date, timedelta, datetime +from unittest.mock import patch + +import pytest + +from app.routers.auth import calculate_age + + +class TestCalculateAge: + """Unit tests for the calculate_age helper.""" + + def test_exactly_18(self): + """A person born exactly 18 years ago today is 18.""" + today = datetime.now().date() + dob = today.replace(year=today.year - 18) + assert calculate_age(dob) == 18 + + def test_just_turned_18(self): + """A person who turned 18 yesterday is 18.""" + today = datetime.now().date() + dob = today.replace(year=today.year - 18) - timedelta(days=1) + assert calculate_age(dob) == 18 + + def test_one_day_short_of_18(self): + """A person born one day after their 18th birthday is 17.""" + today = datetime.now().date() + dob = today.replace(year=today.year - 18) + timedelta(days=1) + assert calculate_age(dob) == 17 + + def test_17_years_old(self): + """A person who is 17 years and 364 days old is 17.""" + today = datetime.now().date() + dob = today.replace(year=today.year - 17) + timedelta(days=1) + assert calculate_age(dob) == 17 + + def test_65_years_old(self): + """A person who is 65 is correctly calculated.""" + today = datetime.now().date() + dob = today.replace(year=today.year - 65) + assert calculate_age(dob) == 65 + + def test_newborn(self): + """A newborn is 0.""" + today = datetime.now().date() + dob = today + assert calculate_age(dob) == 0 + + def test_birthday_not_yet_this_year(self): + """Person born Dec 31, 2000 — on Jan 1, 2025 they are still 24.""" + dob = date(2000, 12, 31) + with patch("app.routers.auth.datetime") as mock_dt: + mock_dt.now.return_value = datetime(2025, 1, 1) + mock_dt.now.return_value.date.return_value = date(2025, 1, 1) + assert calculate_age(dob) == 24 + + def test_birthday_today(self): + """Person born Dec 31, 2000 — on Dec 31, 2024 they turn 24.""" + dob = date(2000, 12, 31) + with patch("app.routers.auth.datetime") as mock_dt: + mock_dt.now.return_value = datetime(2024, 12, 31) + mock_dt.now.return_value.date.return_value = date(2024, 12, 31) + assert calculate_age(dob) == 24