mirror of
https://github.com/home-assistant/core.git
synced 2025-11-08 18:39:30 +00:00
Fix resolving Matrix room aliases (#101928)
This commit is contained in:
@@ -14,6 +14,8 @@ from nio import (
|
||||
LoginError,
|
||||
LoginResponse,
|
||||
Response,
|
||||
RoomResolveAliasError,
|
||||
RoomResolveAliasResponse,
|
||||
UploadResponse,
|
||||
WhoamiError,
|
||||
WhoamiResponse,
|
||||
@@ -48,8 +50,15 @@ from tests.common import async_capture_events
|
||||
|
||||
TEST_NOTIFIER_NAME = "matrix_notify"
|
||||
|
||||
TEST_HOMESERVER = "example.com"
|
||||
TEST_DEFAULT_ROOM = "!DefaultNotificationRoom:example.com"
|
||||
TEST_JOINABLE_ROOMS = ["!RoomIdString:example.com", "#RoomAliasString:example.com"]
|
||||
TEST_ROOM_A_ID = "!RoomA-ID:example.com"
|
||||
TEST_ROOM_B_ID = "!RoomB-ID:example.com"
|
||||
TEST_ROOM_B_ALIAS = "#RoomB-Alias:example.com"
|
||||
TEST_JOINABLE_ROOMS = {
|
||||
TEST_ROOM_A_ID: TEST_ROOM_A_ID,
|
||||
TEST_ROOM_B_ALIAS: TEST_ROOM_B_ID,
|
||||
}
|
||||
TEST_BAD_ROOM = "!UninvitedRoom:example.com"
|
||||
TEST_MXID = "@user:example.com"
|
||||
TEST_DEVICE_ID = "FAKEID"
|
||||
@@ -65,8 +74,16 @@ class _MockAsyncClient(AsyncClient):
|
||||
async def close(self):
|
||||
return None
|
||||
|
||||
async def room_resolve_alias(self, room_alias: str):
|
||||
if room_id := TEST_JOINABLE_ROOMS.get(room_alias):
|
||||
return RoomResolveAliasResponse(
|
||||
room_alias=room_alias, room_id=room_id, servers=[TEST_HOMESERVER]
|
||||
)
|
||||
else:
|
||||
return RoomResolveAliasError(message=f"Could not resolve {room_alias}")
|
||||
|
||||
async def join(self, room_id: RoomID):
|
||||
if room_id in TEST_JOINABLE_ROOMS:
|
||||
if room_id in TEST_JOINABLE_ROOMS.values():
|
||||
return JoinResponse(room_id=room_id)
|
||||
else:
|
||||
return JoinError(message="Not allowed to join this room.")
|
||||
@@ -102,10 +119,10 @@ class _MockAsyncClient(AsyncClient):
|
||||
async def room_send(self, *args, **kwargs):
|
||||
if not self.logged_in:
|
||||
raise LocalProtocolError
|
||||
if kwargs["room_id"] in TEST_JOINABLE_ROOMS:
|
||||
return Response()
|
||||
else:
|
||||
if kwargs["room_id"] not in TEST_JOINABLE_ROOMS.values():
|
||||
return ErrorResponse(message="Cannot send a message in this room.")
|
||||
else:
|
||||
return Response()
|
||||
|
||||
async def sync(self, *args, **kwargs):
|
||||
return None
|
||||
@@ -123,7 +140,7 @@ MOCK_CONFIG_DATA = {
|
||||
CONF_USERNAME: TEST_MXID,
|
||||
CONF_PASSWORD: TEST_PASSWORD,
|
||||
CONF_VERIFY_SSL: True,
|
||||
CONF_ROOMS: TEST_JOINABLE_ROOMS,
|
||||
CONF_ROOMS: list(TEST_JOINABLE_ROOMS),
|
||||
CONF_COMMANDS: [
|
||||
{
|
||||
CONF_WORD: "WordTrigger",
|
||||
@@ -143,35 +160,35 @@ MOCK_CONFIG_DATA = {
|
||||
}
|
||||
|
||||
MOCK_WORD_COMMANDS = {
|
||||
"!RoomIdString:example.com": {
|
||||
TEST_ROOM_A_ID: {
|
||||
"WordTrigger": {
|
||||
"word": "WordTrigger",
|
||||
"name": "WordTriggerEventName",
|
||||
"rooms": ["!RoomIdString:example.com", "#RoomAliasString:example.com"],
|
||||
"rooms": [TEST_ROOM_A_ID, TEST_ROOM_B_ID],
|
||||
}
|
||||
},
|
||||
"#RoomAliasString:example.com": {
|
||||
TEST_ROOM_B_ID: {
|
||||
"WordTrigger": {
|
||||
"word": "WordTrigger",
|
||||
"name": "WordTriggerEventName",
|
||||
"rooms": ["!RoomIdString:example.com", "#RoomAliasString:example.com"],
|
||||
"rooms": [TEST_ROOM_A_ID, TEST_ROOM_B_ID],
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
MOCK_EXPRESSION_COMMANDS = {
|
||||
"!RoomIdString:example.com": [
|
||||
TEST_ROOM_A_ID: [
|
||||
{
|
||||
"expression": re.compile("My name is (?P<name>.*)"),
|
||||
"name": "ExpressionTriggerEventName",
|
||||
"rooms": ["!RoomIdString:example.com", "#RoomAliasString:example.com"],
|
||||
"rooms": [TEST_ROOM_A_ID, TEST_ROOM_B_ID],
|
||||
}
|
||||
],
|
||||
"#RoomAliasString:example.com": [
|
||||
TEST_ROOM_B_ID: [
|
||||
{
|
||||
"expression": re.compile("My name is (?P<name>.*)"),
|
||||
"name": "ExpressionTriggerEventName",
|
||||
"rooms": ["!RoomIdString:example.com", "#RoomAliasString:example.com"],
|
||||
"rooms": [TEST_ROOM_A_ID, TEST_ROOM_B_ID],
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user