import os from typing import Iterator from typing import Type import pytest import utilities from flask.testing import FlaskClient from monsun_backend.container import get_initialize_container from sqlalchemy import create_engine from sqlalchemy_utils import create_database from sqlalchemy_utils import database_exists from utilities import setup_app @pytest.fixture(scope="session", autouse=True) def db_test(): """makes sure that the DB exists""" engine = create_engine(os.getenv("DATABASE_URI")) if not database_exists(engine.url): create_database(engine.url) @pytest.fixture(scope="class") def app_class_scope(db_test): with setup_app() as app: yield app @pytest.fixture(scope="class") def client_class_scope(app_class_scope): return app_class_scope.test_client @pytest.fixture() def app(db_test): with setup_app() as app: yield app @pytest.fixture() def client(app): return app.test_client @pytest.fixture(scope="class") def as_admin( client_class_scope: Type[FlaskClient], ) -> Iterator[utilities.TestUser]: container = get_initialize_container() with client_class_scope() as client_: yield utilities.TestUser( client_.post( "/login", data={ "email": container.config.admin_user_email(), "password": container.config.admin_user_password(), }, ), client_, )