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
This commit is contained in:
109
tests/test_merge.py
Normal file
109
tests/test_merge.py
Normal file
@@ -0,0 +1,109 @@
|
||||
"""
|
||||
Tests for token merging and conflict resolution.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from tools.ingest.merge import TokenMerger, MergeStrategy
|
||||
from tools.ingest.base import TokenCollection, DesignToken, TokenType
|
||||
|
||||
|
||||
def test_merge_no_conflicts():
|
||||
"""Test merging collections with no conflicts."""
|
||||
col1 = TokenCollection([
|
||||
DesignToken(name="color.red", value="#FF0000", type=TokenType.COLOR)
|
||||
])
|
||||
col2 = TokenCollection([
|
||||
DesignToken(name="color.blue", value="#0000FF", type=TokenType.COLOR)
|
||||
])
|
||||
|
||||
merger = TokenMerger(strategy=MergeStrategy.LAST)
|
||||
result = merger.merge([col1, col2])
|
||||
|
||||
assert len(result.collection.tokens) == 2
|
||||
assert len(result.conflicts) == 0
|
||||
|
||||
|
||||
def test_merge_strategy_first():
|
||||
"""Test FIRST merge strategy."""
|
||||
col1 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#FF0000", type=TokenType.COLOR, source="css")
|
||||
])
|
||||
col2 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#0000FF", type=TokenType.COLOR, source="figma")
|
||||
])
|
||||
|
||||
merger = TokenMerger(strategy=MergeStrategy.FIRST)
|
||||
result = merger.merge([col1, col2])
|
||||
|
||||
assert len(result.collection.tokens) == 1
|
||||
assert len(result.conflicts) == 1
|
||||
# Should keep first value
|
||||
token = result.collection.tokens[0]
|
||||
assert token.value == "#FF0000"
|
||||
assert token.source == "css"
|
||||
|
||||
|
||||
def test_merge_strategy_last():
|
||||
"""Test LAST merge strategy."""
|
||||
col1 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#FF0000", type=TokenType.COLOR, source="css")
|
||||
])
|
||||
col2 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#0000FF", type=TokenType.COLOR, source="figma")
|
||||
])
|
||||
|
||||
merger = TokenMerger(strategy=MergeStrategy.LAST)
|
||||
result = merger.merge([col1, col2])
|
||||
|
||||
assert len(result.collection.tokens) == 1
|
||||
assert len(result.conflicts) == 1
|
||||
# Should keep last value
|
||||
token = result.collection.tokens[0]
|
||||
assert token.value == "#0000FF"
|
||||
assert token.source == "figma"
|
||||
|
||||
|
||||
def test_merge_strategy_prefer_figma():
|
||||
"""Test PREFER_FIGMA merge strategy."""
|
||||
col1 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#FF0000", type=TokenType.COLOR, source="css")
|
||||
])
|
||||
col2 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#3B82F6", type=TokenType.COLOR, source="figma")
|
||||
])
|
||||
col3 = TokenCollection([
|
||||
DesignToken(name="color.primary", value="#0000FF", type=TokenType.COLOR, source="scss")
|
||||
])
|
||||
|
||||
merger = TokenMerger(strategy=MergeStrategy.PREFER_FIGMA)
|
||||
result = merger.merge([col1, col2, col3])
|
||||
|
||||
# Should prefer Figma value
|
||||
token = result.collection.tokens[0]
|
||||
assert token.value == "#3B82F6"
|
||||
assert token.source == "figma"
|
||||
|
||||
|
||||
def test_merge_multiple_collections():
|
||||
"""Test merging many collections."""
|
||||
collections = [
|
||||
TokenCollection([
|
||||
DesignToken(name=f"color.{i}", value=f"#{i:06X}", type=TokenType.COLOR)
|
||||
])
|
||||
for i in range(10)
|
||||
]
|
||||
|
||||
merger = TokenMerger(strategy=MergeStrategy.LAST)
|
||||
result = merger.merge(collections)
|
||||
|
||||
assert len(result.collection.tokens) == 10
|
||||
assert len(result.conflicts) == 0
|
||||
|
||||
|
||||
def test_merge_empty_collections():
|
||||
"""Test merging empty collections."""
|
||||
merger = TokenMerger(strategy=MergeStrategy.LAST)
|
||||
result = merger.merge([])
|
||||
|
||||
assert len(result.collection.tokens) == 0
|
||||
assert len(result.conflicts) == 0
|
||||
Reference in New Issue
Block a user