39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
"""
|
|
tests/conftest.py
|
|
-----------------
|
|
Shared pytest fixtures + import-time environment setup.
|
|
|
|
`config.py` calls `_require_env('SECRET_KEY')` and `_require_env('DATABASE_URL')`
|
|
at *import* time, so those must be present in os.environ before `app` is
|
|
imported anywhere. We set safe, throwaway values here (SQLite in-memory) so the
|
|
whole suite can run with no MySQL, no Redis, no Stripe, and no real secrets.
|
|
|
|
The pure-logic tests (SLA math, webhook helpers) never touch the DB. The
|
|
routing-inertness test uses the in-memory SQLite engine only.
|
|
"""
|
|
|
|
import os
|
|
|
|
# ── Import-time env (must be set BEFORE `import app`) ────────────────────────
|
|
os.environ.setdefault('SECRET_KEY', 'test-secret-key')
|
|
os.environ.setdefault('DATABASE_URL', 'sqlite:///:memory:')
|
|
os.environ.setdefault('MULTI_TENANT_ENABLED', 'false')
|
|
os.environ.setdefault('BILLING_ENABLED', 'false')
|
|
|
|
import pytest # noqa: E402
|
|
|
|
|
|
@pytest.fixture(scope='session')
|
|
def app():
|
|
"""A minimal single-tenant app on in-memory SQLite (multi-tenancy inert)."""
|
|
from app import create_app
|
|
application = create_app('default')
|
|
application.config.update(TESTING=True, WTF_CSRF_ENABLED=False, SQLALCHEMY_ECHO=False)
|
|
return application
|
|
|
|
|
|
@pytest.fixture
|
|
def app_ctx(app):
|
|
with app.app_context():
|
|
yield app
|