"""게이트웨이 내부 provider 자격증명 push 엔드포인트 테스트.""" import os import unittest from unittest.mock import patch from fastapi.testclient import TestClient from engine_gateway import gateway from engine_gateway import provider_registry class ProviderCredentialsPushTest(unittest.TestCase): def setUp(self): self.client = TestClient(gateway.app) def tearDown(self): # 테스트가 흘려넣은 토큰을 프로세스 환경에서 회수한다. for name in ( "ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "OPENAI_API_KEY", "AGY_API_KEY", "OPENROUTER_API_KEY", ): os.environ.pop(name, None) provider_registry._PROVIDER_AUTH_KINDS.clear() def test_status_reports_boot_id_and_loaded_providers(self): with patch.dict(os.environ, {"OPENROUTER_API_KEY": "sk-or-test-token"}, clear=False): response = self.client.get("/internal/provider-credentials") self.assertEqual(response.status_code, 200) payload = response.json() self.assertTrue(payload["ok"]) self.assertTrue(payload["boot_id"]) self.assertIn("openrouter", payload["loaded_providers"]) def test_push_claude_oauth_token_routes_to_auth_token_env(self): response = self.client.post( "/internal/provider-credentials", json={ "providers": { "claude": {"token": "oauth-token-abc", "auth_kind": "oauth_token"} } }, ) self.assertEqual(response.status_code, 200) payload = response.json() self.assertEqual(payload["applied"], ["claude"]) self.assertEqual(os.environ.get("ANTHROPIC_AUTH_TOKEN"), "oauth-token-abc") self.assertIsNone(os.environ.get("ANTHROPIC_API_KEY")) self.assertEqual(provider_registry.get_provider_auth_kind("claude"), "oauth_token") def test_push_claude_api_key_removes_auth_token_env(self): os.environ["ANTHROPIC_AUTH_TOKEN"] = "stale-oauth" response = self.client.post( "/internal/provider-credentials", json={ "providers": { "claude": {"token": "sk-ant-api03-xyz", "auth_kind": "api_key"} } }, ) self.assertEqual(response.status_code, 200) self.assertEqual(os.environ.get("ANTHROPIC_API_KEY"), "sk-ant-api03-xyz") self.assertIsNone(os.environ.get("ANTHROPIC_AUTH_TOKEN")) def test_push_openrouter_token(self): response = self.client.post( "/internal/provider-credentials", json={ "providers": { "openrouter": {"token": "sk-or-v1-xyz", "auth_kind": "api_key"} } }, ) self.assertEqual(response.status_code, 200) self.assertEqual(os.environ.get("OPENROUTER_API_KEY"), "sk-or-v1-xyz") def test_push_unknown_provider_is_ignored(self): response = self.client.post( "/internal/provider-credentials", json={"providers": {"nope": {"token": "x" * 16, "auth_kind": "api_key"}}}, ) self.assertEqual(response.status_code, 200) self.assertEqual(response.json()["applied"], []) if __name__ == "__main__": unittest.main()