mirror of
https://github.com/home-assistant/core.git
synced 2026-08-16 18:24:59 +01:00
120 lines
4.0 KiB
Python
120 lines
4.0 KiB
Python
"""Tests for the number platform."""
|
|
|
|
from pywizlight import PilotParser
|
|
|
|
from homeassistant.components.number import (
|
|
ATTR_VALUE,
|
|
DOMAIN as NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
)
|
|
from homeassistant.components.wiz.const import DOMAIN
|
|
from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
from . import (
|
|
FAKE_DUAL_HEAD_RGBWW_BULB,
|
|
FAKE_MAC,
|
|
FAKE_TURNABLE_BULB,
|
|
_mocked_wizlight,
|
|
async_push_update,
|
|
async_setup_integration,
|
|
)
|
|
|
|
|
|
async def test_ratio_not_created_without_ratio(
|
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test the ratio entity is not created for lights that report no ratio."""
|
|
await async_setup_integration(hass, bulb_type=FAKE_TURNABLE_BULB)
|
|
|
|
assert (
|
|
entity_registry.async_get_entity_id(
|
|
NUMBER_DOMAIN, DOMAIN, f"{FAKE_MAC}_dual_head_ratio"
|
|
)
|
|
is None
|
|
)
|
|
|
|
|
|
async def test_speed_operation(
|
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test changing a speed."""
|
|
bulb, _ = await async_setup_integration(hass, bulb_type=FAKE_DUAL_HEAD_RGBWW_BULB)
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC})
|
|
entity_id = "number.mock_title_effect_speed"
|
|
assert entity_registry.async_get(entity_id).unique_id == f"{FAKE_MAC}_effect_speed"
|
|
assert hass.states.get(entity_id).state == STATE_UNAVAILABLE
|
|
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC, "speed": 50})
|
|
assert hass.states.get(entity_id).state == "50.0"
|
|
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: entity_id, ATTR_VALUE: 30},
|
|
blocking=True,
|
|
)
|
|
bulb.set_speed.assert_called_with(30)
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC, "speed": 30})
|
|
assert hass.states.get(entity_id).state == "30.0"
|
|
|
|
|
|
async def test_ratio_operation(
|
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test changing a dual head ratio."""
|
|
bulb, _ = await async_setup_integration(hass, bulb_type=FAKE_DUAL_HEAD_RGBWW_BULB)
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC})
|
|
entity_id = entity_registry.async_get_entity_id(
|
|
NUMBER_DOMAIN, DOMAIN, f"{FAKE_MAC}_dual_head_ratio"
|
|
)
|
|
assert entity_id is not None
|
|
assert hass.states.get(entity_id).state == STATE_UNAVAILABLE
|
|
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC, "ratio": 50})
|
|
assert hass.states.get(entity_id).state == "50.0"
|
|
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: entity_id, ATTR_VALUE: 30},
|
|
blocking=True,
|
|
)
|
|
bulb.set_ratio.assert_called_with(30)
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC, "ratio": 30})
|
|
assert hass.states.get(entity_id).state == "30.0"
|
|
|
|
|
|
async def test_ratio_operation_without_dual_head_feature(
|
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test changing a ratio reported by a light with an unadvertised dual head feature."""
|
|
bulb = _mocked_wizlight(None, None, FAKE_TURNABLE_BULB)
|
|
bulb.state = None
|
|
|
|
async def _update_state() -> PilotParser:
|
|
bulb.state = PilotParser({"mac": FAKE_MAC, "ratio": 50})
|
|
return bulb.state
|
|
|
|
bulb.updateState.side_effect = _update_state
|
|
|
|
await async_setup_integration(hass, wizlight=bulb)
|
|
|
|
bulb.updateState.assert_called_once()
|
|
entity_id = entity_registry.async_get_entity_id(
|
|
NUMBER_DOMAIN, DOMAIN, f"{FAKE_MAC}_dual_head_ratio"
|
|
)
|
|
assert entity_id is not None
|
|
assert hass.states.get(entity_id).state == "50.0"
|
|
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: entity_id, ATTR_VALUE: 30},
|
|
blocking=True,
|
|
)
|
|
bulb.set_ratio.assert_called_with(30)
|
|
await async_push_update(hass, bulb, {"mac": FAKE_MAC, "ratio": 30})
|
|
assert hass.states.get(entity_id).state == "30.0"
|