mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Create repair issue if zwave-js-server is too old (#78670)
* Create repair issue if zwave-js-server is too old * Switch is_fixable to false * review comments
This commit is contained in:
parent
d74f5c6ee0
commit
4fbf44cced
@ -34,6 +34,11 @@ from homeassistant.exceptions import ConfigEntryNotReady
|
||||
from homeassistant.helpers import device_registry, entity_registry
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||
from homeassistant.helpers.issue_registry import (
|
||||
IssueSeverity,
|
||||
async_create_issue,
|
||||
async_delete_issue,
|
||||
)
|
||||
from homeassistant.helpers.typing import UNDEFINED, ConfigType
|
||||
|
||||
from .addon import AddonError, AddonManager, AddonState, get_addon_manager
|
||||
@ -133,10 +138,20 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
except InvalidServerVersion as err:
|
||||
if use_addon:
|
||||
async_ensure_addon_updated(hass)
|
||||
else:
|
||||
async_create_issue(
|
||||
hass,
|
||||
DOMAIN,
|
||||
"invalid_server_version",
|
||||
is_fixable=False,
|
||||
severity=IssueSeverity.ERROR,
|
||||
translation_key="invalid_server_version",
|
||||
)
|
||||
raise ConfigEntryNotReady(f"Invalid server version: {err}") from err
|
||||
except (asyncio.TimeoutError, BaseZwaveJSServerError) as err:
|
||||
raise ConfigEntryNotReady(f"Failed to connect: {err}") from err
|
||||
else:
|
||||
async_delete_issue(hass, DOMAIN, "invalid_server_version")
|
||||
LOGGER.info("Connected to Zwave JS Server")
|
||||
|
||||
dev_reg = device_registry.async_get(hass)
|
||||
|
@ -144,5 +144,11 @@
|
||||
"ping": "Ping device",
|
||||
"reset_meter": "Reset meters on {subtype}"
|
||||
}
|
||||
},
|
||||
"issues": {
|
||||
"invalid_server_version": {
|
||||
"title": "Newer version of Z-Wave JS Server needed",
|
||||
"description": "The version of Z-Wave JS Server you are currently running is too old for this version of Home Assistant. Please update the Z-Wave JS Server to the latest version to fix this issue."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
"""Test the Z-Wave JS init module."""
|
||||
import asyncio
|
||||
from copy import deepcopy
|
||||
from unittest.mock import call, patch
|
||||
from unittest.mock import AsyncMock, call, patch
|
||||
|
||||
import pytest
|
||||
from zwave_js_server.client import Client
|
||||
@ -9,7 +10,7 @@ from zwave_js_server.exceptions import BaseZwaveJSServerError, InvalidServerVers
|
||||
from zwave_js_server.model.node import Node
|
||||
|
||||
from homeassistant.components.hassio.handler import HassioAPIError
|
||||
from homeassistant.components.zwave_js.const import DOMAIN
|
||||
from homeassistant.components.zwave_js import DOMAIN
|
||||
from homeassistant.components.zwave_js.helpers import get_device_id
|
||||
from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
|
||||
from homeassistant.const import STATE_UNAVAILABLE
|
||||
@ -18,6 +19,7 @@ from homeassistant.helpers import (
|
||||
area_registry as ar,
|
||||
device_registry as dr,
|
||||
entity_registry as er,
|
||||
issue_registry as ir,
|
||||
)
|
||||
|
||||
from .common import AIR_TEMPERATURE_SENSOR, EATON_RF9640_ENTITY
|
||||
@ -696,6 +698,45 @@ async def test_update_addon(
|
||||
assert update_addon.call_count == update_calls
|
||||
|
||||
|
||||
async def test_issue_registry(hass, client, version_state):
|
||||
"""Test issue registry."""
|
||||
device = "/test"
|
||||
network_key = "abc123"
|
||||
|
||||
client.connect.side_effect = InvalidServerVersion("Invalid version")
|
||||
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Z-Wave JS",
|
||||
data={
|
||||
"url": "ws://host1:3001",
|
||||
"use_addon": False,
|
||||
"usb_path": device,
|
||||
"network_key": network_key,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert entry.state is ConfigEntryState.SETUP_RETRY
|
||||
|
||||
issue_reg = ir.async_get(hass)
|
||||
assert issue_reg.async_get_issue(DOMAIN, "invalid_server_version")
|
||||
|
||||
async def connect():
|
||||
await asyncio.sleep(0)
|
||||
client.connected = True
|
||||
|
||||
client.connect = AsyncMock(side_effect=connect)
|
||||
|
||||
await hass.config_entries.async_reload(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert entry.state is ConfigEntryState.LOADED
|
||||
assert not issue_reg.async_get_issue(DOMAIN, "invalid_server_version")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"stop_addon_side_effect, entry_state",
|
||||
[
|
||||
|
Loading…
x
Reference in New Issue
Block a user