diff --git a/agenda/utils.py b/agenda/utils.py index e8f124d..ff311d0 100644 --- a/agenda/utils.py +++ b/agenda/utils.py @@ -2,8 +2,10 @@ from datetime import date, datetime, timezone +DateOrDateTime = datetime | date -def as_date(d: datetime | date) -> date: + +def as_date(d: DateOrDateTime) -> date: """Convert datetime to date.""" match d: case datetime(): @@ -14,7 +16,7 @@ def as_date(d: datetime | date) -> date: raise TypeError(f"Unsupported type: {type(d)}") -def as_datetime(d: datetime | date) -> datetime: +def as_datetime(d: DateOrDateTime) -> datetime: """Date/time of event.""" match d: case datetime(): @@ -49,10 +51,10 @@ def human_readable_delta(future_date: date) -> str | None: # Formatting the output parts = [] if months > 0: - parts.append(f"{months} month{'s' if months > 1 else ''}") + parts.append(f"{months} months") if weeks > 0: - parts.append(f"{weeks} week{'s' if weeks > 1 else ''}") + parts.append(f"{weeks} weeks") if days > 0: - parts.append(f"{days} day{'s' if days > 1 else ''}") + parts.append(f"{days} days") return " ".join(parts) if parts else None diff --git a/tests/test_utils.py b/tests/test_utils.py deleted file mode 100644 index a1ed866..0000000 --- a/tests/test_utils.py +++ /dev/null @@ -1,96 +0,0 @@ -"""Test utility functions.""" - -from datetime import date, datetime, timedelta, timezone - -import pytest -from agenda.utils import as_date, as_datetime, human_readable_delta -from freezegun import freeze_time - - -def test_as_date_with_datetime() -> None: - """Test converting a datetime object to a date.""" - dt = datetime(2024, 7, 7, 12, 0, 0, tzinfo=timezone.utc) - result = as_date(dt) - assert result == date(2024, 7, 7) - - -def test_as_date_with_date() -> None: - """Test passing a date object through as_date.""" - d = date(2024, 7, 7) - result = as_date(d) - assert result == d - - -def test_as_date_with_invalid_type() -> None: - """Test as_date with an invalid type, expecting a TypeError.""" - with pytest.raises(TypeError): - as_date("2024-07-07") - - -def test_as_datetime_with_datetime() -> None: - """Test passing a datetime object through as_datetime.""" - dt = datetime(2024, 7, 7, 12, 0, 0, tzinfo=timezone.utc) - result = as_datetime(dt) - assert result == dt - - -def test_as_datetime_with_date() -> None: - """Test converting a date object to a datetime.""" - d = date(2024, 7, 7) - result = as_datetime(d) - expected = datetime(2024, 7, 7, 0, 0, 0, tzinfo=timezone.utc) - assert result == expected - - -def test_as_datetime_with_invalid_type() -> None: - """Test as_datetime with an invalid type, expecting a TypeError.""" - with pytest.raises(TypeError): - as_datetime("2024-07-07") - - -@freeze_time("2024-07-01") -def test_human_readable_delta_future_date() -> None: - """Test human_readable_delta with a future date 45 days from today.""" - future_date = date.today() + timedelta(days=45) - result = human_readable_delta(future_date) - assert result == "1 month 2 weeks 1 day" - - -@freeze_time("2024-07-01") -def test_human_readable_delta_today() -> None: - """Test human_readable_delta with today's date, expecting None.""" - today = date.today() - result = human_readable_delta(today) - assert result is None - - -@freeze_time("2024-07-01") -def test_human_readable_delta_past_date() -> None: - """Test human_readable_delta with a past date, expecting None.""" - past_date = date.today() - timedelta(days=1) - result = human_readable_delta(past_date) - assert result is None - - -@freeze_time("2024-07-01") -def test_human_readable_delta_months_only() -> None: - """Test human_readable_delta with a future date 60 days from today.""" - future_date = date.today() + timedelta(days=60) - result = human_readable_delta(future_date) - assert result == "2 months" - - -@freeze_time("2024-07-01") -def test_human_readable_delta_weeks_only() -> None: - """Test human_readable_delta with a future date 14 days from today.""" - future_date = date.today() + timedelta(days=14) - result = human_readable_delta(future_date) - assert result == "2 weeks" - - -@freeze_time("2024-07-01") -def test_human_readable_delta_days_only() -> None: - """Test human_readable_delta with a future date 3 days from today.""" - future_date = date.today() + timedelta(days=3) - result = human_readable_delta(future_date) - assert result == "3 days"