personal-lifecycle-tracker / backend / tests / test_reminders.py
test_reminders.py
Raw
from __future__ import annotations

from fastapi.testclient import TestClient


def test_reminders_summary_and_digest(test_client: TestClient):
    # 1. Reminders summary
    summary_res = test_client.get("/api/v1/reminders/summary")
    assert summary_res.status_code == 200
    data = summary_res.json()
    assert "overdue" in data
    assert "upcoming" in data
    assert "totalActiveReminders" in data
    assert data["totalActiveReminders"] == len(data["overdue"]) + len(data["upcoming"])

    # 2. Get and update digest config
    config_res = test_client.get("/api/v1/reminders/digest/config")
    assert config_res.status_code == 200
    config_data = config_res.json()
    assert config_data["deliveryTime"] == "08:00"

    patch_res = test_client.patch(
        "/api/v1/reminders/digest/config",
        json={"deliveryTime": "09:00", "timeZone": "America/New_York"},
    )
    assert patch_res.status_code == 200
    assert patch_res.json()["deliveryTime"] == "09:00"
    assert patch_res.json()["timeZone"] == "America/New_York"

    # 3. Generate daily digest
    digest_res = test_client.post(
        "/api/v1/reminders/digest/generate",
        json={"recipientEmail": "alex@example.com"},
    )
    assert digest_res.status_code == 200
    digest_data = digest_res.json()
    assert digest_data["deliveryTime"] == "09:00"
    assert digest_data["recipientEmail"] == "alex@example.com"
    assert "htmlContent" in digest_data
    assert "textContent" in digest_data
    assert "overdueItems" in digest_data
    assert "upcomingItems" in digest_data

    # 4. Check digest history
    history_res = test_client.get("/api/v1/reminders/digest/history")
    assert history_res.status_code == 200
    history = history_res.json()
    assert len(history) >= 1
    assert history[0]["id"] == digest_data["id"]


def test_digest_all_clear_generation(test_client: TestClient):
    # Jordan has no personal items and group_vehicles has 2 items (1 overdue, 1 upcoming)
    # Register an isolated brand new user with 0 items
    signup_res = test_client.post(
        "/api/v1/auth/signup",
        json={"email": "fresh@example.com", "name": "Fresh User", "password": "password123"},
    )
    token = signup_res.json()["token"]
    headers = {"Authorization": f"Bearer {token}"}

    digest_res = test_client.post(
        "/api/v1/reminders/digest/generate",
        json={"recipientEmail": "fresh@example.com"},
        headers=headers,
    )
    assert digest_res.status_code == 200
    digest = digest_res.json()
    assert digest["overdueCount"] == 0
    assert digest["upcomingCount"] == 0
    assert "All clear for today" in digest["subject"]