def create_test_dbsession(request, registry: Registry, transaction_manager=transaction.manager) -> Session:
"""Create a test database session and setup database.
Create and drop all tables when called. Add teardown function py.test to drop all tables during teardown.
Also add implicit UUID extension on the database, so we don't need to add by hand every time.
:param request: py.test test request
:param settings: test.ini app settings
:param transaction_manager:
:return: New database session
"""
from websauna.system.model.meta import Base
dbsession = create_dbsession(registry, manager=transaction_manager)
engine = dbsession.get_bind()
connection = engine.connect()
# Support native PSQL UUID types
if engine.dialect.name == "postgresql":
connection.execute('create extension if not exists "uuid-ossp";')
with transaction.manager:
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
def teardown():
# There might be open transactions in the database. They will block DROP ALL and thus the tests would end up in a deadlock. Thus, we clean up all connections we know about.
# XXX: Fix this shit
with transaction.manager:
Base.metadata.drop_all(engine)
dbsession.close()
request.addfinalizer(teardown)
return dbsession
评论列表
文章目录