59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
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")
|