"""Tests for credential persistence module.""" import os import pytest from openjarvis.core.credentials import ( get_credential_status, load_credentials, save_credential, ) @pytest.fixture def cred_path(tmp_path): return tmp_path / "credentials.toml" def test_save_and_load(cred_path): save_credential("web_search", "TAVILY_API_KEY", "tvly-123", path=cred_path) creds = load_credentials(path=cred_path) assert creds["web_search"]["TAVILY_API_KEY"] == "tvly-123" def test_save_sets_env(cred_path, monkeypatch): monkeypatch.delenv("TAVILY_API_KEY", raising=False) save_credential("web_search", "TAVILY_API_KEY", "tvly-abc", path=cred_path) assert os.environ["TAVILY_API_KEY"] == "tvly-abc" def test_save_rejects_unknown_key(cred_path): with pytest.raises(ValueError, match="Unknown credential key"): save_credential("web_search", "BOGUS_KEY", "val", path=cred_path) def test_save_rejects_empty_value(cred_path): with pytest.raises(ValueError, match="empty"): save_credential("web_search", "TAVILY_API_KEY", " ", path=cred_path) def test_get_status(cred_path, monkeypatch): monkeypatch.setenv("TAVILY_API_KEY", "tvly-x") status = get_credential_status("web_search") assert status["TAVILY_API_KEY"] is True def test_get_status_missing(monkeypatch): monkeypatch.delenv("TAVILY_API_KEY", raising=False) status = get_credential_status("web_search") assert status["TAVILY_API_KEY"] is False def test_file_permissions(cred_path): save_credential("web_search", "TAVILY_API_KEY", "tvly-x", path=cred_path) mode = oct(cred_path.stat().st_mode & 0o777) assert mode == "0o600"