You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.4 KiB
Python
109 lines
3.4 KiB
Python
import pytest
|
|
|
|
from iti.config import (
|
|
BaseConfig,
|
|
TestConfig as FrameworkTestConfig,
|
|
default_database_url,
|
|
default_mysql_url,
|
|
default_postgresql_url,
|
|
get_database_dialect,
|
|
)
|
|
|
|
|
|
def test_default_mysql_url_uses_mysql_driver(monkeypatch):
|
|
monkeypatch.setenv("MYSQL_USER", "u")
|
|
monkeypatch.setenv("MYSQL_PASSWORD", "p")
|
|
monkeypatch.setenv("MYSQL_HOST", "db")
|
|
monkeypatch.setenv("MYSQL_PORT", "3307")
|
|
|
|
assert default_mysql_url("iti_test") == (
|
|
"mysql+pymysql://u:p@db:3307/iti_test?charset=utf8mb4"
|
|
)
|
|
|
|
|
|
def test_default_postgresql_url_uses_psycopg_driver(monkeypatch):
|
|
monkeypatch.setenv("POSTGRES_USER", "u")
|
|
monkeypatch.setenv("POSTGRES_PASSWORD", "p")
|
|
monkeypatch.setenv("POSTGRES_HOST", "db")
|
|
monkeypatch.setenv("POSTGRES_PORT", "5433")
|
|
|
|
assert default_postgresql_url("iti_test") == (
|
|
"postgresql+psycopg://u:p@db:5433/iti_test"
|
|
)
|
|
|
|
|
|
def test_test_config_default_database_is_mysql(monkeypatch):
|
|
monkeypatch.delenv("DATABASE_URL", raising=False)
|
|
monkeypatch.delenv("DATABASE_DIALECT", raising=False)
|
|
monkeypatch.setenv("MYSQL_DATABASE", "iti_test")
|
|
|
|
config = FrameworkTestConfig()
|
|
|
|
assert config.database_url.startswith("mysql+pymysql://")
|
|
assert config.testing is True
|
|
assert config.ratelimit_enabled is False
|
|
|
|
|
|
def test_test_config_can_default_to_postgresql(monkeypatch):
|
|
monkeypatch.delenv("DATABASE_URL", raising=False)
|
|
monkeypatch.setenv("DATABASE_DIALECT", "postgresql")
|
|
monkeypatch.setenv("POSTGRES_DB", "iti_test")
|
|
|
|
config = FrameworkTestConfig()
|
|
|
|
assert config.database_url.startswith("postgresql+psycopg://")
|
|
assert config.database_url.endswith("/iti_test")
|
|
assert config.testing is True
|
|
|
|
|
|
def test_default_database_url_accepts_postgres_alias(monkeypatch):
|
|
monkeypatch.setenv("POSTGRES_DB", "custom_db")
|
|
|
|
assert default_database_url("fallback", "postgres").endswith("/custom_db")
|
|
|
|
|
|
def test_get_database_dialect_rejects_unknown(monkeypatch):
|
|
monkeypatch.setenv("DATABASE_DIALECT", "oracle")
|
|
|
|
with pytest.raises(ValueError):
|
|
get_database_dialect()
|
|
|
|
|
|
def test_base_config_can_be_overridden_for_unit_tests():
|
|
config = BaseConfig(database_url="sqlite+pysqlite:///:memory:", testing=True)
|
|
|
|
assert config.database_url == "sqlite+pysqlite:///:memory:"
|
|
assert config.testing is True
|
|
|
|
|
|
def test_base_config_reads_mq_environment(monkeypatch):
|
|
monkeypatch.setenv("MQ_ENABLED", "true")
|
|
monkeypatch.setenv("MQ_BACKEND", "kafka")
|
|
monkeypatch.setenv("KAFKA_BOOTSTRAP_SERVERS", "kafka:9092")
|
|
monkeypatch.setenv("KAFKA_GROUP_ID", "group-a")
|
|
monkeypatch.setenv("KAFKA_CLIENT_ID", "client-a")
|
|
monkeypatch.setenv("KAFKA_AUTO_OFFSET_RESET", "latest")
|
|
monkeypatch.setenv("MQ_FAILURE_BACKOFF_SECONDS", "2.5")
|
|
monkeypatch.setenv("MQ_POLL_TIMEOUT_SECONDS", "0.5")
|
|
|
|
config = BaseConfig(database_url="sqlite+pysqlite:///:memory:")
|
|
|
|
assert config.mq_enabled is True
|
|
assert config.mq == {
|
|
"backend": "kafka",
|
|
"bootstrap_servers": "kafka:9092",
|
|
"group_id": "group-a",
|
|
"client_id": "client-a",
|
|
"auto_offset_reset": "latest",
|
|
"failure_backoff_seconds": 2.5,
|
|
"poll_timeout_seconds": 0.5,
|
|
}
|
|
|
|
|
|
def test_test_config_keeps_mq_disabled_by_default(monkeypatch):
|
|
monkeypatch.setenv("MQ_ENABLED", "true")
|
|
|
|
config = FrameworkTestConfig()
|
|
|
|
assert config.mq_enabled is False
|