diff --git a/tests/integration/test_climate_custom_modes.py b/tests/integration/test_climate_custom_modes.py new file mode 100644 index 0000000000..bbb4dc3dfa --- /dev/null +++ b/tests/integration/test_climate_custom_modes.py @@ -0,0 +1,62 @@ +"""Integration test for climate custom fan modes and presets.""" + +from __future__ import annotations + +from aioesphomeapi import ClimateInfo +import pytest + +from .types import APIClientConnectedFactory, RunCompiledFunction + + +@pytest.mark.asyncio +async def test_climate_custom_fan_modes_and_presets( + yaml_config: str, + run_compiled: RunCompiledFunction, + api_client_connected: APIClientConnectedFactory, +) -> None: + """Test that custom fan modes and presets are properly exposed via API.""" + async with run_compiled(yaml_config), api_client_connected() as client: + # Get entities and services + entities, services = await client.list_entities_services() + climate_infos = [e for e in entities if isinstance(e, ClimateInfo)] + assert len(climate_infos) == 1, "Expected exactly 1 climate entity" + + test_climate = climate_infos[0] + + # Verify custom fan modes are exposed + assert hasattr(test_climate, "supported_custom_fan_modes"), ( + "Climate should have supported_custom_fan_modes" + ) + custom_fan_modes = test_climate.supported_custom_fan_modes + assert len(custom_fan_modes) == 3, ( + f"Expected 3 custom fan modes, got {len(custom_fan_modes)}" + ) + assert "Turbo" in custom_fan_modes, "Expected 'Turbo' in custom fan modes" + assert "Silent" in custom_fan_modes, "Expected 'Silent' in custom fan modes" + assert "Sleep Mode" in custom_fan_modes, ( + "Expected 'Sleep Mode' in custom fan modes" + ) + + # Verify enum presets are exposed (from preset: config map) + assert hasattr(test_climate, "supported_presets"), ( + "Climate should have supported_presets" + ) + from aioesphomeapi import ClimatePreset + + assert ClimatePreset.AWAY in test_climate.supported_presets, ( + "Expected AWAY in enum presets" + ) + + # Verify custom string presets are exposed (from custom_presets: config list) + assert hasattr(test_climate, "supported_custom_presets"), ( + "Climate should have supported_custom_presets" + ) + custom_presets = test_climate.supported_custom_presets + assert len(custom_presets) == 3, ( + f"Expected 3 custom presets, got {len(custom_presets)}: {custom_presets}" + ) + assert "Eco Plus" in custom_presets, "Expected 'Eco Plus' in custom presets" + assert "Comfort" in custom_presets, "Expected 'Comfort' in custom presets" + assert "Vacation Mode" in custom_presets, ( + "Expected 'Vacation Mode' in custom presets" + )