diff --git a/tests/components/template/test_init.py b/tests/components/template/test_init.py index 2d14ec97574..1c932c5af30 100644 --- a/tests/components/template/test_init.py +++ b/tests/components/template/test_init.py @@ -1,10 +1,14 @@ """The test for the Template sensor platform.""" +from datetime import timedelta from os import path from unittest.mock import patch from homeassistant import config from homeassistant.components.template import DOMAIN, SERVICE_RELOAD from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util + +from tests.common import async_fire_time_changed async def test_reloadable(hass): @@ -253,5 +257,50 @@ async def test_reloadable_multiple_platforms(hass): assert float(hass.states.get("sensor.combined_sensor_energy_usage").state) == 0 +async def test_reload_sensors_that_reference_other_template_sensors(hass): + """Test that we can reload sensor that reference other template sensors.""" + + await async_setup_component( + hass, + "sensor", + { + "sensor": { + "platform": DOMAIN, + "sensors": { + "state": {"value_template": "{{ 1 }}"}, + }, + } + }, + ) + await hass.async_block_till_done() + yaml_path = path.join( + _get_fixtures_base_path(), + "fixtures", + "template/ref_configuration.yaml", + ) + with patch.object(config, "YAML_CONFIG_FILE", yaml_path): + await hass.services.async_call( + DOMAIN, + SERVICE_RELOAD, + {}, + blocking=True, + ) + await hass.async_block_till_done() + + assert len(hass.states.async_all()) == 3 + await hass.async_block_till_done() + + next_time = dt_util.utcnow() + timedelta(seconds=1.2) + with patch( + "homeassistant.helpers.ratelimit.dt_util.utcnow", return_value=next_time + ): + async_fire_time_changed(hass, next_time) + await hass.async_block_till_done() + + assert hass.states.get("sensor.test1").state == "3" + assert hass.states.get("sensor.test2").state == "1" + assert hass.states.get("sensor.test3").state == "2" + + def _get_fixtures_base_path(): return path.dirname(path.dirname(path.dirname(__file__))) diff --git a/tests/fixtures/template/ref_configuration.yaml b/tests/fixtures/template/ref_configuration.yaml new file mode 100644 index 00000000000..f7731697c71 --- /dev/null +++ b/tests/fixtures/template/ref_configuration.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: template + sensors: + test1: + value_template: "{{ (states.sensor.test2.state |int) + (states.sensor.test3.state |int)}}" + test2: + value_template: "{{ 1 }}" + test3: + value_template: "{{ 2 }}"