mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Warn user if Steam friends list is restricted (#72285)
This commit is contained in:
parent
5cfb31d28a
commit
204e26a1b5
@ -174,11 +174,14 @@ class SteamOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
}
|
}
|
||||||
await self.hass.config_entries.async_reload(self.entry.entry_id)
|
await self.hass.config_entries.async_reload(self.entry.entry_id)
|
||||||
return self.async_create_entry(title="", data=channel_data)
|
return self.async_create_entry(title="", data=channel_data)
|
||||||
|
error = None
|
||||||
try:
|
try:
|
||||||
users = {
|
users = {
|
||||||
name["steamid"]: name["personaname"]
|
name["steamid"]: name["personaname"]
|
||||||
for name in await self.hass.async_add_executor_job(self.get_accounts)
|
for name in await self.hass.async_add_executor_job(self.get_accounts)
|
||||||
}
|
}
|
||||||
|
if not users:
|
||||||
|
error = {"base": "unauthorized"}
|
||||||
|
|
||||||
except steam.api.HTTPTimeoutError:
|
except steam.api.HTTPTimeoutError:
|
||||||
users = self.options[CONF_ACCOUNTS]
|
users = self.options[CONF_ACCOUNTS]
|
||||||
@ -191,12 +194,17 @@ class SteamOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
}
|
}
|
||||||
self.options[CONF_ACCOUNTS] = users | self.options[CONF_ACCOUNTS]
|
self.options[CONF_ACCOUNTS] = users | self.options[CONF_ACCOUNTS]
|
||||||
|
|
||||||
return self.async_show_form(step_id="init", data_schema=vol.Schema(options))
|
return self.async_show_form(
|
||||||
|
step_id="init", data_schema=vol.Schema(options), errors=error
|
||||||
|
)
|
||||||
|
|
||||||
def get_accounts(self) -> list[dict[str, str | int]]:
|
def get_accounts(self) -> list[dict[str, str | int]]:
|
||||||
"""Get accounts."""
|
"""Get accounts."""
|
||||||
interface = steam.api.interface("ISteamUser")
|
interface = steam.api.interface("ISteamUser")
|
||||||
friends = interface.GetFriendList(steamid=self.entry.data[CONF_ACCOUNT])
|
try:
|
||||||
_users_str = [user["steamid"] for user in friends["friendslist"]["friends"]]
|
friends = interface.GetFriendList(steamid=self.entry.data[CONF_ACCOUNT])
|
||||||
|
_users_str = [user["steamid"] for user in friends["friendslist"]["friends"]]
|
||||||
|
except steam.api.HTTPError:
|
||||||
|
return []
|
||||||
names = interface.GetPlayerSummaries(steamids=_users_str)
|
names = interface.GetPlayerSummaries(steamids=_users_str)
|
||||||
return names["response"]["players"]["player"]
|
return names["response"]["players"]["player"]
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
"accounts": "Names of accounts to be monitored"
|
"accounts": "Names of accounts to be monitored"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"unauthorized": "Friends list restricted: Please refer to the documentation on how to see all other friends"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
"accounts": "Names of accounts to be monitored"
|
"accounts": "Names of accounts to be monitored"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"unauthorized": "Friends list restricted: Please refer to the documentation on how to see all other friends"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,8 @@
|
|||||||
"""Tests for Steam integration."""
|
"""Tests for Steam integration."""
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
import steam
|
||||||
|
|
||||||
from homeassistant.components.steam_online import DOMAIN
|
from homeassistant.components.steam_online import DOMAIN
|
||||||
from homeassistant.components.steam_online.const import CONF_ACCOUNT, CONF_ACCOUNTS
|
from homeassistant.components.steam_online.const import CONF_ACCOUNT, CONF_ACCOUNTS
|
||||||
from homeassistant.const import CONF_API_KEY
|
from homeassistant.const import CONF_API_KEY
|
||||||
@ -96,11 +98,24 @@ class MockedInterface(dict):
|
|||||||
return {"response": {"player_level": 10}}
|
return {"response": {"player_level": 10}}
|
||||||
|
|
||||||
|
|
||||||
|
class MockedInterfacePrivate(MockedInterface):
|
||||||
|
"""Mocked interface for private friends list."""
|
||||||
|
|
||||||
|
def GetFriendList(self, steamid: str) -> None:
|
||||||
|
"""Get friend list."""
|
||||||
|
raise steam.api.HTTPError
|
||||||
|
|
||||||
|
|
||||||
def patch_interface() -> MockedInterface:
|
def patch_interface() -> MockedInterface:
|
||||||
"""Patch interface."""
|
"""Patch interface."""
|
||||||
return patch("steam.api.interface", return_value=MockedInterface())
|
return patch("steam.api.interface", return_value=MockedInterface())
|
||||||
|
|
||||||
|
|
||||||
|
def patch_interface_private() -> MockedInterfacePrivate:
|
||||||
|
"""Patch interface for private friends list."""
|
||||||
|
return patch("steam.api.interface", return_value=MockedInterfacePrivate())
|
||||||
|
|
||||||
|
|
||||||
def patch_user_interface_null() -> MockedUserInterfaceNull:
|
def patch_user_interface_null() -> MockedUserInterfaceNull:
|
||||||
"""Patch player interface with no players."""
|
"""Patch player interface with no players."""
|
||||||
return patch("steam.api.interface", return_value=MockedUserInterfaceNull())
|
return patch("steam.api.interface", return_value=MockedUserInterfaceNull())
|
||||||
|
@ -21,6 +21,7 @@ from . import (
|
|||||||
CONF_OPTIONS_2,
|
CONF_OPTIONS_2,
|
||||||
create_entry,
|
create_entry,
|
||||||
patch_interface,
|
patch_interface,
|
||||||
|
patch_interface_private,
|
||||||
patch_user_interface_null,
|
patch_user_interface_null,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -225,3 +226,22 @@ async def test_options_flow_timeout(hass: HomeAssistant) -> None:
|
|||||||
|
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||||
assert result["data"] == CONF_OPTIONS
|
assert result["data"] == CONF_OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
async def test_options_flow_unauthorized(hass: HomeAssistant) -> None:
|
||||||
|
"""Test updating options when user's friends list is not public."""
|
||||||
|
entry = create_entry(hass)
|
||||||
|
with patch_interface_private():
|
||||||
|
result = await hass.config_entries.options.async_init(entry.entry_id)
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
|
assert result["step_id"] == "init"
|
||||||
|
|
||||||
|
result = await hass.config_entries.options.async_configure(
|
||||||
|
result["flow_id"],
|
||||||
|
user_input={CONF_ACCOUNTS: [ACCOUNT_1]},
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||||
|
assert result["data"] == CONF_OPTIONS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user