1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-17 15:44:52 +01:00
Files
core/tests/components/lutron/test_cover.py

118 lines
3.2 KiB
Python

"""Test Lutron cover platform."""
from unittest.mock import MagicMock, patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.cover import DOMAIN as COVER_DOMAIN
from homeassistant.const import (
ATTR_ENTITY_ID,
SERVICE_CLOSE_COVER,
SERVICE_OPEN_COVER,
SERVICE_SET_COVER_POSITION,
STATE_CLOSED,
STATE_OPEN,
Platform,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
@pytest.fixture(autouse=True)
def setup_platforms():
"""Patch PLATFORMS for all tests in this file."""
with patch("homeassistant.components.lutron.PLATFORMS", [Platform.COVER]):
yield
async def test_cover_setup(
hass: HomeAssistant,
mock_lutron: MagicMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test cover setup."""
mock_config_entry.add_to_hass(hass)
cover = mock_lutron.areas[0].outputs[2]
cover.level = 0
cover.last_level.return_value = 0
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
async def test_cover_services(
hass: HomeAssistant, mock_lutron: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test cover services."""
mock_config_entry.add_to_hass(hass)
cover = mock_lutron.areas[0].outputs[2]
cover.level = 0
cover.last_level.return_value = 0
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
entity_id = "cover.test_cover"
# Open cover
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_OPEN_COVER,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
assert cover.level == 100
# Close cover
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_CLOSE_COVER,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
assert cover.level == 0
# Set cover position
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_SET_COVER_POSITION,
{ATTR_ENTITY_ID: entity_id, "position": 50},
blocking=True,
)
assert cover.level == 50
async def test_cover_update(
hass: HomeAssistant, mock_lutron: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test cover state update."""
mock_config_entry.add_to_hass(hass)
cover = mock_lutron.areas[0].outputs[2]
cover.level = 0
cover.last_level.return_value = 0
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
entity_id = "cover.test_cover"
assert hass.states.get(entity_id).state == STATE_CLOSED
# Simulate update
cover.last_level.return_value = 100
callback = cover.subscribe.call_args[0][0]
callback(cover, None, None, None)
await hass.async_block_till_done()
assert hass.states.get(entity_id).state == STATE_OPEN
assert hass.states.get(entity_id).attributes["current_position"] == 100