import importlib import os import sys import tempfile import unittest from pathlib import Path class ConfigEnvLoadingTests(unittest.TestCase): def setUp(self) -> None: self._old_cwd = Path.cwd() self._keys = [ "SCW_ACCESS_KEY", "SCW_SECRET_KEY", "SCW_DEFAULT_ORGANIZATION_ID", "SCW_DEFAULT_PROJECT_ID", "SCW_SERVERLESS", ] self._backup = {k: os.environ.get(k) for k in self._keys} def tearDown(self) -> None: os.chdir(self._old_cwd) for key, value in self._backup.items(): if value is None: os.environ.pop(key, None) else: os.environ[key] = value def _clear_env(self) -> None: for key in self._keys: os.environ.pop(key, None) def test_import_uses_dotenv_fallback(self) -> None: self._clear_env() with tempfile.TemporaryDirectory() as tmp: os.chdir(tmp) Path(".env").write_text( "SCW_ACCESS_KEY=key0\n" "SCW_SECRET_KEY=key1\n" "SCW_DEFAULT_ORGANIZATION_ID=key2\n" "SCW_DEFAULT_PROJECT_ID=key3\n" "SCW_SERVERLESS=key4\n" ) sys.modules.pop("migration_pipeline.config", None) config = importlib.import_module("migration_pipeline.config") self.assertEqual(config.SCW_SERVERLESS, "key4") self.assertEqual( config.BASE_URL, "https://api.scaleway.ai/key4/v1/chat/completions", ) def test_import_fails_when_required_env_missing(self) -> None: self._clear_env() with tempfile.TemporaryDirectory() as tmp: os.chdir(tmp) sys.modules.pop("migration_pipeline.config", None) with self.assertRaisesRegex(RuntimeError, "SCW_ACCESS_KEY"): importlib.import_module("migration_pipeline.config")