118 lines
3.7 KiB
Python
118 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Tests for base adaptor and registry
|
|
"""
|
|
|
|
import unittest
|
|
|
|
from skill_seekers.cli.adaptors import (
|
|
SkillAdaptor,
|
|
SkillMetadata,
|
|
get_adaptor,
|
|
is_platform_available,
|
|
list_platforms,
|
|
)
|
|
|
|
|
|
class TestSkillMetadata(unittest.TestCase):
|
|
"""Test SkillMetadata dataclass"""
|
|
|
|
def test_basic_metadata(self):
|
|
"""Test basic metadata creation"""
|
|
metadata = SkillMetadata(name="test-skill", description="Test skill description")
|
|
|
|
self.assertEqual(metadata.name, "test-skill")
|
|
self.assertEqual(metadata.description, "Test skill description")
|
|
self.assertEqual(metadata.version, "1.0.0") # default
|
|
self.assertIsNone(metadata.author) # default
|
|
self.assertEqual(metadata.tags, []) # default
|
|
|
|
def test_full_metadata(self):
|
|
"""Test metadata with all fields"""
|
|
metadata = SkillMetadata(
|
|
name="react",
|
|
description="React documentation",
|
|
version="2.5.0",
|
|
author="Test Author",
|
|
tags=["react", "javascript", "web"],
|
|
)
|
|
|
|
self.assertEqual(metadata.name, "react")
|
|
self.assertEqual(metadata.description, "React documentation")
|
|
self.assertEqual(metadata.version, "2.5.0")
|
|
self.assertEqual(metadata.author, "Test Author")
|
|
self.assertEqual(metadata.tags, ["react", "javascript", "web"])
|
|
|
|
|
|
class TestAdaptorRegistry(unittest.TestCase):
|
|
"""Test adaptor registry and factory"""
|
|
|
|
def test_list_platforms(self):
|
|
"""Test listing available platforms"""
|
|
platforms = list_platforms()
|
|
|
|
self.assertIsInstance(platforms, list)
|
|
# Claude should always be available
|
|
self.assertIn("claude", platforms)
|
|
|
|
def test_is_platform_available(self):
|
|
"""Test checking platform availability"""
|
|
# Claude should be available
|
|
self.assertTrue(is_platform_available("claude"))
|
|
|
|
# Unknown platform should not be available
|
|
self.assertFalse(is_platform_available("unknown_platform"))
|
|
|
|
def test_get_adaptor_claude(self):
|
|
"""Test getting Claude adaptor"""
|
|
adaptor = get_adaptor("claude")
|
|
|
|
self.assertIsInstance(adaptor, SkillAdaptor)
|
|
self.assertEqual(adaptor.PLATFORM, "claude")
|
|
self.assertEqual(adaptor.PLATFORM_NAME, "Claude AI (Anthropic)")
|
|
|
|
def test_get_adaptor_invalid(self):
|
|
"""Test getting invalid adaptor raises error"""
|
|
with self.assertRaises(ValueError) as ctx:
|
|
get_adaptor("invalid_platform")
|
|
|
|
error_msg = str(ctx.exception)
|
|
self.assertIn("invalid_platform", error_msg)
|
|
self.assertIn("not supported", error_msg)
|
|
|
|
def test_get_adaptor_with_config(self):
|
|
"""Test getting adaptor with custom config"""
|
|
config = {"custom_setting": "value"}
|
|
adaptor = get_adaptor("claude", config)
|
|
|
|
self.assertEqual(adaptor.config, config)
|
|
|
|
|
|
class TestBaseAdaptorInterface(unittest.TestCase):
|
|
"""Test base adaptor interface methods"""
|
|
|
|
def setUp(self):
|
|
"""Set up test adaptor"""
|
|
self.adaptor = get_adaptor("claude")
|
|
|
|
def test_validate_api_key_default(self):
|
|
"""Test default API key validation"""
|
|
# Claude adaptor overrides this
|
|
self.assertTrue(self.adaptor.validate_api_key("sk-ant-test123"))
|
|
self.assertFalse(self.adaptor.validate_api_key("invalid"))
|
|
|
|
def test_get_env_var_name(self):
|
|
"""Test environment variable name"""
|
|
env_var = self.adaptor.get_env_var_name()
|
|
|
|
self.assertEqual(env_var, "ANTHROPIC_API_KEY")
|
|
|
|
def test_supports_enhancement(self):
|
|
"""Test enhancement support check"""
|
|
# Claude supports enhancement
|
|
self.assertTrue(self.adaptor.supports_enhancement())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|