import pytest
from sqlalchemy import inspect, select

from backend.app.models import ImportSettings

pytestmark = pytest.mark.integration


@pytest.mark.asyncio
async def test_download_event_has_metadata(db):
    cols = await db.run_sync(
        lambda s: {c["name"]: c for c in inspect(s.bind).get_columns("download_event")}
    )
    assert "metadata" in cols
    assert cols["metadata"]["nullable"] is False


@pytest.mark.asyncio
async def test_import_settings_has_downloader_fields(db):
    cols = await db.run_sync(
        lambda s: {c["name"]: c for c in inspect(s.bind).get_columns("import_settings")}
    )
    assert "download_rate_limit_seconds" in cols
    assert "download_validate_files" in cols


@pytest.mark.asyncio
async def test_import_settings_defaults(db):
    row = (await db.execute(select(ImportSettings).where(ImportSettings.id == 1))).scalar_one()
    assert row.download_rate_limit_seconds == 3.0
    assert row.download_validate_files is True
