def test_remote_value(self): """Test string representation of remote value.""" xknx = XKNX() remote_value = RemoteValue( xknx, group_address="1/2/3", device_name="MyDevice", group_address_state="1/2/4", ) assert ( str(remote_value) == '<RemoteValue device_name="MyDevice" feature_name="Unknown" <1/2/3, 1/2/4, [], None /> />' ) remote_value.value = 34 assert (str(remote_value) == '<RemoteValue device_name="MyDevice" feature_name="Unknown" ' "<1/2/3, 1/2/4, [], 34 /> />") remote_value_passive = RemoteValue( xknx, group_address=["1/2/3", "1/2/4", "i-test"], device_name="MyDevice", ) assert ( str(remote_value_passive) == "<RemoteValue device_name=\"MyDevice\" feature_name=\"Unknown\" <1/2/3, None, ['1/2/4', 'i-test'], None /> />" )
async def test_get_set_value(self): """Test value getter and setter.""" xknx = XKNX() remote_value = RemoteValue(xknx) remote_value.to_knx = lambda value: DPTArray( DPT2ByteFloat.to_knx(value)) remote_value.after_update_cb = AsyncMock() assert remote_value.value is None remote_value.value = 2.2 assert remote_value.value == 2.2 # invalid value raises ConversionError with pytest.raises(ConversionError): remote_value.value = "a" # new value is used in response Telegram test_payload = remote_value.to_knx(2.2) remote_value._send = AsyncMock() await remote_value.respond() remote_value._send.assert_called_with(test_payload, response=True) # callback is not called when setting value programmatically remote_value.after_update_cb.assert_not_called() # no Telegram was sent to the queue assert xknx.telegrams.qsize() == 0