mirror of
https://github.com/home-assistant/core.git
synced 2026-08-31 10:16:17 -05:00
Update subentry description for Telegram bot (#164642)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -62,8 +62,8 @@ _LOGGER = logging.getLogger(__name__)
|
||||
DESCRIPTION_PLACEHOLDERS: dict[str, str] = {
|
||||
"botfather_username": "@BotFather",
|
||||
"botfather_url": "https://t.me/botfather",
|
||||
"getidsbot_username": "@GetIDs Bot",
|
||||
"getidsbot_url": "https://t.me/getidsbot",
|
||||
"id_bot_username": "@id_bot",
|
||||
"id_bot_url": "https://t.me/id_bot",
|
||||
"socks_url": "socks5://username:password@proxy_ip:proxy_port",
|
||||
# used in advanced settings section
|
||||
"default_api_endpoint": DEFAULT_API_ENDPOINT,
|
||||
@@ -611,10 +611,15 @@ class AllowedChatIdsSubEntryFlowHandler(ConfigSubentryFlow):
|
||||
|
||||
errors["base"] = "chat_not_found"
|
||||
|
||||
service: TelegramNotificationService = self._get_entry().runtime_data
|
||||
description_placeholders = DESCRIPTION_PLACEHOLDERS.copy()
|
||||
description_placeholders["bot_username"] = f"@{service.bot.username}"
|
||||
description_placeholders["bot_url"] = f"https://t.me/{service.bot.username}"
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="user",
|
||||
data_schema=vol.Schema({vol.Required(CONF_CHAT_ID): vol.Coerce(int)}),
|
||||
description_placeholders=DESCRIPTION_PLACEHOLDERS,
|
||||
description_placeholders=description_placeholders,
|
||||
errors=errors,
|
||||
)
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
"data_description": {
|
||||
"chat_id": "ID representing the user or group chat to which messages can be sent."
|
||||
},
|
||||
"description": "To get your chat ID, follow these steps:\n\n1. Open Telegram and start a chat with [{getidsbot_username}]({getidsbot_url}).\n1. Send any message to the bot.\n1. Your chat ID is in the `id` field of the bot's response.",
|
||||
"description": "Before you proceed, send any message to your bot: [{bot_username}]({bot_url}). This is required because Telegram prevents bots from initiating chats with users.\n\nThen follow these steps to get your chat ID:\n\n1. Open Telegram and start a chat with [{id_bot_username}]({id_bot_url}).\n1. Send any message to the bot.\n1. Your chat ID is in the `ID` field of the bot's response.",
|
||||
"title": "Add chat"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ def mock_external_calls() -> Generator[None]:
|
||||
accent_color_id=0,
|
||||
accepted_gift_types=AcceptedGiftTypes(True, True, True, True),
|
||||
)
|
||||
test_user = User(123456, "Testbot", True, "mock last name", "mock username")
|
||||
test_user = User(123456, "Testbot", True, "mock last name", "mock_bot")
|
||||
message = Message(
|
||||
message_id=12345,
|
||||
date=datetime.now(),
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
'first_name': 'Testbot',
|
||||
'id': 123456,
|
||||
'last_name': 'mock last name',
|
||||
'username': 'mock username',
|
||||
'username': 'mock_bot',
|
||||
}),
|
||||
'chat_id': 123456,
|
||||
'event_type': 'telegram_sent',
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from telegram import AcceptedGiftTypes, ChatFullInfo, User
|
||||
from telegram.constants import AccentColor
|
||||
from telegram import User
|
||||
from telegram.error import BadRequest, InvalidToken, NetworkError
|
||||
|
||||
from homeassistant.components.telegram_bot.config_flow import DESCRIPTION_PLACEHOLDERS
|
||||
@@ -435,19 +434,15 @@ async def test_reauth_flow(
|
||||
|
||||
|
||||
async def test_subentry_flow(
|
||||
hass: HomeAssistant, mock_broadcast_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_broadcast_config_entry: MockConfigEntry,
|
||||
mock_external_calls: None,
|
||||
) -> None:
|
||||
"""Test subentry flow."""
|
||||
mock_broadcast_config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.telegram_bot.config_flow.Bot.get_me",
|
||||
return_value=User(123456, "Testbot", True),
|
||||
):
|
||||
assert await hass.config_entries.async_setup(
|
||||
mock_broadcast_config_entry.entry_id
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert await hass.config_entries.async_setup(mock_broadcast_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
result = await hass.config_entries.subentries.async_init(
|
||||
(mock_broadcast_config_entry.entry_id, SUBENTRY_TYPE_ALLOWED_CHAT_IDS),
|
||||
@@ -455,24 +450,17 @@ async def test_subentry_flow(
|
||||
)
|
||||
assert result["type"] is FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
assert result["description_placeholders"] == {
|
||||
**DESCRIPTION_PLACEHOLDERS,
|
||||
"bot_username": "@mock_bot",
|
||||
"bot_url": "https://t.me/mock_bot",
|
||||
}
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.telegram_bot.config_flow.Bot.get_chat",
|
||||
return_value=ChatFullInfo(
|
||||
id=987654321,
|
||||
title="mock title",
|
||||
first_name="mock first_name",
|
||||
type="PRIVATE",
|
||||
max_reaction_count=100,
|
||||
accent_color_id=AccentColor.COLOR_000,
|
||||
accepted_gift_types=AcceptedGiftTypes(True, True, True, True),
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.subentries.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={CONF_CHAT_ID: 987654321},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
result = await hass.config_entries.subentries.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={CONF_CHAT_ID: 987654321},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
subentry_id = list(mock_broadcast_config_entry.subentries)[-1]
|
||||
subentry: ConfigSubentry = mock_broadcast_config_entry.subentries[subentry_id]
|
||||
@@ -501,19 +489,15 @@ async def test_subentry_flow_config_not_ready(
|
||||
|
||||
|
||||
async def test_subentry_flow_chat_error(
|
||||
hass: HomeAssistant, mock_broadcast_config_entry: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_broadcast_config_entry: MockConfigEntry,
|
||||
mock_external_calls: None,
|
||||
) -> None:
|
||||
"""Test subentry flow."""
|
||||
mock_broadcast_config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.telegram_bot.config_flow.Bot.get_me",
|
||||
return_value=User(123456, "Testbot", True),
|
||||
):
|
||||
assert await hass.config_entries.async_setup(
|
||||
mock_broadcast_config_entry.entry_id
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert await hass.config_entries.async_setup(mock_broadcast_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
result = await hass.config_entries.subentries.async_init(
|
||||
(mock_broadcast_config_entry.entry_id, SUBENTRY_TYPE_ALLOWED_CHAT_IDS),
|
||||
@@ -524,9 +508,7 @@ async def test_subentry_flow_chat_error(
|
||||
|
||||
# test: chat not found
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.telegram_bot.config_flow.Bot.get_chat"
|
||||
) as mock_bot:
|
||||
with patch("homeassistant.components.telegram_bot.bot.Bot.get_chat") as mock_bot:
|
||||
mock_bot.side_effect = BadRequest("mock chat not found")
|
||||
|
||||
result = await hass.config_entries.subentries.async_configure(
|
||||
@@ -541,23 +523,11 @@ async def test_subentry_flow_chat_error(
|
||||
|
||||
# test: chat id already configured
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.telegram_bot.config_flow.Bot.get_chat",
|
||||
return_value=ChatFullInfo(
|
||||
id=123456,
|
||||
title="mock title",
|
||||
first_name="mock first_name",
|
||||
type="PRIVATE",
|
||||
max_reaction_count=100,
|
||||
accent_color_id=AccentColor.COLOR_000,
|
||||
accepted_gift_types=AcceptedGiftTypes(True, True, True, True),
|
||||
),
|
||||
):
|
||||
result = await hass.config_entries.subentries.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={CONF_CHAT_ID: 123456},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
result = await hass.config_entries.subentries.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={CONF_CHAT_ID: 123456},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] is FlowResultType.ABORT
|
||||
assert result["reason"] == "already_configured"
|
||||
|
||||
@@ -203,7 +203,7 @@ async def test_send_message(
|
||||
assert events[0].data["bot"]["id"] == 123456
|
||||
assert events[0].data["bot"]["first_name"] == "Testbot"
|
||||
assert events[0].data["bot"]["last_name"] == "mock last name"
|
||||
assert events[0].data["bot"]["username"] == "mock username"
|
||||
assert events[0].data["bot"]["username"] == "mock_bot"
|
||||
|
||||
assert response == {
|
||||
"chats": [
|
||||
@@ -811,7 +811,7 @@ async def test_polling_platform_message_text_update(
|
||||
assert events[0].data["bot"]["id"] == 123456
|
||||
assert events[0].data["bot"]["first_name"] == "Testbot"
|
||||
assert events[0].data["bot"]["last_name"] == "mock last name"
|
||||
assert events[0].data["bot"]["username"] == "mock username"
|
||||
assert events[0].data["bot"]["username"] == "mock_bot"
|
||||
|
||||
assert isinstance(events[0].context, Context)
|
||||
|
||||
@@ -1495,7 +1495,7 @@ async def test_send_video(
|
||||
{
|
||||
ATTR_URL: "https://mock",
|
||||
ATTR_AUTHENTICATION: HTTP_BASIC_AUTHENTICATION,
|
||||
ATTR_USERNAME: "mock username",
|
||||
ATTR_USERNAME: "mock_bot",
|
||||
ATTR_PASSWORD: "mock password",
|
||||
},
|
||||
blocking=True,
|
||||
@@ -1597,7 +1597,7 @@ async def test_send_video(
|
||||
{
|
||||
ATTR_URL: "https://mock",
|
||||
ATTR_AUTHENTICATION: HTTP_DIGEST_AUTHENTICATION,
|
||||
ATTR_USERNAME: "mock username",
|
||||
ATTR_USERNAME: "mock_bot",
|
||||
ATTR_PASSWORD: "mock password",
|
||||
},
|
||||
blocking=True,
|
||||
|
||||
Reference in New Issue
Block a user