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