mirror of
https://github.com/Dodelidoo-Labs/sonobarr.git
synced 2026-04-17 20:58:02 -04:00
76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
"""Shared pytest fixtures for Sonobarr unit and integration tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|
SRC_DIR = PROJECT_ROOT / "src"
|
|
if str(SRC_DIR) not in sys.path:
|
|
sys.path.insert(0, str(SRC_DIR))
|
|
|
|
os.environ.setdefault("secret_key", "test-secret-key")
|
|
os.environ.setdefault("SONOBARR_SKIP_PROFILE_BACKFILL", "1")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def app(tmp_path_factory):
|
|
"""Create a reusable Flask app configured for isolated test execution."""
|
|
|
|
from sonobarr_app import create_app
|
|
from sonobarr_app.config import Config
|
|
|
|
runtime_dir = tmp_path_factory.mktemp("runtime")
|
|
config_dir = runtime_dir / "config"
|
|
settings_file = config_dir / "settings_config.json"
|
|
db_file = runtime_dir / "test.db"
|
|
|
|
class TestConfig(Config):
|
|
"""Static test config with isolated database and settings paths."""
|
|
|
|
TESTING = True
|
|
WTF_CSRF_ENABLED = False
|
|
SQLALCHEMY_DATABASE_URI = f"sqlite:///{db_file}"
|
|
CONFIG_DIR = str(config_dir)
|
|
SETTINGS_FILE = str(settings_file)
|
|
OIDC_CLIENT_ID = "test-client"
|
|
OIDC_CLIENT_SECRET = "test-secret"
|
|
OIDC_SERVER_METADATA_URL = "https://example.com/.well-known/openid-configuration"
|
|
|
|
flask_app = create_app(TestConfig)
|
|
release_client = flask_app.extensions.get("release_client")
|
|
if release_client is not None:
|
|
release_client.fetch_latest = lambda force=False: {
|
|
"tag_name": "v1.0.0",
|
|
"html_url": "https://example.com/releases/v1.0.0",
|
|
"error": None,
|
|
"fetched_at": 0.0,
|
|
}
|
|
return flask_app
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def reset_database(app):
|
|
"""Provide each test with a clean schema and empty data set."""
|
|
|
|
from sonobarr_app.extensions import db
|
|
|
|
with app.app_context():
|
|
db.session.remove()
|
|
db.drop_all()
|
|
db.create_all()
|
|
yield
|
|
with app.app_context():
|
|
db.session.remove()
|
|
|
|
|
|
@pytest.fixture
|
|
def client(app):
|
|
"""Return a Flask test client for HTTP endpoint tests."""
|
|
|
|
return app.test_client()
|