This commit is contained in:
Pablo Estevez
2026-01-17 17:29:21 +00:00
parent c89f059712
commit 5ed767ff9a
144 changed files with 14142 additions and 16488 deletions

View File

@@ -4,9 +4,8 @@ Tests for multi-platform install workflow
"""
import unittest
from unittest.mock import patch, MagicMock, AsyncMock
import asyncio
from pathlib import Path
from unittest.mock import MagicMock, patch
class TestInstallCLI(unittest.TestCase):
@@ -16,7 +15,6 @@ class TestInstallCLI(unittest.TestCase):
"""Test that CLI accepts --target flag"""
import argparse
import sys
from pathlib import Path
# Mock sys.path to import install_skill module
sys.path.insert(0, str(Path(__file__).parent.parent / "src" / "skill_seekers" / "cli"))
@@ -25,16 +23,16 @@ class TestInstallCLI(unittest.TestCase):
# Create parser like install_skill.py does
parser = argparse.ArgumentParser()
parser.add_argument("--config", required=True)
parser.add_argument("--target", choices=['claude', 'gemini', 'openai', 'markdown'], default='claude')
parser.add_argument("--target", choices=["claude", "gemini", "openai", "markdown"], default="claude")
# Test that each platform is accepted
for platform in ['claude', 'gemini', 'openai', 'markdown']:
args = parser.parse_args(['--config', 'test', '--target', platform])
for platform in ["claude", "gemini", "openai", "markdown"]:
args = parser.parse_args(["--config", "test", "--target", platform])
self.assertEqual(args.target, platform)
# Test default is claude
args = parser.parse_args(['--config', 'test'])
self.assertEqual(args.target, 'claude')
args = parser.parse_args(["--config", "test"])
self.assertEqual(args.target, "claude")
finally:
sys.path.pop(0)
@@ -45,11 +43,11 @@ class TestInstallCLI(unittest.TestCase):
parser = argparse.ArgumentParser()
parser.add_argument("--config", required=True)
parser.add_argument("--target", choices=['claude', 'gemini', 'openai', 'markdown'], default='claude')
parser.add_argument("--target", choices=["claude", "gemini", "openai", "markdown"], default="claude")
# Should raise SystemExit for invalid target
with self.assertRaises(SystemExit):
parser.parse_args(['--config', 'test', '--target', 'invalid'])
parser.parse_args(["--config", "test", "--target", "invalid"])
class TestInstallToolMultiPlatform(unittest.IsolatedAsyncioTestCase):
@@ -61,24 +59,20 @@ class TestInstallToolMultiPlatform(unittest.IsolatedAsyncioTestCase):
# Just test dry_run mode which doesn't need mocking all internal tools
# Test with each platform
for target in ['claude', 'gemini', 'openai']:
for target in ["claude", "gemini", "openai"]:
# Use dry_run=True which skips actual execution
# It will still show us the platform is being recognized
with patch('builtins.open', create=True) as mock_open, \
patch('json.load') as mock_json_load:
with patch("builtins.open", create=True) as mock_open, patch("json.load") as mock_json_load:
# Mock config file reading
mock_json_load.return_value = {'name': 'test-skill'}
mock_json_load.return_value = {"name": "test-skill"}
mock_file = MagicMock()
mock_file.__enter__ = lambda s: s
mock_file.__exit__ = MagicMock()
mock_open.return_value = mock_file
result = await install_skill_tool({
"config_path": "configs/test.json",
"target": target,
"dry_run": True
})
result = await install_skill_tool(
{"config_path": "configs/test.json", "target": target, "dry_run": True}
)
# Verify result mentions the correct platform
result_text = result[0].text
@@ -87,11 +81,10 @@ class TestInstallToolMultiPlatform(unittest.IsolatedAsyncioTestCase):
async def test_install_tool_uses_correct_adaptor(self):
"""Test that install_skill_tool uses the correct adaptor for each platform"""
from skill_seekers.mcp.tools.packaging_tools import install_skill_tool
from skill_seekers.cli.adaptors import get_adaptor
# Test that each platform creates the right adaptor
for target in ['claude', 'gemini', 'openai', 'markdown']:
for target in ["claude", "gemini", "openai", "markdown"]:
adaptor = get_adaptor(target)
self.assertEqual(adaptor.PLATFORM, target)
@@ -100,16 +93,16 @@ class TestInstallToolMultiPlatform(unittest.IsolatedAsyncioTestCase):
from skill_seekers.cli.adaptors import get_adaptor
# Test API key env var names
claude_adaptor = get_adaptor('claude')
self.assertEqual(claude_adaptor.get_env_var_name(), 'ANTHROPIC_API_KEY')
claude_adaptor = get_adaptor("claude")
self.assertEqual(claude_adaptor.get_env_var_name(), "ANTHROPIC_API_KEY")
gemini_adaptor = get_adaptor('gemini')
self.assertEqual(gemini_adaptor.get_env_var_name(), 'GOOGLE_API_KEY')
gemini_adaptor = get_adaptor("gemini")
self.assertEqual(gemini_adaptor.get_env_var_name(), "GOOGLE_API_KEY")
openai_adaptor = get_adaptor('openai')
self.assertEqual(openai_adaptor.get_env_var_name(), 'OPENAI_API_KEY')
openai_adaptor = get_adaptor("openai")
self.assertEqual(openai_adaptor.get_env_var_name(), "OPENAI_API_KEY")
markdown_adaptor = get_adaptor('markdown')
markdown_adaptor = get_adaptor("markdown")
# Markdown doesn't need an API key, but should still have a method
self.assertIsNotNone(markdown_adaptor.get_env_var_name())
@@ -123,10 +116,10 @@ class TestInstallWorkflowIntegration(unittest.IsolatedAsyncioTestCase):
# Test each platform shows correct platform name
platforms = {
'claude': 'Claude AI (Anthropic)',
'gemini': 'Google Gemini',
'openai': 'OpenAI ChatGPT',
'markdown': 'Generic Markdown (Universal)'
"claude": "Claude AI (Anthropic)",
"gemini": "Google Gemini",
"openai": "OpenAI ChatGPT",
"markdown": "Generic Markdown (Universal)",
}
for target, expected_name in platforms.items():
@@ -134,5 +127,5 @@ class TestInstallWorkflowIntegration(unittest.IsolatedAsyncioTestCase):
self.assertEqual(adaptor.PLATFORM_NAME, expected_name)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()