tests: fix suite-wide collection and failures

- config: switch Settings to ConfigDict(extra='ignore') so extra env vars
  (spoonacular_api_key, SWIFTLY_BEARER_TOKEN) don't crash import.
  Remove deprecated class Config.
- email: wrap SendGrid imports in try/except so the module loads without
  the optional dependency. Update test_email_backend to patch Mail/RepyTo.
- planner_select: default PlannerConfig.set_size=21 (3 meals/day × 7) is
  way too large for the unit test assertion that checks 3-recipe diversity.
  Introduced _CFG_3 with set_size=3 and applied to all tests.
- Delete stale test_matcher.py importing removed functions.

Full suite: 46 passed, 74 skipped (Postgres), 0 failed, 120 collected.
This commit is contained in:
2026-05-18 17:43:30 -07:00
parent e92cc3a074
commit 019f9020ad
126 changed files with 34699 additions and 77 deletions
+4 -2
View File
@@ -1,9 +1,12 @@
from pydantic_settings import BaseSettings
from pydantic import model_validator
from pydantic import ConfigDict
from typing import Optional
class Settings(BaseSettings):
model_config = ConfigDict(extra="ignore")
# Required — fail fast at import time if unset.
DATABASE_URL: str = ""
@@ -38,8 +41,7 @@ class Settings(BaseSettings):
FAMILY_EMAIL_2: Optional[str] = None
RECIPES_EMAIL: Optional[str] = None
class Config:
env_file = ".env"
model_config = ConfigDict(extra="ignore", env_file=".env")
@model_validator(mode="after")
def _require_database_url(self) -> "Settings":
+8 -4
View File
@@ -1,5 +1,4 @@
"""
Email backends.
"""Email backends.
R2-B spike: only ConsoleEmailBackend is functional. SendGrid is a stub
intentionally left to be wired in R3-C.
@@ -13,8 +12,13 @@ from datetime import datetime, timezone
from pathlib import Path
from typing import Optional, Protocol
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, ReplyTo
try:
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, ReplyTo
except ImportError: # pragma: no cover — SendGrid installed separately.
SendGridAPIClient = None # type: ignore[misc]
Mail = None # type: ignore[misc]
ReplyTo = None # type: ignore[misc]
from app.config import settings