"""Provide tests for mysensors text platform.""" from __future__ import annotations from collections.abc import Callable from unittest.mock import MagicMock, call from mysensors.sensor import Sensor import pytest from homeassistant.components.text import ( ATTR_VALUE, DOMAIN as TEXT_DOMAIN, SERVICE_SET_VALUE, ) from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import HomeAssistant async def test_text_node( hass: HomeAssistant, text_node: Sensor, receive_message: Callable[[str], None], transport_write: MagicMock, ) -> None: """Test a text node.""" entity_id = "text.text_node_1_1" state = hass.states.get(entity_id) assert state assert state.state == "test" await hass.services.async_call( TEXT_DOMAIN, SERVICE_SET_VALUE, {ATTR_ENTITY_ID: entity_id, ATTR_VALUE: "Hello World"}, blocking=True, ) assert transport_write.call_count == 1 assert transport_write.call_args == call("1;1;1;1;47;Hello World\n") receive_message("1;1;1;0;47;Hello World\n") await hass.async_block_till_done() state = hass.states.get(entity_id) assert state assert state.state == "Hello World" transport_write.reset_mock() value = "12345678123456781234567812" with pytest.raises(ValueError) as err: await hass.services.async_call( TEXT_DOMAIN, SERVICE_SET_VALUE, {ATTR_ENTITY_ID: entity_id, ATTR_VALUE: value}, blocking=True, ) assert str(err.value) == ( f"Value {value} for text.text_node_1_1 is too long (maximum length 25)" )