"""Unit tests for default DSS themes""" import pytest from dss.themes import get_default_light_theme, get_default_dark_theme from dss.models.theme import TokenCategory @pytest.mark.unit class TestDefaultThemes: """Test default light & dark themes""" def test_light_theme_structure(self): """Test light theme has correct structure""" theme = get_default_light_theme() assert theme.name == "DSS Light" assert theme.version == "1.0.0" assert len(theme.tokens) > 20 def test_dark_theme_structure(self): """Test dark theme has correct structure""" theme = get_default_dark_theme() assert theme.name == "DSS Dark" assert theme.version == "1.0.0" assert len(theme.tokens) > 20 def test_themes_have_same_token_names(self): """Test light and dark themes have matching token names""" light = get_default_light_theme() dark = get_default_dark_theme() light_tokens = set(light.tokens.keys()) dark_tokens = set(dark.tokens.keys()) assert light_tokens == dark_tokens, "Light and dark themes must have same token names" def test_color_tokens_present(self): """Test essential color tokens are present""" theme = get_default_light_theme() required_colors = ["background", "foreground", "primary", "secondary", "accent", "destructive", "success", "warning"] for color in required_colors: assert color in theme.tokens assert theme.tokens[color].category == TokenCategory.COLOR def test_spacing_tokens_present(self): """Test spacing tokens are present""" theme = get_default_light_theme() spacing_tokens = theme.get_tokens_by_category(TokenCategory.SPACING) assert len(spacing_tokens) == 5 # xs, sm, md, lg, xl assert "space-md" in spacing_tokens def test_radius_tokens_present(self): """Test border radius tokens are present""" theme = get_default_light_theme() radius_tokens = theme.get_tokens_by_category(TokenCategory.RADIUS) assert len(radius_tokens) == 3 # sm, md, lg assert "radius-md" in radius_tokens def test_typography_tokens_present(self): """Test typography tokens are present""" theme = get_default_light_theme() typo_tokens = theme.get_tokens_by_category(TokenCategory.TYPOGRAPHY) assert len(typo_tokens) == 5 # xs, sm, base, lg, xl assert "text-base" in typo_tokens def test_dark_theme_colors_different_from_light(self): """Test dark theme has different color values than light""" light = get_default_light_theme() dark = get_default_dark_theme() # Background should be inverted assert light.tokens["background"].value != dark.tokens["background"].value assert light.tokens["foreground"].value != dark.tokens["foreground"].value def test_theme_token_values_are_valid(self): """Test all token values are non-empty strings""" theme = get_default_light_theme() for token_name, token in theme.tokens.items(): assert token.value, f"Token {token_name} has empty value" assert token.description, f"Token {token_name} has no description"