"""Environment configuration tests.""" from __future__ import annotations import os import unittest from unittest.mock import patch from kca.config import Settings class OcspExpirySettingsTest(unittest.TestCase): def test_defaults(self) -> None: with patch.dict(os.environ, {}, clear=True): settings = Settings.from_env() self.assertEqual(30, settings.ocsp_heartbeat_interval_seconds) self.assertEqual(60, settings.ocsp_redis_expiry_seconds) def test_expiry_must_exceed_heartbeat(self) -> None: with patch.dict( os.environ, { "KCA_OCSP_HEARTBEAT_INTERVAL_SECONDS": "30", "KCA_OCSP_REDIS_EXPIRY_SECONDS": "30", }, clear=True, ): with self.assertRaisesRegex(RuntimeError, "must be greater"): Settings.from_env() class OcspRedisSettingsTest(unittest.TestCase): def test_defaults_to_disabled(self) -> None: with patch.dict(os.environ, {}, clear=True): settings = Settings.from_env() self.assertIsNone(settings.redis_url) self.assertIsNone(settings.ocsp_redis_url) self.assertIsNone(settings.ocsp_effective_redis_url) def test_falls_back_to_session_redis(self) -> None: with patch.dict( os.environ, {"REDIS_URL": "redis://sessions:6379/0"}, clear=True ): settings = Settings.from_env() self.assertEqual( "redis://sessions:6379/0", settings.ocsp_effective_redis_url ) def test_uses_dedicated_ocsp_redis(self) -> None: with patch.dict( os.environ, { "REDIS_URL": "redis://sessions:6379/0", "KCA_OCSP_REDIS_URL": "redis://ocsp:6379/0", }, clear=True, ): settings = Settings.from_env() self.assertEqual("redis://sessions:6379/0", settings.redis_url) self.assertEqual("redis://ocsp:6379/0", settings.ocsp_effective_redis_url) def test_dedicated_ocsp_redis_without_session_redis(self) -> None: with patch.dict( os.environ, {"KCA_OCSP_REDIS_URL": "redis://ocsp:6379/0"}, clear=True ): settings = Settings.from_env() self.assertIsNone(settings.redis_url) self.assertEqual("redis://ocsp:6379/0", settings.ocsp_effective_redis_url) if __name__ == "__main__": unittest.main()