core/tests/components/matrix/test_send_message.py

83 lines
2.5 KiB
Python

"""Test the send_message service."""
import pytest
from homeassistant.components.matrix import (
ATTR_FORMAT,
ATTR_IMAGES,
DOMAIN as MATRIX_DOMAIN,
MatrixBot,
)
from homeassistant.components.matrix.const import FORMAT_HTML, SERVICE_SEND_MESSAGE
from homeassistant.components.notify import ATTR_DATA, ATTR_MESSAGE, ATTR_TARGET
from homeassistant.core import Event, HomeAssistant
from .conftest import TEST_BAD_ROOM, TEST_JOINABLE_ROOMS
async def test_send_message(
hass: HomeAssistant,
matrix_bot: MatrixBot,
image_path,
matrix_events: list[Event],
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the send_message service."""
await hass.async_start()
assert len(matrix_events) == 0
await matrix_bot._login()
# Send a message without an attached image.
data = {ATTR_MESSAGE: "Test message", ATTR_TARGET: list(TEST_JOINABLE_ROOMS)}
await hass.services.async_call(
MATRIX_DOMAIN, SERVICE_SEND_MESSAGE, data, blocking=True
)
for room_alias_or_id in TEST_JOINABLE_ROOMS:
assert f"Message delivered to room '{room_alias_or_id}'" in caplog.messages
# Send an HTML message without an attached image.
data = {
ATTR_MESSAGE: "Test message",
ATTR_TARGET: list(TEST_JOINABLE_ROOMS),
ATTR_DATA: {ATTR_FORMAT: FORMAT_HTML},
}
await hass.services.async_call(
MATRIX_DOMAIN, SERVICE_SEND_MESSAGE, data, blocking=True
)
for room_alias_or_id in TEST_JOINABLE_ROOMS:
assert f"Message delivered to room '{room_alias_or_id}'" in caplog.messages
# Send a message with an attached image.
data[ATTR_DATA] = {ATTR_IMAGES: [image_path.name]}
await hass.services.async_call(
MATRIX_DOMAIN, SERVICE_SEND_MESSAGE, data, blocking=True
)
for room_alias_or_id in TEST_JOINABLE_ROOMS:
assert f"Message delivered to room '{room_alias_or_id}'" in caplog.messages
async def test_unsendable_message(
hass: HomeAssistant,
matrix_bot: MatrixBot,
matrix_events: list[Event],
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the send_message service with an invalid room."""
assert len(matrix_events) == 0
await matrix_bot._login()
data = {ATTR_MESSAGE: "Test message", ATTR_TARGET: TEST_BAD_ROOM}
await hass.services.async_call(
MATRIX_DOMAIN, SERVICE_SEND_MESSAGE, data, blocking=True
)
assert (
f"Unable to deliver message to room '{TEST_BAD_ROOM}': ErrorResponse: Cannot send a message in this room."
in caplog.messages
)