From c6ac267d52e40a6effecd42d8a1472874df0fcb1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 9 Jun 2023 10:42:58 -0500 Subject: [PATCH] fix check --- homeassistant/components/esphome/dashboard.py | 9 ++--- tests/components/esphome/test_dashboard.py | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/esphome/dashboard.py b/homeassistant/components/esphome/dashboard.py index 570d9293d8..b6c1a7291f 100644 --- a/homeassistant/components/esphome/dashboard.py +++ b/homeassistant/components/esphome/dashboard.py @@ -15,7 +15,7 @@ from homeassistant.const import EVENT_HOMEASSISTANT_STOP from homeassistant.core import CALLBACK_TYPE, Event, HomeAssistant, callback from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.storage import Store -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from .const import DOMAIN @@ -101,10 +101,9 @@ class ESPHomeDashboardManager: dashboard = ESPHomeDashboard( hass, addon_slug, url, async_get_clientsession(hass) ) - try: - await dashboard.async_request_refresh() - except UpdateFailed as err: - _LOGGER.error("Ignoring dashboard info: %s", err) + await dashboard.async_request_refresh() + if not dashboard.last_update_success: + _LOGGER.error("Ignoring dashboard info: %s", dashboard.last_exception) return self._current_dashboard = dashboard diff --git a/tests/components/esphome/test_dashboard.py b/tests/components/esphome/test_dashboard.py index c683dad122..bb37da99e1 100644 --- a/tests/components/esphome/test_dashboard.py +++ b/tests/components/esphome/test_dashboard.py @@ -1,4 +1,5 @@ """Test ESPHome dashboard features.""" +import asyncio from unittest.mock import patch from aioesphomeapi import DeviceInfo, InvalidAuthAPIError @@ -10,6 +11,8 @@ from homeassistant.data_entry_flow import FlowResultType from . import VALID_NOISE_PSK +from tests.common import MockConfigEntry + async def test_dashboard_storage( hass: HomeAssistant, init_integration, mock_dashboard, hass_storage @@ -24,6 +27,40 @@ async def test_dashboard_storage( } +async def test_restore_dashboard_storage( + hass: HomeAssistant, mock_config_entry: MockConfigEntry, hass_storage +) -> MockConfigEntry: + """Restore dashboard url and slug from storage.""" + hass_storage[dashboard.STORAGE_KEY] = { + "version": dashboard.STORAGE_VERSION, + "minor_version": dashboard.STORAGE_VERSION, + "key": dashboard.STORAGE_KEY, + "data": {"info": {"addon_slug": "test-slug", "host": "new-host", "port": 6052}}, + } + with patch.object( + dashboard, "async_get_or_create_dashboard_manager" + ) as mock_get_or_create: + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + assert mock_get_or_create.call_count == 1 + + +async def test_setup_dashboard_fails( + hass: HomeAssistant, mock_config_entry: MockConfigEntry, hass_storage +) -> MockConfigEntry: + """Test that nothing is stored on failed dashboard setup.""" + with patch.object( + dashboard.ESPHomeDashboardAPI, "get_devices", side_effect=asyncio.TimeoutError + ) as mock_get_devices: + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + await dashboard.async_set_dashboard_info(hass, "test-slug", "test-host", 6052) + assert mock_config_entry.state == ConfigEntryState.LOADED + assert mock_get_devices.call_count == 1 + + assert dashboard.STORAGE_KEY not in hass_storage + + async def test_new_info_reload_config_entries( hass: HomeAssistant, init_integration, mock_dashboard ) -> None: