original_url = config_mod.settings.DATABASE_URL config_mod.settings.DATABASE_URL = TEST_DATABASE_URL import app.db.session as db_session_mod importlib.reload(db_session_mod) import app.main as main_mod importlib.reload(main_mod) # 3. create schema from app.models import Base eng = create_engine(TEST_DATABASE_URL, pool_pre_ping=True) Base.metadata.create_all(eng) eng.dispose() yield main_mod.app # 4. restore global modules and drop the test database config_mod.settings.DATABASE_URL = original_url importlib.reload(db_session_mod) admin = create_engine(POSTGRES_ADMIN_URL, pool_pre_ping=True, isolation_level="AUTOCOMMIT") with admin.connect() as c: c.execute(text(f'DROP DATABASE IF EXISTS "{TEST_DB_NAME}"')) admin.dispose() # Tables to truncate between API tests (order-independent via TRUNCATE CASCADE) _TRUNCATE = [ "audit_logs", "email_events", "send_attempts", "send_jobs", "campaign_recipients", "campaigns", "recipients", "recipient_lists", "subject_lines", "html_templates", "attachments", "company_phone_numbers", "suppression_list", "oauth_tokens", "oauth_client_configs", "gmail_accounts", "application_settings", "users", ] @pytest.fixture() def api(test_app):