Files
dss/test_iteration1.py
Digital Production Factory 276ed71f31 Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
2025-12-09 18:45:48 -03:00

215 lines
6.2 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Iteration 1: Core Validation Test Suite
Tests all token ingestion, analysis, and Storybook functionality
"""
import asyncio
import sys
import json
from pathlib import Path
# Add tools to path
sys.path.insert(0, str(Path(__file__).parent))
async def test_css_ingestion():
"""Test CSS token ingestion"""
print("\n=== Testing CSS Token Ingestion ===")
from tools.ingest.css import CSSTokenSource
# Test CSS
css_content = """
:root {
--primary-color: #3B82F6;
--spacing-md: 16px;
--font-size-base: 16px;
}
"""
try:
parser = CSSTokenSource()
collection = await parser.extract(css_content)
print(f"✅ CSS: Parsed {len(collection.tokens)} tokens")
for token in collection.tokens[:3]:
print(f" - {token.name}: {token.value}")
return True
except Exception as e:
print(f"❌ CSS Error: {e}")
import traceback
traceback.print_exc()
return False
async def test_scss_ingestion():
"""Test SCSS token ingestion"""
print("\n=== Testing SCSS Token Ingestion ===")
from tools.ingest.scss import SCSSTokenSource
scss_content = """
$primary: #3B82F6;
$spacing-md: 16px;
$font-family: 'Inter', sans-serif;
"""
try:
parser = SCSSTokenSource()
tokens = await parser.parse(scss_content)
print(f"✅ SCSS: Parsed {len(tokens)} tokens")
for token in tokens[:3]:
print(f" - {token.name}: {token.value}")
return True
except Exception as e:
print(f"❌ SCSS Error: {e}")
return False
async def test_tailwind_ingestion():
"""Test Tailwind config ingestion"""
print("\n=== Testing Tailwind Token Ingestion ===")
from tools.ingest.tailwind import TailwindTokenSource
config_content = """
module.exports = {
theme: {
colors: {
primary: '#3B82F6',
secondary: '#10B981',
},
spacing: {
'sm': '8px',
'md': '16px',
}
}
}
"""
try:
parser = TailwindTokenSource()
tokens = await parser.parse(config_content)
print(f"✅ Tailwind: Parsed {len(tokens)} tokens")
for token in tokens[:3]:
print(f" - {token.name}: {token.value}")
return True
except Exception as e:
print(f"❌ Tailwind Error: {e}")
return False
async def test_json_ingestion():
"""Test JSON token ingestion"""
print("\n=== Testing JSON Token Ingestion ===")
from tools.ingest.json_tokens import JSONTokenSource
json_content = {
"color": {
"primary": {
"500": {"value": "#3B82F6", "type": "color"}
}
},
"spacing": {
"md": {"value": "16px", "type": "dimension"}
}
}
try:
parser = JSONTokenSource()
tokens = await parser.parse(json.dumps(json_content))
print(f"✅ JSON: Parsed {len(tokens)} tokens")
for token in tokens[:3]:
print(f" - {token.name}: {token.value}")
return True
except Exception as e:
print(f"❌ JSON Error: {e}")
return False
async def test_token_merge():
"""Test token merging"""
print("\n=== Testing Token Merge ===")
from tools.ingest.merge import TokenMerger, MergeStrategy
from tools.ingest.base import DesignToken
try:
tokens_a = [
DesignToken(name="color.primary", value="#FF0000", type="color", source="css"),
DesignToken(name="spacing.md", value="16px", type="dimension", source="css"),
]
tokens_b = [
DesignToken(name="color.primary", value="#3B82F6", type="color", source="figma"),
DesignToken(name="color.secondary", value="#10B981", type="color", source="figma"),
]
merger = TokenMerger(strategy=MergeStrategy.PREFER_FIGMA)
result = await merger.merge([tokens_a, tokens_b])
print(f"✅ Merge: {len(result.tokens)} tokens, {len(result.conflicts)} conflicts")
if result.conflicts:
print(f" Conflicts resolved:")
for conflict in result.conflicts:
print(f" - {conflict.token_name}: chose {conflict.chosen_value}")
return True
except Exception as e:
print(f"❌ Merge Error: {e}")
return False
async def test_figma_tools():
"""Test Figma integration"""
print("\n=== Testing Figma Integration ===")
from tools.figma.figma_tools import FigmaToolSuite
try:
# Test with mock mode (no API key)
suite = FigmaToolSuite(output_dir="./test_output")
print(f"✅ Figma: Mode = {suite.mode}")
# Test mock data
file_key = "test123"
components = await suite.extract_components(file_key)
print(f" Components: {components.get('components_count', 0)}")
styles = await suite.extract_styles(file_key)
print(f" Styles: {styles.get('styles_count', 0)}")
return True
except Exception as e:
print(f"❌ Figma Error: {e}")
return False
async def main():
"""Run all tests"""
print("=" * 60)
print("DSS ITERATION 1: CORE VALIDATION")
print("=" * 60)
results = []
# Token Ingestion Tests
results.append(("CSS Ingestion", await test_css_ingestion()))
results.append(("SCSS Ingestion", await test_scss_ingestion()))
results.append(("Tailwind Ingestion", await test_tailwind_ingestion()))
results.append(("JSON Ingestion", await test_json_ingestion()))
results.append(("Token Merge", await test_token_merge()))
results.append(("Figma Tools", await test_figma_tools()))
# Summary
print("\n" + "=" * 60)
print("TEST SUMMARY")
print("=" * 60)
passed = sum(1 for _, result in results if result)
total = len(results)
for name, result in results:
status = "✅ PASS" if result else "❌ FAIL"
print(f"{status}: {name}")
print(f"\nPassed: {passed}/{total} ({100*passed//total}%)")
if passed == total:
print("\n🎉 ALL TESTS PASSED!")
return 0
else:
print(f"\n⚠️ {total - passed} TEST(S) FAILED")
return 1
if __name__ == "__main__":
exit_code = asyncio.run(main())
sys.exit(exit_code)