mirror of
https://github.com/Zproger/Aurum.git
synced 2026-10-13 02:56:39 +07:00
backend/tests/: 33 pytest tests against a real Postgres database (aurum_test, created/migrated/dropped per run) exercised through the actual HTTP API — not sqlite, not mocks, and the real `aurum` database is never opened (app lifespan is skipped, get_session is overridden per test). Covers transaction category-kind validation, year/month/date-range filtering and pagination, dashboard summary arithmetic, budget status, cash flow, and the /transactions/years picker. e2e/: 6 Playwright specs driving a real browser against a fully separate throwaway docker-compose stack (run.sh: separate project name, database, port, and volume, torn down with `down -v` on exit) — regression coverage for the Recent Transactions month bug, the Card grid-overflow bug, the frozen-year bug, the Net Worth default range, and the Dashboard-> Transactions deep link, all fixed earlier this session. Also synced the backend's APP_VERSION constant (stale at 0.15.2, embedded in exported backups) with the frontend version.
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Application configuration, sourced from environment variables (.env)."""
|
|
from functools import lru_cache
|
|
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
# Single source of truth for the running app's version — surfaced in the API
|
|
# title and embedded in exported backups so an old file can be told apart
|
|
# from a current one.
|
|
APP_VERSION = "0.18.0"
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", env_prefix="AURUM_", extra="ignore")
|
|
|
|
# Postgres connection
|
|
postgres_user: str = "aurum"
|
|
postgres_password: str = "aurum"
|
|
postgres_db: str = "aurum"
|
|
postgres_host: str = "db"
|
|
postgres_port: int = 5432
|
|
|
|
# Default currency shown across the UI when an account doesn't override it
|
|
default_currency: str = "USD"
|
|
|
|
# Comma-separated list of origins allowed to call the API (frontend dev server, etc.)
|
|
cors_origins: str = "*"
|
|
|
|
@property
|
|
def database_url(self) -> str:
|
|
return (
|
|
f"postgresql+asyncpg://{self.postgres_user}:{self.postgres_password}"
|
|
f"@{self.postgres_host}:{self.postgres_port}/{self.postgres_db}"
|
|
)
|
|
|
|
@property
|
|
def cors_origins_list(self) -> list[str]:
|
|
if self.cors_origins == "*":
|
|
return ["*"]
|
|
return [origin.strip() for origin in self.cors_origins.split(",") if origin.strip()]
|
|
|
|
|
|
@lru_cache
|
|
def get_settings() -> Settings:
|
|
return Settings()
|