fix(tests): isolate SQLite test databases
Co-authored-by: OpenAI/GPT-5.6-Terra <vibecoder@antoineve.me>
This commit is contained in:
@@ -15,6 +15,7 @@ Architecture et composants clés :
|
||||
|
||||
import os
|
||||
import tomllib
|
||||
from collections.abc import Mapping
|
||||
|
||||
import sqlalchemy as sa
|
||||
from flask import Flask
|
||||
@@ -36,6 +37,10 @@ def _migrate_db(app):
|
||||
"""
|
||||
import sqlite3
|
||||
|
||||
with app.app_context():
|
||||
if db.engine.url.database in (None, ":memory:"):
|
||||
return # Une base mémoire est initialisée par create_all().
|
||||
|
||||
db_path = os.path.join(app.instance_path, "worklog.db")
|
||||
if not os.path.exists(db_path):
|
||||
return # Nouvelle DB, create_all() s'en charge
|
||||
@@ -120,7 +125,12 @@ def _date_fr(d):
|
||||
return f"{jour} {d.day} {mois} {d.year}"
|
||||
|
||||
|
||||
def create_app(config_path=None):
|
||||
def create_app(
|
||||
config_path: str | None = None,
|
||||
*,
|
||||
database_uri: str | None = None,
|
||||
engine_options: Mapping[str, object] | None = None,
|
||||
) -> Flask:
|
||||
"""Factory de création et de configuration de l'application Flask.
|
||||
|
||||
Cette fonction réalise les étapes suivantes :
|
||||
@@ -136,6 +146,11 @@ def create_app(config_path=None):
|
||||
Paramètres:
|
||||
config_path (str | None): Chemin optionnel vers le fichier de configuration TOML.
|
||||
Par défaut, cherche `config.toml` à la racine du projet.
|
||||
database_uri (str | None): URI SQLAlchemy à utiliser à la place de la base SQLite
|
||||
de l'instance. Cette option est appliquée avant l'initialisation
|
||||
de Flask-SQLAlchemy.
|
||||
engine_options (Mapping[str, object] | None): Options SQLAlchemy appliquées avant
|
||||
l'initialisation de Flask-SQLAlchemy.
|
||||
|
||||
Retourne:
|
||||
Flask: L'instance de l'application Flask configurée et prête à l'emploi.
|
||||
@@ -144,9 +159,11 @@ def create_app(config_path=None):
|
||||
|
||||
os.makedirs(app.instance_path, exist_ok=True)
|
||||
|
||||
app.config["SQLALCHEMY_DATABASE_URI"] = (
|
||||
f"sqlite:///{os.path.join(app.instance_path, 'worklog.db')}"
|
||||
)
|
||||
if database_uri is None:
|
||||
database_uri = f"sqlite:///{os.path.join(app.instance_path, 'worklog.db')}"
|
||||
app.config["SQLALCHEMY_DATABASE_URI"] = database_uri
|
||||
if engine_options is not None:
|
||||
app.config["SQLALCHEMY_ENGINE_OPTIONS"] = engine_options
|
||||
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
|
||||
app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY", "dev-secret-change-in-prod")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user