mirror of
https://github.com/home-assistant/core.git
synced 2025-08-16 19:11:42 +02:00
Updater Component is always available and shows on/off wether an update is available
This commit is contained in:
@@ -21,6 +21,7 @@ import homeassistant.util.dt as dt_util
|
|||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
ATTR_RELEASE_NOTES = 'release_notes'
|
ATTR_RELEASE_NOTES = 'release_notes'
|
||||||
|
ATTR_NEWEST_VERSION = 'newest_version'
|
||||||
|
|
||||||
CONF_REPORTING = 'reporting'
|
CONF_REPORTING = 'reporting'
|
||||||
CONF_COMPONENT_REPORTING = 'include_used_components'
|
CONF_COMPONENT_REPORTING = 'include_used_components'
|
||||||
@@ -95,15 +96,24 @@ async def async_setup(hass, config):
|
|||||||
newest = hass.components.hassio.get_homeassistant_version()
|
newest = hass.components.hassio.get_homeassistant_version()
|
||||||
|
|
||||||
# Validate version
|
# Validate version
|
||||||
|
update_available = False
|
||||||
if StrictVersion(newest) > StrictVersion(current_version):
|
if StrictVersion(newest) > StrictVersion(current_version):
|
||||||
_LOGGER.info("The latest available version is %s", newest)
|
_LOGGER.info("The latest available version is %s", newest)
|
||||||
hass.states.async_set(
|
update_available = True
|
||||||
ENTITY_ID, newest, {ATTR_FRIENDLY_NAME: 'Update Available',
|
|
||||||
ATTR_RELEASE_NOTES: releasenotes}
|
|
||||||
)
|
|
||||||
elif StrictVersion(newest) == StrictVersion(current_version):
|
elif StrictVersion(newest) == StrictVersion(current_version):
|
||||||
_LOGGER.info(
|
_LOGGER.info(
|
||||||
"You are on the latest version (%s) of Home Assistant", newest)
|
"You are on the latest version (%s) of Home Assistant", newest)
|
||||||
|
elif StrictVersion(newest) < StrictVersion(current_version):
|
||||||
|
_LOGGER.warning(
|
||||||
|
"You are before the latest version (%s) of Home Assistant",
|
||||||
|
newest)
|
||||||
|
|
||||||
|
hass.states.async_set(
|
||||||
|
ENTITY_ID, 'on' if update_available else 'off', {
|
||||||
|
ATTR_FRIENDLY_NAME: 'Update Available',
|
||||||
|
ATTR_RELEASE_NOTES: releasenotes,
|
||||||
|
ATTR_NEWEST_VERSION: newest}
|
||||||
|
)
|
||||||
|
|
||||||
# Update daily, start 1 hour after startup
|
# Update daily, start 1 hour after startup
|
||||||
_dt = dt_util.utcnow() + timedelta(hours=1)
|
_dt = dt_util.utcnow() + timedelta(hours=1)
|
||||||
|
@@ -46,7 +46,7 @@ def mock_get_uuid():
|
|||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def test_new_version_shows_entity_after_hour(
|
def test_new_version_shows_entity_true(
|
||||||
hass, mock_get_uuid, mock_get_newest_version):
|
hass, mock_get_uuid, mock_get_newest_version):
|
||||||
"""Test if new entity is created if new version is available."""
|
"""Test if new entity is created if new version is available."""
|
||||||
mock_get_uuid.return_value = MOCK_HUUID
|
mock_get_uuid.return_value = MOCK_HUUID
|
||||||
@@ -61,11 +61,13 @@ def test_new_version_shows_entity_after_hour(
|
|||||||
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
||||||
yield from hass.async_block_till_done()
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
assert hass.states.is_state(updater.ENTITY_ID, NEW_VERSION)
|
assert hass.states.is_state(updater.ENTITY_ID, 'on')
|
||||||
|
assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \
|
||||||
|
NEW_VERSION
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def test_same_version_not_show_entity(
|
def test_same_version_shows_entity_false(
|
||||||
hass, mock_get_uuid, mock_get_newest_version):
|
hass, mock_get_uuid, mock_get_newest_version):
|
||||||
"""Test if new entity is created if new version is available."""
|
"""Test if new entity is created if new version is available."""
|
||||||
mock_get_uuid.return_value = MOCK_HUUID
|
mock_get_uuid.return_value = MOCK_HUUID
|
||||||
@@ -80,7 +82,9 @@ def test_same_version_not_show_entity(
|
|||||||
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
||||||
yield from hass.async_block_till_done()
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
assert hass.states.get(updater.ENTITY_ID) is None
|
assert hass.states.is_state(updater.ENTITY_ID, 'off')
|
||||||
|
assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \
|
||||||
|
MOCK_VERSION
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
@@ -100,7 +104,7 @@ def test_disable_reporting(hass, mock_get_uuid, mock_get_newest_version):
|
|||||||
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
||||||
yield from hass.async_block_till_done()
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
assert hass.states.get(updater.ENTITY_ID) is None
|
assert hass.states.is_state(updater.ENTITY_ID, 'off')
|
||||||
res = yield from updater.get_newest_version(hass, MOCK_HUUID, MOCK_CONFIG)
|
res = yield from updater.get_newest_version(hass, MOCK_HUUID, MOCK_CONFIG)
|
||||||
call = mock_get_newest_version.mock_calls[0][1]
|
call = mock_get_newest_version.mock_calls[0][1]
|
||||||
assert call[0] is hass
|
assert call[0] is hass
|
||||||
@@ -184,4 +188,6 @@ def test_new_version_shows_entity_after_hour_hassio(
|
|||||||
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(hours=1))
|
||||||
yield from hass.async_block_till_done()
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
assert hass.states.is_state(updater.ENTITY_ID, "999.0")
|
assert hass.states.is_state(updater.ENTITY_ID, 'on')
|
||||||
|
assert hass.states.get(updater.ENTITY_ID).attributes['newest_version'] is \
|
||||||
|
"999.0"
|
||||||
|
Reference in New Issue
Block a user