Better error handling when setting up config entry for Telegram bot (#149444)

This commit is contained in:
hanwg 2025-07-28 20:52:40 +08:00 committed by GitHub
parent 48c4240a5d
commit 46d810b9f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 30 additions and 5 deletions

View File

@ -7,7 +7,7 @@ from types import MappingProxyType
from typing import Any
from telegram import Bot, ChatFullInfo
from telegram.error import BadRequest, InvalidToken, NetworkError
from telegram.error import BadRequest, InvalidToken, TelegramError
import voluptuous as vol
from homeassistant.config_entries import (
@ -399,13 +399,17 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
placeholders[ERROR_FIELD] = "API key"
placeholders[ERROR_MESSAGE] = str(err)
return "Unknown bot"
except (ValueError, NetworkError) as err:
except ValueError as err:
_LOGGER.warning("Invalid proxy")
errors["base"] = "invalid_proxy_url"
placeholders["proxy_url_error"] = str(err)
placeholders[ERROR_FIELD] = "proxy url"
placeholders[ERROR_MESSAGE] = str(err)
return "Unknown bot"
except TelegramError as err:
errors["base"] = "telegram_error"
placeholders[ERROR_MESSAGE] = str(err)
return "Unknown bot"
else:
return user.full_name

View File

@ -66,6 +66,7 @@
}
},
"error": {
"telegram_error": "Error from Telegram: {error_message}",
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]",
"invalid_proxy_url": "{proxy_url_error}",
"no_url_available": "URL is required since you have not configured an external URL in Home Assistant",

View File

@ -221,10 +221,29 @@ async def test_create_entry(hass: HomeAssistant) -> None:
# test: invalid proxy url
result = await hass.config_entries.flow.async_configure(
result["flow_id"],
{
CONF_PLATFORM: PLATFORM_WEBHOOKS,
CONF_API_KEY: "mock api key",
SECTION_ADVANCED_SETTINGS: {
CONF_PROXY_URL: "invalid",
},
},
)
await hass.async_block_till_done()
assert result["step_id"] == "user"
assert result["type"] is FlowResultType.FORM
assert result["errors"]["base"] == "invalid_proxy_url"
assert result["description_placeholders"]["error_field"] == "proxy url"
# test: telegram error
with patch(
"homeassistant.components.telegram_bot.config_flow.Bot.get_me",
) as mock_bot:
mock_bot.side_effect = NetworkError("mock invalid proxy")
mock_bot.side_effect = NetworkError("mock network error")
result = await hass.config_entries.flow.async_configure(
result["flow_id"],
@ -232,7 +251,7 @@ async def test_create_entry(hass: HomeAssistant) -> None:
CONF_PLATFORM: PLATFORM_WEBHOOKS,
CONF_API_KEY: "mock api key",
SECTION_ADVANCED_SETTINGS: {
CONF_PROXY_URL: "invalid",
CONF_PROXY_URL: "https://proxy",
},
},
)
@ -240,7 +259,8 @@ async def test_create_entry(hass: HomeAssistant) -> None:
assert result["step_id"] == "user"
assert result["type"] is FlowResultType.FORM
assert result["errors"]["base"] == "invalid_proxy_url"
assert result["errors"]["base"] == "telegram_error"
assert result["description_placeholders"]["error_message"] == "mock network error"
# test: valid input, to continue with webhooks step