131 lines
4.6 KiB
Python
131 lines
4.6 KiB
Python
"""The test for the version sensor platform."""
|
|
from datetime import timedelta
|
|
from unittest.mock import patch
|
|
|
|
from pyhaversion import HaVersionSource, exceptions as pyhaversionexceptions
|
|
import pytest
|
|
|
|
from homeassistant.components.version.sensor import HA_VERSION_SOURCES
|
|
from homeassistant.setup import async_setup_component
|
|
from homeassistant.util import dt
|
|
|
|
from tests.common import async_fire_time_changed
|
|
|
|
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
|
|
|
|
|
|
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"
|
|
|
|
|
|
async def test_image_name_container(hass):
|
|
"""Test the Version sensor with image name for container."""
|
|
config = {
|
|
"sensor": {"platform": "version", "source": "docker", "image": "qemux86-64"}
|
|
}
|
|
|
|
with patch("homeassistant.components.version.sensor.HaVersion") as haversion:
|
|
assert await async_setup_component(hass, "sensor", config)
|
|
await hass.async_block_till_done()
|
|
|
|
constructor = haversion.call_args[1]
|
|
assert constructor["source"] == "container"
|
|
assert constructor["image"] == "qemux86-64-homeassistant"
|
|
|
|
|
|
async def test_image_name_supervisor(hass):
|
|
"""Test the Version sensor with image name for supervisor."""
|
|
config = {
|
|
"sensor": {"platform": "version", "source": "hassio", "image": "qemux86-64"}
|
|
}
|
|
|
|
with patch("homeassistant.components.version.sensor.HaVersion") as haversion:
|
|
assert await async_setup_component(hass, "sensor", config)
|
|
await hass.async_block_till_done()
|
|
|
|
constructor = haversion.call_args[1]
|
|
assert constructor["source"] == "supervisor"
|
|
assert constructor["image"] == "qemux86-64"
|