html_body = ""
if is_html:
try:
html_body = content.decode("utf-8")
except UnicodeDecodeError:
raise HTTPException(status_code=400, detail="HTML file is not valid UTF-8")
problems = validate_html(html_body)
> if problems.get("errors"):
E AttributeError: 'list' object has no attribute 'get'
===CONFTEST===
def test_app():
if not PG_AVAILABLE:
pytest.skip("PostgreSQL not available for integration tests")
import importlib
from sqlalchemy import create_engine, text
# 1. create fresh test database
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}"'))
c.execute(text(f'CREATE DATABASE "{TEST_DB_NAME}"'))
admin.dispose()
# 2. point settings at it and reload DB + main modules in dependency order
import app.core.config as config_mod
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", "email_templates", "attachments", "company_phone_numbers",
"suppression_entries", "oauth_tokens", "oauth_client_configs",
"gmail_accounts", "application_settings", "users",