diff --git a/homeassistant/components/qnap_qsw/__init__.py b/homeassistant/components/qnap_qsw/__init__.py index 4d2ee76cd2b..040f8eb52f2 100644 --- a/homeassistant/components/qnap_qsw/__init__.py +++ b/homeassistant/components/qnap_qsw/__init__.py @@ -1,16 +1,21 @@ """The QNAP QSW integration.""" from __future__ import annotations +import logging + from aioqsw.localapi import ConnectionOptions, QnapQswApi from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_URL, CONF_USERNAME, Platform from homeassistant.core import HomeAssistant +from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import aiohttp_client from .const import DOMAIN, QSW_COORD_DATA, QSW_COORD_FW from .coordinator import QswDataCoordinator, QswFirmwareCoordinator +_LOGGER = logging.getLogger(__name__) + PLATFORMS: list[Platform] = [ Platform.BINARY_SENSOR, Platform.BUTTON, @@ -33,7 +38,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await coord_data.async_config_entry_first_refresh() coord_fw = QswFirmwareCoordinator(hass, qsw) - await coord_fw.async_config_entry_first_refresh() + try: + await coord_fw.async_config_entry_first_refresh() + except ConfigEntryNotReady as error: + _LOGGER.warning(error) hass.data.setdefault(DOMAIN, {})[entry.entry_id] = { QSW_COORD_DATA: coord_data, diff --git a/homeassistant/components/qnap_qsw/coordinator.py b/homeassistant/components/qnap_qsw/coordinator.py index 73af2f74cc5..eb4e60bf9bd 100644 --- a/homeassistant/components/qnap_qsw/coordinator.py +++ b/homeassistant/components/qnap_qsw/coordinator.py @@ -5,7 +5,7 @@ from datetime import timedelta import logging from typing import Any -from aioqsw.exceptions import APIError, QswError +from aioqsw.exceptions import QswError from aioqsw.localapi import QnapQswApi import async_timeout @@ -63,8 +63,6 @@ class QswFirmwareCoordinator(DataUpdateCoordinator[dict[str, Any]]): async with async_timeout.timeout(QSW_TIMEOUT_SEC): try: await self.qsw.check_firmware() - except APIError as error: - _LOGGER.warning(error) except QswError as error: raise UpdateFailed(error) from error return self.qsw.data() diff --git a/tests/components/qnap_qsw/test_init.py b/tests/components/qnap_qsw/test_init.py index 75fa9ec8adc..fedfdd26543 100644 --- a/tests/components/qnap_qsw/test_init.py +++ b/tests/components/qnap_qsw/test_init.py @@ -2,6 +2,8 @@ from unittest.mock import patch +from aioqsw.exceptions import APIError + from homeassistant.components.qnap_qsw.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant @@ -11,6 +13,29 @@ from .util import CONFIG from tests.common import MockConfigEntry +async def test_firmware_check_error(hass: HomeAssistant) -> None: + """Test firmware update check error.""" + + config_entry = MockConfigEntry( + domain=DOMAIN, unique_id="qsw_unique_id", data=CONFIG + ) + config_entry.add_to_hass(hass) + + with patch( + "homeassistant.components.qnap_qsw.QnapQswApi.check_firmware", + side_effect=APIError, + ), patch( + "homeassistant.components.qnap_qsw.QnapQswApi.validate", + return_value=None, + ), patch( + "homeassistant.components.qnap_qsw.QnapQswApi.update", + return_value=None, + ): + assert await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + assert config_entry.state is ConfigEntryState.LOADED + + async def test_unload_entry(hass: HomeAssistant) -> None: """Test unload."""