Files
server-manager/test_ai_setup.py

94 lines
4.1 KiB
Python

import os
import tempfile
import unittest
from pathlib import Path
from core import claude_setup as cs
class AISetupTests(unittest.TestCase):
def setUp(self):
self._old_target = os.environ.get("SERVER_MANAGER_TARGET_HOME")
self._old_all = os.environ.get("SERVER_MANAGER_INSTALL_ALL_USERS")
self._old_iter = cs._iter_all_user_homes
self._old_platform = cs.sys.platform
def tearDown(self):
if self._old_target is None:
os.environ.pop("SERVER_MANAGER_TARGET_HOME", None)
else:
os.environ["SERVER_MANAGER_TARGET_HOME"] = self._old_target
if self._old_all is None:
os.environ.pop("SERVER_MANAGER_INSTALL_ALL_USERS", None)
else:
os.environ["SERVER_MANAGER_INSTALL_ALL_USERS"] = self._old_all
cs._iter_all_user_homes = self._old_iter
cs.sys.platform = self._old_platform
def test_single_target_installers_create_expected_files(self):
with tempfile.TemporaryDirectory() as tmp:
os.environ["SERVER_MANAGER_TARGET_HOME"] = tmp
cs.install_ssh_script()
cs.install_claude_skill()
cs.install_codex_skill()
cs.install_gemini_skill()
cs.install_global_claude_md()
cs.install_global_gemini_md()
self.assertTrue(Path(tmp, ".server-connections", "ssh.py").exists())
self.assertTrue(Path(tmp, ".server-connections", "encryption.py").exists())
self.assertTrue(Path(tmp, ".claude", "commands", "ssh.md").exists())
self.assertTrue(Path(tmp, ".codex", "skills", "server-manager", "SKILL.md").exists())
self.assertTrue(Path(tmp, ".gemini", "skills", "server-manager", "SKILL.md").exists())
self.assertTrue(Path(tmp, ".server-connections", "codex-ssh").exists())
self.assertTrue(Path(tmp, ".server-connections", "gemini-ssh").exists())
self.assertTrue(Path(tmp, ".claude", "CLAUDE.md").exists())
self.assertTrue(Path(tmp, ".gemini", "GEMINI.md").exists())
self.assertFalse(Path(tmp, ".agents", "skills", "server-manager").exists())
status = cs.check_status()
self.assertTrue(status["claude_skill_installed"])
self.assertTrue(status["codex_skill_installed"])
self.assertTrue(status["gemini_skill_installed"])
self.assertTrue(status["codex_wrapper_installed"])
self.assertTrue(status["gemini_wrapper_installed"])
def test_install_all_users_mode_installs_into_each_home_and_skips_ssh_key(self):
with tempfile.TemporaryDirectory() as base:
home1 = Path(base, "user1")
home2 = Path(base, "user2")
home1.mkdir()
home2.mkdir()
os.environ["SERVER_MANAGER_INSTALL_ALL_USERS"] = "1"
cs._iter_all_user_homes = lambda: [str(home1), str(home2)]
results = cs.install_all()
self.assertIn("INFO: SSH key generation skipped", "\n".join(results))
self.assertTrue(Path(home1, ".codex", "skills", "server-manager", "SKILL.md").exists())
self.assertTrue(Path(home1, ".gemini", "skills", "server-manager", "SKILL.md").exists())
self.assertTrue(Path(home2, ".codex", "skills", "server-manager", "SKILL.md").exists())
self.assertTrue(Path(home2, ".gemini", "skills", "server-manager", "SKILL.md").exists())
self.assertFalse(Path(home1, ".ssh", "id_ed25519").exists())
self.assertFalse(Path(home2, ".ssh", "id_ed25519").exists())
def test_windows_wrapper_names_are_generated_with_cmd_suffix(self):
with tempfile.TemporaryDirectory() as tmp:
os.environ["SERVER_MANAGER_TARGET_HOME"] = tmp
cs.sys.platform = "win32"
cs.install_ssh_script()
cs.install_codex_skill()
cs.install_gemini_skill()
self.assertTrue(Path(tmp, ".server-connections", "codex-ssh.cmd").exists())
self.assertTrue(Path(tmp, ".server-connections", "gemini-ssh.cmd").exists())
if __name__ == "__main__":
unittest.main()