You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.6 KiB
Python

import pytest
from molten import testing
from molten.contrib.sqlalchemy import Session
from databag.index import create_app
def truncate_all_tables(session: Session):
table_names = session.execute("""
select table_name from information_schema.tables
where table_schema = 'public'
and table_type = 'BASE TABLE'
and table_name != 'alembic_version'
""")
for (table_name,) in table_names:
# "truncate" can deadlock so we use delete which is guaranteed not to.
session.execute(f"delete from {table_name}")
session.commit()
WSGI_REF = {
'REQUEST_METHOD': "GET",
"SCRIPT_NAME": "",
"PATH_INFO": "/",
"QUERY_STRING": "",
"SERVER_NAME": "0.0.0.0",
"SERVER_PORT": "8000",
"SERVER_PROTOCOL": "HTTP/1.1",
# "HTTP_"
}
@pytest.fixture(scope="session")
def app_global():
_, app = create_app()
yield app
@pytest.fixture
def app(app_global):
# This is a little "clever"/piggy. We only want a single instance
# of the app to ever be created, but we also want to ensure that
# the DB is cleared after every test hence "app_global" being a
# session-scoped fixture and this one being test-scoped.
yield app_global
resolver = app_global.injector.get_resolver()
resolver.resolve(truncate_all_tables)()
@pytest.fixture
def client(app):
"""Creates a testing client"""
return testing.TestClient(app)
@pytest.fixture
def load_component(app):
def load(annotation):
def loader(c: annotation):
return c
return app.injector.get_resolver().resolve(loader)()
return load