use postgres database in test instead of sqlite

This commit is contained in:
Son Nguyen Kim 2021-08-06 08:50:10 +02:00
parent 006a7b1420
commit 07c912fd35
2 changed files with 27 additions and 31 deletions

View File

@ -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()

View File

@ -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