1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-29 08:32:26 +01:00

[core] Fix platform component normalization happening too late in validation pipeline

This commit is contained in:
J. Nick Koston
2025-09-26 16:10:04 -05:00
parent 7de2ed7658
commit 3f202c291a

View File

@@ -32,33 +32,11 @@ def fixtures_dir() -> Path:
return Path(__file__).parent / "fixtures"
def test_iter_components_handles_non_list_platform_component(
mock_get_component: Mock,
) -> None:
"""Test that iter_components handles platform components that have been normalized to empty list."""
test_config = {
"ota": [], # Normalized from None/dict to empty list by LoadValidationStep
"wifi": {"ssid": "test"},
}
components = {
"ota": MagicMock(is_platform_component=True),
"wifi": MagicMock(is_platform_component=False),
}
mock_get_component.side_effect = lambda domain: components.get(
domain, MagicMock(is_platform_component=False)
)
components_list = list(config.iter_components(test_config))
assert len(components_list) == 2 # ota and wifi (ota has no platforms)
def test_iter_component_configs_handles_non_list_platform_component(
mock_get_component: Mock,
mock_get_platform: Mock,
) -> None:
"""Test that iter_component_configs handles platform components that have been normalized."""
"""Test iter_component_configs handles normalized platform components."""
test_config = {
"ota": [], # Normalized from None/dict to empty list by LoadValidationStep
"one_wire": [{"platform": "gpio", "pin": 10}],
@@ -81,57 +59,11 @@ def test_iter_component_configs_handles_non_list_platform_component(
assert "one_wire.gpio" in domains
def test_iter_components_with_valid_platform_list(
mock_get_component: Mock,
mock_get_platform: Mock,
) -> None:
"""Test that iter_components works correctly with valid platform component list."""
mock_component = MagicMock()
mock_component.is_platform_component = True
test_config = {
"sensor": [
{"platform": "dht", "pin": 5},
{"platform": "bme280", "address": 0x76},
],
}
mock_get_component.return_value = mock_component
components = list(config.iter_components(test_config))
assert len(components) == 3
domains = [c[0] for c in components]
assert "sensor" in domains
assert "sensor.dht" in domains
assert "sensor.bme280" in domains
def test_ota_with_proper_platform_list(
mock_get_component: Mock,
mock_get_platform: Mock,
) -> None:
"""Test that OTA component works correctly when configured as a list with platforms."""
test_config = {
"ota": [
{"platform": "esphome", "password": "test123"},
],
}
mock_get_component.return_value = MagicMock(is_platform_component=True)
components = list(config.iter_components(test_config))
assert len(components) == 2
domains = [c[0] for c in components]
assert "ota" in domains
assert "ota.esphome" in domains
def test_ota_component_configs_with_proper_platform_list(
mock_get_component: Mock,
mock_get_platform: Mock,
) -> None:
"""Test that iter_component_configs handles OTA properly configured as a list."""
"""Test iter_component_configs handles OTA properly configured as a list."""
test_config = {
"ota": [
{"platform": "esphome", "password": "test123", "id": "my_ota"},