From f55213d8b16e169552d1ac8c0afe36d4e7bfe734 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Sun, 23 May 2021 17:18:35 +0200 Subject: [PATCH] Update modbus cover to 100% coverage (#50996) --- .coveragerc | 1 - homeassistant/components/modbus/cover.py | 4 +- .../{test_modbus_cover.py => test_cover.py} | 49 +++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) rename tests/components/modbus/{test_modbus_cover.py => test_cover.py} (77%) diff --git a/.coveragerc b/.coveragerc index e56773678c2..c24b190f660 100644 --- a/.coveragerc +++ b/.coveragerc @@ -630,7 +630,6 @@ omit = homeassistant/components/mjpeg/camera.py homeassistant/components/mochad/* homeassistant/components/modbus/climate.py - homeassistant/components/modbus/cover.py homeassistant/components/modem_callerid/sensor.py homeassistant/components/motion_blinds/__init__.py homeassistant/components/motion_blinds/const.py diff --git a/homeassistant/components/modbus/cover.py b/homeassistant/components/modbus/cover.py index f6e1b21b0cf..ca00576770e 100644 --- a/homeassistant/components/modbus/cover.py +++ b/homeassistant/components/modbus/cover.py @@ -147,7 +147,7 @@ class ModbusCover(BasePlatform, CoverEntity, RestoreEntity): self._slave, self._register, self._state_open, self._write_type ) self._available = result is not None - self.async_update() + await self.async_update() async def async_close_cover(self, **kwargs: Any) -> None: """Close cover.""" @@ -155,7 +155,7 @@ class ModbusCover(BasePlatform, CoverEntity, RestoreEntity): self._slave, self._register, self._state_closed, self._write_type ) self._available = result is not None - self.async_update() + await self.async_update() async def async_update(self, now=None): """Update the state of the cover.""" diff --git a/tests/components/modbus/test_modbus_cover.py b/tests/components/modbus/test_cover.py similarity index 77% rename from tests/components/modbus/test_modbus_cover.py rename to tests/components/modbus/test_cover.py index f30ee79bd52..8fbb45fde8e 100644 --- a/tests/components/modbus/test_modbus_cover.py +++ b/tests/components/modbus/test_cover.py @@ -1,6 +1,7 @@ """The tests for the Modbus cover component.""" import logging +from pymodbus.exceptions import ModbusException import pytest from homeassistant.components.cover import DOMAIN as COVER_DOMAIN @@ -24,6 +25,7 @@ from homeassistant.const import ( STATE_CLOSING, STATE_OPEN, STATE_OPENING, + STATE_UNAVAILABLE, ) from homeassistant.core import State @@ -246,3 +248,50 @@ async def test_restore_state_cover(hass, state): method_discovery=True, ) assert hass.states.get(entity_id).state == state + + +async def test_service_cover_move(hass, mock_pymodbus): + """Run test for service homeassistant.update_entity.""" + + entity_id = "cover.test" + entity_id2 = "cover.test2" + config = { + CONF_COVERS: [ + { + CONF_NAME: "test", + CONF_REGISTER: 1234, + CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING, + }, + { + CONF_NAME: "test2", + CALL_TYPE_COIL: 1234, + }, + ] + } + mock_pymodbus.read_holding_registers.return_value = ReadResult([0x01]) + await prepare_service_update( + hass, + config, + ) + await hass.services.async_call( + "cover", "open_cover", {"entity_id": entity_id}, blocking=True + ) + assert hass.states.get(entity_id).state == STATE_OPEN + + mock_pymodbus.read_holding_registers.return_value = ReadResult([0x00]) + await hass.services.async_call( + "cover", "close_cover", {"entity_id": entity_id}, blocking=True + ) + assert hass.states.get(entity_id).state == STATE_CLOSED + + mock_pymodbus.read_holding_registers.side_effect = ModbusException("fail write_") + await hass.services.async_call( + "cover", "close_cover", {"entity_id": entity_id}, blocking=True + ) + assert hass.states.get(entity_id).state == STATE_UNAVAILABLE + + mock_pymodbus.read_coils.side_effect = ModbusException("fail write_") + await hass.services.async_call( + "cover", "close_cover", {"entity_id": entity_id2}, blocking=True + ) + assert hass.states.get(entity_id2).state == STATE_UNAVAILABLE