core/tests/components/version/test_sensor.py

101 lines
3.5 KiB
Python
Raw Normal View History

"""The test for the version sensor platform."""
from datetime import timedelta
2021-01-01 21:31:56 +00:00
from unittest.mock import patch
from pyhaversion import HaVersionSource, exceptions as pyhaversionexceptions
import pytest
from homeassistant.components.version.sensor import HA_VERSION_SOURCES
2021-01-01 21:31:56 +00:00
from homeassistant.setup import async_setup_component
from homeassistant.util import dt
from tests.common import async_fire_time_changed
2019-07-31 19:25:30 +00:00
MOCK_VERSION = "10.0"
@pytest.mark.parametrize(
"source,target_source,name",
(
(
("local", HaVersionSource.LOCAL, "current_version"),
("docker", HaVersionSource.CONTAINER, "latest_version"),
("hassio", HaVersionSource.SUPERVISOR, "latest_version"),
)
+ tuple(
(source, HaVersionSource(source), "latest_version")
for source in HA_VERSION_SOURCES
if source != HaVersionSource.LOCAL
)
),
)
async def test_version_source(hass, source, target_source, name):
"""Test the Version sensor with different sources."""
config = {
"sensor": {"platform": "version", "source": source, "image": "qemux86-64"}
}
with patch("homeassistant.components.version.sensor.HaVersion.get_version"), patch(
"homeassistant.components.version.sensor.HaVersion.version", MOCK_VERSION
):
assert await async_setup_component(hass, "sensor", config)
await hass.async_block_till_done()
state = hass.states.get(f"sensor.{name}")
assert state
assert state.attributes["source"] == target_source
assert state.state == MOCK_VERSION
2019-07-31 19:25:30 +00:00
async def test_version_fetch_exception(hass, caplog):
"""Test fetch exception thrown during updates."""
config = {"sensor": {"platform": "version"}}
with patch(
"homeassistant.components.version.sensor.HaVersion.get_version",
side_effect=pyhaversionexceptions.HaVersionFetchException(
"Fetch exception from pyhaversion"
),
):
assert await async_setup_component(hass, "sensor", config)
await hass.async_block_till_done()
assert "Fetch exception from pyhaversion" in caplog.text
async def test_version_parse_exception(hass, caplog):
"""Test parse exception thrown during updates."""
config = {"sensor": {"platform": "version"}}
with patch(
"homeassistant.components.version.sensor.HaVersion.get_version",
side_effect=pyhaversionexceptions.HaVersionParseException,
):
assert await async_setup_component(hass, "sensor", config)
await hass.async_block_till_done()
assert "Could not parse data received for HaVersionSource.LOCAL" in caplog.text
async def test_update(hass):
"""Test updates."""
config = {"sensor": {"platform": "version"}}
with patch("homeassistant.components.version.sensor.HaVersion.get_version"), patch(
"homeassistant.components.version.sensor.HaVersion.version", MOCK_VERSION
):
assert await async_setup_component(hass, "sensor", config)
await hass.async_block_till_done()
state = hass.states.get("sensor.current_version")
assert state
assert state.state == MOCK_VERSION
with patch("homeassistant.components.version.sensor.HaVersion.get_version"), patch(
"homeassistant.components.version.sensor.HaVersion.version", "1234"
):
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=5))
await hass.async_block_till_done()
state = hass.states.get("sensor.current_version")
assert state
assert state.state == "1234"