test: Add tests for formatted preset metadata handling

This commit is contained in:
Vito Sansevero
2025-06-15 08:38:33 -07:00
parent ce8c36f309
commit 2d6fef8fb4
+280 -11
View File
@@ -8,9 +8,12 @@ from kikotools.tools.width_height_selector.logic import (
)
from kikotools.tools.width_height_selector.presets import (
PRESET_OPTIONS,
PRESET_METADATA,
SDXL_PRESETS,
FLUX_PRESETS,
ULTRA_WIDE_PRESETS,
get_preset_metadata,
get_presets_by_model_group,
)
@@ -42,46 +45,92 @@ class TestWidthHeightSelectorNode:
assert result == (1920, 1080)
def test_sdxl_square_preset(self):
"""Test SDXL square preset."""
"""Test SDXL square preset (supports both raw and formatted)."""
# Test raw preset
result = self.node.get_dimensions(
preset="1024×1024",
width=512, # Should be ignored
height=512, # Should be ignored
)
assert result == (1024, 1024)
# Test formatted preset
result = self.node.get_dimensions(
preset="1024×1024 - 1:1 (1.1MP) - SDXL",
width=512, # Should be ignored
height=512, # Should be ignored
)
assert result == (1024, 1024)
def test_sdxl_portrait_preset(self):
"""Test SDXL portrait preset."""
"""Test SDXL portrait preset (supports both raw and formatted)."""
# Test raw preset
result = self.node.get_dimensions(preset="832×1216", width=512, height=512)
assert result == (832, 1216)
# Test formatted preset if available
formatted_preset = "832×1216 - 13:19 (1.0MP) - SDXL"
result = self.node.get_dimensions(preset=formatted_preset, width=512, height=512)
assert result == (832, 1216)
def test_sdxl_landscape_preset(self):
"""Test SDXL landscape preset."""
"""Test SDXL landscape preset (supports both raw and formatted)."""
# Test raw preset
result = self.node.get_dimensions(preset="1216×832", width=512, height=512)
assert result == (1216, 832)
# Test formatted preset if available
formatted_preset = "1216×832 - 19:13 (1.0MP) - SDXL"
result = self.node.get_dimensions(preset=formatted_preset, width=512, height=512)
assert result == (1216, 832)
def test_flux_preset(self):
"""Test FLUX preset."""
"""Test FLUX preset (supports both raw and formatted)."""
# Test raw preset
result = self.node.get_dimensions(preset="1920×1080", width=512, height=512)
assert result == (1920, 1080)
# Test formatted preset
formatted_preset = "1920×1080 - 16:9 (2.1MP) - FLUX"
result = self.node.get_dimensions(preset=formatted_preset, width=512, height=512)
assert result == (1920, 1080)
def test_ultra_wide_preset(self):
"""Test ultra-wide preset."""
"""Test ultra-wide preset (supports both raw and formatted)."""
# Test raw preset
result = self.node.get_dimensions(preset="2560×1080", width=512, height=512)
assert result == (2560, 1080)
# Test formatted preset if available
formatted_preset = "2560×1080 - 64:27 (2.8MP) - Ultra-Wide"
result = self.node.get_dimensions(preset=formatted_preset, width=512, height=512)
assert result == (2560, 1080)
def test_all_presets_available(self):
"""Test that all presets are available in INPUT_TYPES."""
input_types = self.node.INPUT_TYPES()
available_presets = input_types["required"]["preset"][0]
# Check that all major preset categories are available
# Check that custom is available
assert "custom" in available_presets
assert "1024×1024" in available_presets # SDXL square
assert "832×1216" in available_presets # SDXL portrait
assert "1216×832" in available_presets # SDXL landscape
assert "1920×1080" in available_presets # FLUX
assert "2560×1080" in available_presets # Ultra-wide
# Check that formatted presets are available (with metadata)
# Extract raw preset names from formatted options
raw_presets = []
for option in available_presets:
if option == "custom":
raw_presets.append(option)
elif " - " in option:
raw_presets.append(option.split(" - ")[0])
else:
raw_presets.append(option)
# Check that all major preset categories are available
assert "1024×1024" in raw_presets # SDXL square
assert "832×1216" in raw_presets # SDXL portrait
assert "1216×832" in raw_presets # SDXL landscape
assert "1920×1080" in raw_presets # FLUX
assert "2560×1080" in raw_presets # Ultra-wide
def test_invalid_preset_fallback(self):
"""Test handling of invalid preset."""
@@ -259,3 +308,223 @@ class TestEdgeCases:
# Prime number dimensions
ratio = calculate_aspect_ratio(1920, 1080)
assert ratio == "16:9"
class TestPresetMetadata:
"""Test preset metadata functionality."""
def test_preset_metadata_structure(self):
"""Test that metadata has correct structure."""
for preset_name, metadata in PRESET_METADATA.items():
assert hasattr(metadata, 'width')
assert hasattr(metadata, 'height')
assert hasattr(metadata, 'aspect_ratio')
assert hasattr(metadata, 'aspect_decimal')
assert hasattr(metadata, 'megapixels')
assert hasattr(metadata, 'model_group')
assert hasattr(metadata, 'category')
assert hasattr(metadata, 'description')
def test_metadata_aspect_ratios(self):
"""Test that aspect ratios are correctly calculated."""
for preset_name, metadata in PRESET_METADATA.items():
expected_decimal = metadata.width / metadata.height
assert abs(metadata.aspect_decimal - expected_decimal) < 0.001
# Common aspect ratios should match expected values
if preset_name == "1024×1024":
assert metadata.aspect_ratio == "1:1"
assert metadata.aspect_decimal == 1.0
elif preset_name == "1920×1080":
assert metadata.aspect_ratio == "16:9"
assert abs(metadata.aspect_decimal - 1.778) < 0.01
def test_metadata_megapixels(self):
"""Test that megapixel calculations are correct."""
for preset_name, metadata in PRESET_METADATA.items():
expected_mp = (metadata.width * metadata.height) / 1_000_000
assert abs(metadata.megapixels - expected_mp) < 0.1
def test_model_groups(self):
"""Test that model groups are properly assigned."""
sdxl_presets = get_presets_by_model_group("SDXL")
flux_presets = get_presets_by_model_group("FLUX")
ultra_wide_presets = get_presets_by_model_group("Ultra-Wide")
assert len(sdxl_presets) > 0
assert len(flux_presets) > 0
assert len(ultra_wide_presets) > 0
# Check specific presets are in correct groups
assert "1024×1024" in [k for k, v in sdxl_presets.items()]
assert "1920×1080" in [k for k, v in flux_presets.items()]
assert "2560×1080" in [k for k, v in ultra_wide_presets.items()]
def test_get_preset_metadata_function(self):
"""Test get_preset_metadata function."""
# Valid preset
metadata = get_preset_metadata("1024×1024")
assert metadata.width == 1024
assert metadata.height == 1024
assert metadata.model_group == "SDXL"
# Invalid preset returns default
metadata = get_preset_metadata("invalid_preset")
assert metadata.width == 0
assert metadata.height == 0
assert metadata.model_group == "Custom"
class TestNodeMetadataIntegration:
"""Test node integration with metadata."""
def setup_method(self):
"""Set up test fixtures."""
self.node = WidthHeightSelectorNode()
def test_get_preset_info_with_metadata(self):
"""Test that preset info includes metadata."""
info = self.node.get_preset_info("1024×1024")
assert "1:1" in info # Aspect ratio
assert "1.0MP" in info or "1.1MP" in info # Megapixels
assert "SDXL" in info # Description
def test_get_presets_by_model_static(self):
"""Test static method for getting presets by model."""
sdxl_presets = self.node.get_presets_by_model("SDXL")
assert isinstance(sdxl_presets, dict)
assert len(sdxl_presets) > 0
# Check that returned values are metadata objects
for preset_name, metadata in sdxl_presets.items():
assert metadata.model_group == "SDXL"
def test_get_preset_metadata_static(self):
"""Test static method for getting preset metadata."""
metadata_dict = self.node.get_preset_metadata_static("1920×1080")
assert metadata_dict["width"] == 1920
assert metadata_dict["height"] == 1080
assert metadata_dict["aspect_ratio"] == "16:9"
assert metadata_dict["model_group"] == "FLUX"
def test_get_model_groups(self):
"""Test static method for getting model groups."""
groups = self.node.get_model_groups()
assert "SDXL" in groups
assert "FLUX" in groups
assert "Ultra-Wide" in groups
class TestMetadataValidation:
"""Test metadata validation functions."""
def test_dimensions_validation(self):
"""Test dimensions validation from metadata."""
from kikotools.tools.width_height_selector.presets import validate_preset_dimensions
assert validate_preset_dimensions() is True
def test_metadata_consistency_validation(self):
"""Test metadata consistency validation."""
from kikotools.tools.width_height_selector.presets import validate_metadata_consistency
assert validate_metadata_consistency() is True
class TestFormattedPresets:
"""Test formatted preset functionality."""
def setup_method(self):
"""Set up test fixtures."""
self.node = WidthHeightSelectorNode()
def test_formatted_preset_generation(self):
"""Test that INPUT_TYPES generates formatted presets."""
input_types = self.node.INPUT_TYPES()
available_presets = input_types["required"]["preset"][0]
# Should have custom first
assert available_presets[0] == "custom"
# Should have formatted presets with metadata
formatted_count = 0
for option in available_presets[1:]: # Skip custom
if " - " in option and "MP" in option:
formatted_count += 1
assert formatted_count > 0, "No formatted presets found"
assert formatted_count == len(PRESET_METADATA), "Not all presets are formatted"
def test_preset_name_extraction(self):
"""Test extraction of raw preset names from formatted strings."""
test_cases = [
("custom", "custom"),
("1024×1024 - 1:1 (1.1MP) - SDXL", "1024×1024"),
("1920×1080 - 16:9 (2.1MP) - FLUX", "1920×1080"),
("832×1216 - 13:19 (1.0MP) - SDXL", "832×1216"),
("1024×1024", "1024×1024"), # Raw preset name
("invalid_preset", "custom"), # Invalid fallback
]
for formatted_preset, expected in test_cases:
result = self.node._extract_preset_name(formatted_preset)
assert result == expected, f"Expected {expected}, got {result} for input {formatted_preset}"
def test_formatted_preset_dimensions(self):
"""Test that formatted presets return correct dimensions."""
# Test with formatted preset string
formatted_preset = "1024×1024 - 1:1 (1.1MP) - SDXL"
result = self.node.get_dimensions(formatted_preset, 512, 512)
assert result == (1024, 1024)
# Test with FLUX formatted preset
formatted_preset = "1920×1080 - 16:9 (2.1MP) - FLUX"
result = self.node.get_dimensions(formatted_preset, 512, 512)
assert result == (1920, 1080)
def test_formatted_preset_validation(self):
"""Test validation of formatted presets."""
# Valid formatted preset
assert self.node.validate_inputs("1024×1024 - 1:1 (1.1MP) - SDXL", 1024, 1024)
# Valid raw preset
assert self.node.validate_inputs("1024×1024", 1024, 1024)
# Custom preset
assert self.node.validate_inputs("custom", 1024, 1024)
# Invalid formatted preset should still work (fallback to custom)
assert self.node.validate_inputs("invalid - formatted", 1024, 1024)
def test_backwards_compatibility(self):
"""Test that raw preset names still work."""
# Raw preset names should still work for backwards compatibility
raw_presets = ["1024×1024", "1920×1080", "832×1216"]
for raw_preset in raw_presets:
if raw_preset in PRESET_OPTIONS:
result = self.node.get_dimensions(raw_preset, 512, 512)
expected = PRESET_OPTIONS[raw_preset]
assert result == expected, f"Raw preset {raw_preset} failed"
def test_formatted_preset_metadata_accuracy(self):
"""Test that formatted presets contain accurate metadata."""
input_types = self.node.INPUT_TYPES()
formatted_presets = [opt for opt in input_types["required"]["preset"][0] if " - " in opt]
for formatted_preset in formatted_presets:
# Extract components
parts = formatted_preset.split(" - ")
assert len(parts) == 3, f"Formatted preset should have 3 parts: {formatted_preset}"
resolution = parts[0]
aspect_and_mp = parts[1]
model_group = parts[2]
# Verify resolution exists in metadata
assert resolution in PRESET_METADATA, f"Resolution {resolution} not in metadata"
# Verify metadata matches format
metadata = PRESET_METADATA[resolution]
assert metadata.model_group == model_group, f"Model group mismatch for {resolution}"
assert metadata.aspect_ratio in aspect_and_mp, f"Aspect ratio not in {aspect_and_mp}"
assert f"{metadata.megapixels:.1f}MP" in aspect_and_mp, f"Megapixels not in {aspect_and_mp}"