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 self.assertRaisesRegex(ValueError, "missing_llm_config: LLM_BASE_URL,LLM_MODEL"): resolve_llm_config({"LLM_API_KEY": "key"}) 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()