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"]