67 lines
3.1 KiB
Python
67 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from iaai_sync_service.settings import Settings
|
|
|
|
|
|
def test_settings_from_env_reads_required_values(monkeypatch) -> None: # noqa: ANN001
|
|
monkeypatch.setenv("DATABASE_URL", "postgres://user:pass@localhost:5432/db")
|
|
monkeypatch.setenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
|
|
monkeypatch.setenv("IAAI_BASE_URL", "https://www.iaai.com")
|
|
monkeypatch.setenv("IAAI_LISTING_START_URL", "https://www.iaai.com/Search?url=abc")
|
|
monkeypatch.setenv("IAAI_FETCH_CONCURRENCY", "4")
|
|
monkeypatch.setenv("IAAI_SESSION_KEEPALIVE_ENABLED", "false")
|
|
monkeypatch.setenv("IAAI_SESSION_KEEPALIVE_INTERVAL_MINUTES", "20")
|
|
monkeypatch.setenv("IAAI_SCHEMA_BOOTSTRAP_ENABLED", "true")
|
|
|
|
settings = Settings.from_env()
|
|
|
|
assert settings.database_url == "postgresql+psycopg://user:pass@localhost:5432/db"
|
|
assert settings.celery_broker_url == "redis://localhost:6379/0"
|
|
assert settings.iaai_base_url == "https://www.iaai.com"
|
|
assert settings.iaai_listing_start_url == "https://www.iaai.com/Search?url=abc"
|
|
assert settings.fetch_concurrency == 4
|
|
assert settings.session_keepalive_enabled is False
|
|
assert settings.session_keepalive_interval_minutes == 20
|
|
assert settings.schema_bootstrap_enabled is True
|
|
|
|
|
|
def test_settings_rejects_non_positive_concurrency(monkeypatch) -> None: # noqa: ANN001
|
|
monkeypatch.setenv("DATABASE_URL", "postgresql://user:pass@localhost:5432/db")
|
|
monkeypatch.setenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
|
|
monkeypatch.setenv("IAAI_BASE_URL", "https://www.iaai.com")
|
|
monkeypatch.setenv("IAAI_FETCH_CONCURRENCY", "0")
|
|
|
|
with pytest.raises(RuntimeError, match="IAAI_FETCH_CONCURRENCY"):
|
|
Settings.from_env()
|
|
|
|
|
|
def test_settings_bootstrap_flag_defaults_to_false(monkeypatch) -> None: # noqa: ANN001
|
|
monkeypatch.setenv("DATABASE_URL", "postgresql://user:pass@localhost:5432/db")
|
|
monkeypatch.setenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
|
|
monkeypatch.setenv("IAAI_BASE_URL", "https://www.iaai.com")
|
|
|
|
settings = Settings.from_env()
|
|
assert settings.schema_bootstrap_enabled is False
|
|
|
|
|
|
def test_settings_rejects_invalid_listing_start_url(monkeypatch) -> None: # noqa: ANN001
|
|
monkeypatch.setenv("DATABASE_URL", "postgresql://user:pass@localhost:5432/db")
|
|
monkeypatch.setenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
|
|
monkeypatch.setenv("IAAI_BASE_URL", "https://www.iaai.com")
|
|
monkeypatch.setenv("IAAI_LISTING_START_URL", "Search?url=abc")
|
|
|
|
with pytest.raises(RuntimeError, match="IAAI_LISTING_START_URL"):
|
|
Settings.from_env()
|
|
|
|
|
|
def test_settings_rejects_invalid_keepalive_interval(monkeypatch) -> None: # noqa: ANN001
|
|
monkeypatch.setenv("DATABASE_URL", "postgresql://user:pass@localhost:5432/db")
|
|
monkeypatch.setenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
|
|
monkeypatch.setenv("IAAI_BASE_URL", "https://www.iaai.com")
|
|
monkeypatch.setenv("IAAI_SESSION_KEEPALIVE_INTERVAL_MINUTES", "0")
|
|
|
|
with pytest.raises(RuntimeError, match="IAAI_SESSION_KEEPALIVE_INTERVAL_MINUTES"):
|
|
Settings.from_env()
|