From 9e5549adc9e02674051482935c5c19f99a27c763 Mon Sep 17 00:00:00 2001 From: Antoine Bertin Date: Wed, 28 Apr 2021 22:07:07 +0200 Subject: [PATCH] Add test database with alembic --- alembic/env.py | 12 +++++++----- tests/conftest.py | 24 +++++++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/alembic/env.py b/alembic/env.py index d01e44d4f..76161b346 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -60,11 +60,13 @@ def run_migrations_online(): """ config.set_section_option(config.config_ini_section, "DB_URL", settings.DB_URL) - connectable = engine_from_config( - config.get_section(config.config_ini_section), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) + connectable = config.attributes.get('connection', None) + if not connectable: + connectable = engine_from_config( + config.get_section(config.config_ini_section), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) with connectable.connect() as connection: context.configure( diff --git a/tests/conftest.py b/tests/conftest.py index 9509e665d..9c2bc779a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,17 +6,33 @@ from mealie.app import app from mealie.core.config import app_dirs, settings from mealie.db.db_setup import generate_session, sql_global_init from pytest import fixture +from alembic import command, config +import sqlalchemy +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker from tests.app_routes import AppRoutes from tests.test_config import TEST_DATA from tests.utils.recipe_data import build_recipe_store, get_raw_no_image, get_raw_recipe -SQLITE_FILE = app_dirs.SQLITE_DIR.joinpath("test.db") +# sqlite test db +SQLITE_FILE = app_dirs.DATA_DIR.joinpath("test.db") SQLITE_FILE.unlink(missing_ok=True) +DB_URL = "sqlite:///" + str(SQLITE_FILE.absolute()) +engine = create_engine( + DB_URL, + echo=False, + connect_args={"check_same_thread": False}, +) +# alembic migrations +config = config.Config("alembic.ini") +config.set_main_option('sqlalchemy.url', DB_URL) +config.attributes['connection'] = engine +command.upgrade(config, "head") -TestSessionLocal = sql_global_init(SQLITE_FILE) - +# test session +TestSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def override_get_db(): try: @@ -33,8 +49,6 @@ def api_client(): yield TestClient(app) - SQLITE_FILE.unlink() - @fixture(scope="session") def api_routes():