94 lines
4.1 KiB
Python
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()
|