"""Unit tests for MinioConfig.""" from __future__ import annotations import pytest from python_repositories.config import MinioConfig def _set_required_minio_env(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setenv("MINIO_ENDPOINT", "localhost:9000") monkeypatch.setenv("MINIO_ACCESS_KEY", "access") monkeypatch.setenv("MINIO_SECRET_KEY", "secret") monkeypatch.setenv("MINIO_BUCKET", "my-bucket") def test_from_env_loads_all_fields(monkeypatch: pytest.MonkeyPatch) -> None: _set_required_minio_env(monkeypatch) config = MinioConfig.from_env(use_dotenv=False) assert config.endpoint == "localhost:9000" assert config.access_key == "access" assert config.secret_key == "secret" assert config.bucket == "my-bucket" assert config.secure is True def test_from_env_defaults_secure_to_true_when_unset( monkeypatch: pytest.MonkeyPatch, ) -> None: _set_required_minio_env(monkeypatch) monkeypatch.delenv("MINIO_SECURE", raising=False) config = MinioConfig.from_env(use_dotenv=False) assert config.secure is True @pytest.mark.parametrize( ("value", "expected"), [ ("true", True), ("1", True), ("yes", True), ("false", False), ("0", False), ("no", False), ], ) def test_from_env_parses_secure( monkeypatch: pytest.MonkeyPatch, value: str, expected: bool, ) -> None: _set_required_minio_env(monkeypatch) monkeypatch.setenv("MINIO_SECURE", value) config = MinioConfig.from_env(use_dotenv=False) assert config.secure is expected def test_from_env_raises_for_invalid_secure(monkeypatch: pytest.MonkeyPatch) -> None: _set_required_minio_env(monkeypatch) monkeypatch.setenv("MINIO_SECURE", "not-a-bool") with pytest.raises(ValueError, match="MINIO_SECURE"): MinioConfig.from_env(use_dotenv=False) def test_from_env_raises_when_endpoint_missing( monkeypatch: pytest.MonkeyPatch, ) -> None: monkeypatch.delenv("MINIO_ENDPOINT", raising=False) monkeypatch.setenv("MINIO_ACCESS_KEY", "access") monkeypatch.setenv("MINIO_SECRET_KEY", "secret") monkeypatch.setenv("MINIO_BUCKET", "my-bucket") with pytest.raises(Exception): MinioConfig.from_env(use_dotenv=False)