From 6937aed9fed30e342bdc6f460d9f0a8d97009af3 Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Sun, 7 Jul 2024 08:36:16 -0600 Subject: [PATCH] Handle more pushover exceptions during setup (#115802) Co-authored-by: Franck Nijhof --- homeassistant/components/pushover/__init__.py | 4 +++- tests/components/pushover/test_init.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/pushover/__init__.py b/homeassistant/components/pushover/__init__.py index 73c4223889e..f8d3c0ef53d 100644 --- a/homeassistant/components/pushover/__init__.py +++ b/homeassistant/components/pushover/__init__.py @@ -3,6 +3,8 @@ from __future__ import annotations from pushover_complete import BadAPIRequestError, PushoverAPI +from requests.exceptions import RequestException +from urllib3.exceptions import HTTPError from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_API_KEY, CONF_NAME, Platform @@ -38,7 +40,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: pushover_api.validate, entry.data[CONF_USER_KEY] ) - except (BadAPIRequestError, ValueError) as err: + except (BadAPIRequestError, ValueError, RequestException, HTTPError) as err: if "application token is invalid" in str(err): raise ConfigEntryAuthFailed(err) from err raise ConfigEntryNotReady(err) from err diff --git a/tests/components/pushover/test_init.py b/tests/components/pushover/test_init.py index c3a653042ce..85266e34d13 100644 --- a/tests/components/pushover/test_init.py +++ b/tests/components/pushover/test_init.py @@ -5,6 +5,7 @@ from unittest.mock import MagicMock, patch from pushover_complete import BadAPIRequestError import pytest import requests_mock +from urllib3.exceptions import MaxRetryError from homeassistant.components.pushover.const import DOMAIN from homeassistant.config_entries import ConfigEntryState @@ -93,3 +94,18 @@ async def test_async_setup_entry_failed_json_error( await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() assert entry.state is ConfigEntryState.SETUP_RETRY + + +async def test_async_setup_entry_failed_urrlib3_error( + hass: HomeAssistant, mock_pushover: MagicMock +) -> None: + """Test pushover failed setup due to conn error.""" + entry = MockConfigEntry( + domain=DOMAIN, + data=MOCK_CONFIG, + ) + entry.add_to_hass(hass) + mock_pushover.side_effect = MaxRetryError(MagicMock(), MagicMock()) + await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() + assert entry.state is ConfigEntryState.SETUP_RETRY