Files
home-automation/tests/conftest.py
T

81 lines
2.1 KiB
Python
Raw Permalink Normal View History

2026-04-19 23:02:43 +02:00
from pathlib import Path
2026-04-19 20:19:58 +02:00
import pytest
2026-04-19 23:02:43 +02:00
from alembic import command
from alembic.config import Config
2026-04-19 20:19:58 +02:00
from fastapi.testclient import TestClient
2026-04-20 10:42:35 +02:00
from sqlalchemy import create_engine
2026-04-19 20:19:58 +02:00
from app.db import reset_db_caches
2026-04-19 23:02:43 +02:00
from app.config import get_settings
2026-04-19 20:19:58 +02:00
from app.main import create_app
2026-04-20 15:16:47 +02:00
def _make_app_alembic_config(database_url: str) -> Config:
config = Config("alembic_app.ini")
config.set_main_option("sqlalchemy.url", database_url)
return config
2026-04-19 23:02:43 +02:00
@pytest.fixture
def test_database_urls(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
2026-04-20 15:16:47 +02:00
app_database_path = tmp_path / "app_test.db"
app_database_url = f"sqlite:///{app_database_path}"
2026-04-19 23:02:43 +02:00
2026-04-20 15:16:47 +02:00
monkeypatch.setenv("APP_DATABASE_URL", app_database_url)
monkeypatch.setenv("AUTH_BOOTSTRAP_USERNAME", "admin")
monkeypatch.setenv("AUTH_BOOTSTRAP_PASSWORD", "test-password")
2026-04-20 17:43:24 +02:00
monkeypatch.setenv("AUTH_COOKIE_SECURE_OVERRIDE", "false")
2026-04-19 23:02:43 +02:00
get_settings.cache_clear()
reset_db_caches()
2026-04-19 23:02:43 +02:00
try:
yield {
2026-04-20 15:16:47 +02:00
"app_path": app_database_path,
"app_url": app_database_url,
2026-04-19 23:02:43 +02:00
}
finally:
get_settings.cache_clear()
reset_db_caches()
2026-04-19 23:02:43 +02:00
@pytest.fixture
2026-04-20 15:16:47 +02:00
def auth_database(test_database_urls, monkeypatch: pytest.MonkeyPatch):
database_url = test_database_urls["app_url"]
command.upgrade(_make_app_alembic_config(database_url), "head")
reset_db_caches()
2026-04-20 15:16:47 +02:00
yield test_database_urls
reset_db_caches()
2026-04-20 15:16:47 +02:00
@pytest.fixture
def app(auth_database):
2026-04-19 23:02:43 +02:00
yield create_app()
2026-04-19 20:19:58 +02:00
@pytest.fixture
def client(app):
with TestClient(app) as test_client:
yield test_client
2026-04-20 10:42:35 +02:00
@pytest.fixture
def location_client(auth_database):
app_url = auth_database["app_url"]
engine = create_engine(app_url, connect_args={"check_same_thread": False})
2026-04-20 10:42:35 +02:00
fastapi_app = create_app()
with TestClient(fastapi_app) as client:
yield client, engine
engine.dispose()
@pytest.fixture
def poo_client(auth_database):
app_url = auth_database["app_url"]
engine = create_engine(app_url, connect_args={"check_same_thread": False})
fastapi_app = create_app()
with TestClient(fastapi_app) as client:
yield client, engine
engine.dispose()