diff --git a/tests/conftest.py b/tests/conftest.py index 9a174b64..a8fcc2c0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,53 +1,49 @@ import os +# use the tests/test.env config fle # flake8: noqa: E402 - os.environ["CONFIG"] = os.path.abspath( os.path.join(os.path.dirname(os.path.dirname(__file__)), "tests/test.env") ) -# use in-memory database -# need to set before importing any other module as DB_URI is init at import time -os.environ["DB_URI"] = "sqlite://" - import pytest from app.extensions import db from server import create_app from init_app import add_sl_domains +app = create_app() +app.config["TESTING"] = True +app.config["WTF_CSRF_ENABLED"] = False +app.config["SERVER_NAME"] = "sl.test" + +with app.app_context(): + db.create_all() + add_sl_domains() + @pytest.fixture def flask_app(): - app = create_app() - - # use in-memory database - app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://" - app.config["TESTING"] = True - app.config["WTF_CSRF_ENABLED"] = False - app.config["SERVER_NAME"] = "sl.test" - - with app.app_context(): - db.create_all() - add_sl_domains() - yield app @pytest.fixture def flask_client(): - app = create_app() - - # use in-memory database - app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://" - app.config["TESTING"] = True - app.config["WTF_CSRF_ENABLED"] = False - app.config["SERVER_NAME"] = "sl.test" - - client = app.test_client() - with app.app_context(): - db.create_all() - add_sl_domains() - yield client + # replace db.session to that we can rollback all commits that can be made during a test + # inspired from http://alexmic.net/flask-sqlalchemy-pytest/ + connection = db.engine.connect() + transaction = connection.begin() + options = dict(bind=connection, binds={}) + session = db.create_scoped_session(options=options) + db.session = session + + try: + client = app.test_client() + yield client + finally: + # roll back all commits made during a test + transaction.rollback() + connection.close() + session.remove() diff --git a/tests/test.env b/tests/test.env index f0f8191a..b8f1399d 100644 --- a/tests/test.env +++ b/tests/test.env @@ -16,7 +16,7 @@ DKIM_PRIVATE_KEY_PATH=local_data/dkim.key # Database RESET_DB=true -DB_URI=sqlite:///db.sqlite +DB_URI=postgresql://db/test # Flask FLASK_SECRET=secret