103 lines
3.4 KiB
Python
103 lines
3.4 KiB
Python
"""Test Dynalite cover."""
|
|
from dynalite_devices_lib.cover import DynaliteTimeCoverWithTiltDevice
|
|
import pytest
|
|
|
|
from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_FRIENDLY_NAME
|
|
|
|
from .common import (
|
|
ATTR_ARGS,
|
|
ATTR_METHOD,
|
|
ATTR_SERVICE,
|
|
create_entity_from_device,
|
|
create_mock_device,
|
|
run_service_tests,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_device():
|
|
"""Mock a Dynalite device."""
|
|
mock_dev = create_mock_device("cover", DynaliteTimeCoverWithTiltDevice)
|
|
mock_dev.device_class = "blind"
|
|
return mock_dev
|
|
|
|
|
|
async def test_cover_setup(hass, mock_device):
|
|
"""Test a successful setup."""
|
|
await create_entity_from_device(hass, mock_device)
|
|
entity_state = hass.states.get("cover.name")
|
|
assert entity_state.attributes[ATTR_FRIENDLY_NAME] == mock_device.name
|
|
assert (
|
|
entity_state.attributes["current_position"]
|
|
== mock_device.current_cover_position
|
|
)
|
|
assert (
|
|
entity_state.attributes["current_tilt_position"]
|
|
== mock_device.current_cover_tilt_position
|
|
)
|
|
assert entity_state.attributes[ATTR_DEVICE_CLASS] == mock_device.device_class
|
|
await run_service_tests(
|
|
hass,
|
|
mock_device,
|
|
"cover",
|
|
[
|
|
{ATTR_SERVICE: "open_cover", ATTR_METHOD: "async_open_cover"},
|
|
{ATTR_SERVICE: "close_cover", ATTR_METHOD: "async_close_cover"},
|
|
{ATTR_SERVICE: "stop_cover", ATTR_METHOD: "async_stop_cover"},
|
|
{
|
|
ATTR_SERVICE: "set_cover_position",
|
|
ATTR_METHOD: "async_set_cover_position",
|
|
ATTR_ARGS: {"position": 50},
|
|
},
|
|
{ATTR_SERVICE: "open_cover_tilt", ATTR_METHOD: "async_open_cover_tilt"},
|
|
{ATTR_SERVICE: "close_cover_tilt", ATTR_METHOD: "async_close_cover_tilt"},
|
|
{ATTR_SERVICE: "stop_cover_tilt", ATTR_METHOD: "async_stop_cover_tilt"},
|
|
{
|
|
ATTR_SERVICE: "set_cover_tilt_position",
|
|
ATTR_METHOD: "async_set_cover_tilt_position",
|
|
ATTR_ARGS: {"tilt_position": 50},
|
|
},
|
|
],
|
|
)
|
|
|
|
|
|
async def test_cover_without_tilt(hass, mock_device):
|
|
"""Test a cover with no tilt."""
|
|
mock_device.has_tilt = False
|
|
await create_entity_from_device(hass, mock_device)
|
|
await hass.services.async_call(
|
|
"cover", "open_cover_tilt", {"entity_id": "cover.name"}, blocking=True
|
|
)
|
|
await hass.async_block_till_done()
|
|
mock_device.async_open_cover_tilt.assert_not_called()
|
|
|
|
|
|
async def check_cover_position(
|
|
hass, update_func, device, closing, opening, closed, expected
|
|
):
|
|
"""Check that a given position behaves correctly."""
|
|
device.is_closing = closing
|
|
device.is_opening = opening
|
|
device.is_closed = closed
|
|
update_func(device)
|
|
await hass.async_block_till_done()
|
|
entity_state = hass.states.get("cover.name")
|
|
assert entity_state.state == expected
|
|
|
|
|
|
async def test_cover_positions(hass, mock_device):
|
|
"""Test that the state updates in the various positions."""
|
|
update_func = await create_entity_from_device(hass, mock_device)
|
|
await check_cover_position(
|
|
hass, update_func, mock_device, True, False, False, "closing"
|
|
)
|
|
await check_cover_position(
|
|
hass, update_func, mock_device, False, True, False, "opening"
|
|
)
|
|
await check_cover_position(
|
|
hass, update_func, mock_device, False, False, True, "closed"
|
|
)
|
|
await check_cover_position(
|
|
hass, update_func, mock_device, False, False, False, "open"
|
|
)
|