"""Unit tests for src/my_deepagent/keys.py. Uses a fake keyring backend.""" from __future__ import annotations import pytest import my_deepagent.keys as keys_module from my_deepagent.keys import delete_api_key, get_api_key, mask, set_api_key class _FakeKeyring: def __init__(self) -> None: self.store: dict[tuple[str, str], str] = {} def get_password(self, service: str, username: str) -> str | None: return self.store.get((service, username)) def set_password(self, service: str, username: str, value: str) -> None: self.store[(service, username)] = value def delete_password(self, service: str, username: str) -> None: self.store.pop((service, username), None) @pytest.fixture def fake_keyring(monkeypatch: pytest.MonkeyPatch) -> _FakeKeyring: fake = _FakeKeyring() monkeypatch.setattr(keys_module.keyring, "get_password", fake.get_password) monkeypatch.setattr(keys_module.keyring, "set_password", fake.set_password) monkeypatch.setattr(keys_module.keyring, "delete_password", fake.delete_password) return fake def test_get_api_key_not_set_returns_none(fake_keyring: _FakeKeyring) -> None: assert get_api_key("openrouter") is None def test_set_and_get_api_key_round_trip(fake_keyring: _FakeKeyring) -> None: set_api_key("openrouter", "sk-or-test-1234") assert get_api_key("openrouter") == "sk-or-test-1234" def test_delete_api_key_existing_returns_true(fake_keyring: _FakeKeyring) -> None: set_api_key("openrouter", "sk-or-test") assert delete_api_key("openrouter") is True def test_delete_api_key_not_existing_returns_false(fake_keyring: _FakeKeyring) -> None: assert delete_api_key("openrouter") is False def test_delete_api_key_removes_value(fake_keyring: _FakeKeyring) -> None: set_api_key("openrouter", "sk-or-test") delete_api_key("openrouter") assert get_api_key("openrouter") is None def test_mask_long_key() -> None: result = mask("sk-or-v1-abc1234567xyz9876") assert result == "sk-or-v1...9876" def test_mask_none_returns_not_set() -> None: assert mask(None) == "(not set)" def test_mask_short_key_returns_stars() -> None: assert mask("short") == "***" def test_mask_exactly_8_chars_returns_stars() -> None: assert mask("12345678") == "***"