Files
ai-daily-report/tests/test_env_config.py

89 lines
2.9 KiB
Python

import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
from ai_daily_report.env import resolve_blog_token, resolve_llm_config
class EnvConfigTests(unittest.TestCase):
def test_resolve_llm_config_prefers_generic_values(self):
config = resolve_llm_config(
{
"LLM_API_KEY": "generic-key",
"LLM_BASE_URL": "https://generic.example/v1",
"LLM_MODEL": "generic-model",
"SUB2API_API_KEY": "sub-key",
"SUB2API_BASE_URL": "https://sub.example/v1",
"SUB2API_MODEL": "sub-model",
}
)
self.assertEqual(
config,
{
"api_key": "generic-key",
"base_url": "https://generic.example/v1",
"model": "generic-model",
},
)
def test_resolve_llm_config_reports_missing_fields(self):
with TemporaryDirectory() as temp_dir:
with self.assertRaisesRegex(ValueError, "missing_llm_config: LLM_BASE_URL,LLM_MODEL"):
resolve_llm_config({"LLM_API_KEY": "key"}, hermes_dir=Path(temp_dir))
def test_resolve_llm_config_follows_hermes_provider_config(self):
with TemporaryDirectory() as temp_dir:
hermes_dir = Path(temp_dir)
(hermes_dir / "config.yaml").write_text(
"""
model:
provider: sub2api
default: findmini/gpt-5.5
base_url: http://sub2api.example/v1
""".strip(),
encoding="utf-8",
)
(hermes_dir / ".env").write_text("SUB2API_API_KEY=hermes-key\n", encoding="utf-8")
config = resolve_llm_config({}, hermes_dir=hermes_dir)
self.assertEqual(
config,
{
"api_key": "hermes-key",
"base_url": "http://sub2api.example/v1",
"model": "findmini/gpt-5.5",
},
)
def test_resolve_llm_config_uses_hermes_auth_json_env_source(self):
with TemporaryDirectory() as temp_dir:
hermes_dir = Path(temp_dir)
(hermes_dir / "config.yaml").write_text(
"""
model:
provider: sub2api
default: findmini/gpt-5.5
base_url: http://sub2api.example/v1
""".strip(),
encoding="utf-8",
)
(hermes_dir / "auth.json").write_text(
'{"credential_pool": {"sub2api": [{"source": "env:SUB2API_API_KEY"}]}}',
encoding="utf-8",
)
config = resolve_llm_config({"SUB2API_API_KEY": "auth-env-key"}, hermes_dir=hermes_dir)
self.assertEqual(config["api_key"], "auth-env-key")
self.assertEqual(config["base_url"], "http://sub2api.example/v1")
self.assertEqual(config["model"], "findmini/gpt-5.5")
def test_resolve_blog_token_uses_supported_names(self):
self.assertEqual(resolve_blog_token({"EPHRON_SERVICE_TOKEN": "token"}), "token")
if __name__ == "__main__":
unittest.main()