"""Configure and test MatrixBot.""" from nio import MatrixRoom, RoomMessageText from homeassistant.components.matrix import ( DOMAIN as MATRIX_DOMAIN, SERVICE_SEND_MESSAGE, MatrixBot, ) from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN from homeassistant.core import HomeAssistant from .conftest import ( MOCK_EXPRESSION_COMMANDS, MOCK_WORD_COMMANDS, TEST_NOTIFIER_NAME, TEST_ROOM_A_ID, ) async def test_services(hass: HomeAssistant, matrix_bot: MatrixBot): """Test hass/MatrixBot state.""" services = hass.services.async_services() # Verify that the matrix service is registered assert (matrix_service := services.get(MATRIX_DOMAIN)) assert SERVICE_SEND_MESSAGE in matrix_service # Verify that the matrix notifier is registered assert (notify_service := services.get(NOTIFY_DOMAIN)) assert TEST_NOTIFIER_NAME in notify_service async def test_commands(hass, matrix_bot: MatrixBot, command_events): """Test that the configured commands were parsed correctly.""" await hass.async_start() assert len(command_events) == 0 assert matrix_bot._word_commands == MOCK_WORD_COMMANDS assert matrix_bot._expression_commands == MOCK_EXPRESSION_COMMANDS room_id = TEST_ROOM_A_ID room = MatrixRoom(room_id=room_id, own_user_id=matrix_bot._mx_id) # Test single-word command. word_command_message = RoomMessageText( body="!WordTrigger arg1 arg2", formatted_body=None, format=None, source={ "event_id": "fake_event_id", "sender": "@SomeUser:example.com", "origin_server_ts": 123456789, }, ) await matrix_bot._handle_room_message(room, word_command_message) await hass.async_block_till_done() assert len(command_events) == 1 event = command_events.pop() assert event.data == { "command": "WordTriggerEventName", "sender": "@SomeUser:example.com", "room": room_id, "args": ["arg1", "arg2"], } # Test expression command. room = MatrixRoom(room_id=room_id, own_user_id=matrix_bot._mx_id) expression_command_message = RoomMessageText( body="My name is FakeName", formatted_body=None, format=None, source={ "event_id": "fake_event_id", "sender": "@SomeUser:example.com", "origin_server_ts": 123456789, }, ) await matrix_bot._handle_room_message(room, expression_command_message) await hass.async_block_till_done() assert len(command_events) == 1 event = command_events.pop() assert event.data == { "command": "ExpressionTriggerEventName", "sender": "@SomeUser:example.com", "room": room_id, "args": {"name": "FakeName"}, }