66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
"""Test OAuth store integration with config loading."""
|
|
import json
|
|
import pytest
|
|
import tempfile
|
|
from pathlib import Path
|
|
from nanobot.config.loader import load_config
|
|
from nanobot.config.oauth_store import OAuthStore
|
|
from nanobot.config.schema import OAuthCredentials
|
|
|
|
|
|
def test_oauth_token_injected_into_config(tmp_path, monkeypatch):
|
|
"""OAuth token from store should be injected into provider api_key."""
|
|
# Create a minimal config file (no api key set)
|
|
config_path = tmp_path / "config.json"
|
|
config_path.write_text(json.dumps({
|
|
"agents": {"defaults": {"model": "anthropic/claude-opus-4-5"}},
|
|
"providers": {"anthropic": {"apiKey": ""}}
|
|
}))
|
|
|
|
# Save OAuth credentials
|
|
store = OAuthStore(tmp_path)
|
|
creds = OAuthCredentials(access_token="sk-ant-oat01-test-inject")
|
|
store.save("anthropic", creds)
|
|
|
|
# Monkeypatch get_config_path to use our tmp dir
|
|
monkeypatch.setattr("nanobot.config.loader.get_config_path", lambda: config_path)
|
|
# Monkeypatch the OAuth store path
|
|
monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path)
|
|
|
|
config = load_config(config_path)
|
|
|
|
assert config.providers.anthropic.api_key == "sk-ant-oat01-test-inject"
|
|
|
|
|
|
def test_config_without_oauth_unchanged(tmp_path, monkeypatch):
|
|
"""Config without OAuth store should load normally."""
|
|
config_path = tmp_path / "config.json"
|
|
config_path.write_text(json.dumps({
|
|
"providers": {"anthropic": {"apiKey": "sk-ant-api03-regular"}}
|
|
}))
|
|
|
|
monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path / "nonexistent")
|
|
|
|
config = load_config(config_path)
|
|
|
|
assert config.providers.anthropic.api_key == "sk-ant-api03-regular"
|
|
|
|
|
|
def test_oauth_does_not_overwrite_existing_key(tmp_path, monkeypatch):
|
|
"""If user already has an API key, OAuth should still override (OAuth takes priority)."""
|
|
config_path = tmp_path / "config.json"
|
|
config_path.write_text(json.dumps({
|
|
"providers": {"anthropic": {"apiKey": "sk-ant-api03-existing"}}
|
|
}))
|
|
|
|
store = OAuthStore(tmp_path)
|
|
creds = OAuthCredentials(access_token="sk-ant-oat01-oauth-wins")
|
|
store.save("anthropic", creds)
|
|
|
|
monkeypatch.setattr("nanobot.config.loader._get_oauth_store_dir", lambda: tmp_path)
|
|
|
|
config = load_config(config_path)
|
|
|
|
# OAuth token takes priority over existing API key
|
|
assert config.providers.anthropic.api_key == "sk-ant-oat01-oauth-wins"
|