mirror of
https://github.com/esphome/esphome.git
synced 2026-05-24 01:37:15 +08:00
[cpptests] support testing platform components (#13075)
Co-authored-by: J. Nick Koston <nick@home-assistant.io> Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
@@ -1027,6 +1027,73 @@ def test_get_all_dependencies_empty_set() -> None:
|
||||
assert result == set()
|
||||
|
||||
|
||||
def test_get_all_dependencies_platform_component() -> None:
|
||||
"""Platform components (domain.component) are looked up via get_platform,
|
||||
not get_component."""
|
||||
platform_comp = Mock()
|
||||
platform_comp.dependencies = []
|
||||
platform_comp.auto_load = []
|
||||
|
||||
with (
|
||||
patch("esphome.loader.get_component") as mock_get_component,
|
||||
patch("helpers.get_platform") as mock_get_platform,
|
||||
):
|
||||
mock_get_platform.return_value = platform_comp
|
||||
mock_get_component.return_value = None
|
||||
|
||||
result = helpers.get_all_dependencies({"sensor.bthome"})
|
||||
|
||||
mock_get_platform.assert_called_once_with("sensor", "bthome")
|
||||
mock_get_component.assert_not_called()
|
||||
assert result == {"sensor.bthome"}
|
||||
|
||||
|
||||
def test_get_all_dependencies_platform_component_with_dependencies() -> None:
|
||||
"""Dependencies of a platform component are resolved transitively."""
|
||||
platform_comp = Mock()
|
||||
platform_comp.dependencies = ["sensor"]
|
||||
platform_comp.auto_load = []
|
||||
|
||||
sensor_comp = Mock()
|
||||
sensor_comp.dependencies = []
|
||||
sensor_comp.auto_load = []
|
||||
|
||||
with (
|
||||
patch("esphome.loader.get_component") as mock_get_component,
|
||||
patch("helpers.get_platform") as mock_get_platform,
|
||||
):
|
||||
mock_get_platform.return_value = platform_comp
|
||||
mock_get_component.side_effect = lambda name: (
|
||||
sensor_comp if name == "sensor" else None
|
||||
)
|
||||
|
||||
result = helpers.get_all_dependencies({"sensor.bthome"})
|
||||
|
||||
assert result == {"sensor.bthome", "sensor"}
|
||||
|
||||
|
||||
def test_get_all_dependencies_cpp_testing_flag() -> None:
|
||||
"""cpp_testing=True propagates to CORE.cpp_testing during resolution."""
|
||||
from esphome.core import CORE
|
||||
|
||||
with (
|
||||
patch("esphome.loader.get_component") as mock_get_component,
|
||||
patch("esphome.loader.get_platform"),
|
||||
):
|
||||
observed: list[bool] = []
|
||||
|
||||
def capturing_get_component(name: str):
|
||||
observed.append(CORE.cpp_testing)
|
||||
|
||||
mock_get_component.side_effect = capturing_get_component
|
||||
|
||||
helpers.get_all_dependencies({"some_comp"}, cpp_testing=True)
|
||||
|
||||
assert observed and all(observed), (
|
||||
"CORE.cpp_testing should be True during resolution"
|
||||
)
|
||||
|
||||
|
||||
def test_get_components_from_integration_fixtures() -> None:
|
||||
"""Test extraction of components from fixture YAML files."""
|
||||
yaml_content = {
|
||||
|
||||
Reference in New Issue
Block a user