mirror of
https://github.com/home-assistant/core.git
synced 2025-11-10 03:19:34 +00:00
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""Test the NUMBER platform from air-Q integration."""
|
|
|
|
from unittest.mock import AsyncMock
|
|
|
|
import pytest
|
|
|
|
from homeassistant.const import Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import ServiceValidationError
|
|
|
|
from . import setup_platform
|
|
from .common import TEST_BRIGHTNESS, TEST_DEVICE_INFO
|
|
|
|
ENTITY_ID = f"number.{TEST_DEVICE_INFO['name']}_led_brightness"
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
async def number_platform(hass: HomeAssistant, mock_airq: AsyncMock) -> None:
|
|
"""Configure AirQ integration and validate the setup for NUMBER platform."""
|
|
await setup_platform(hass, Platform.NUMBER)
|
|
|
|
# Validate the setup
|
|
state = hass.states.get(ENTITY_ID)
|
|
assert state is not None, (
|
|
f"{ENTITY_ID} not found among {hass.states.async_entity_ids()}"
|
|
)
|
|
assert float(state.state) == TEST_BRIGHTNESS
|
|
|
|
|
|
@pytest.mark.parametrize("new_brightness", [0, 100, (TEST_BRIGHTNESS + 10) % 100])
|
|
async def test_number_set_value(
|
|
hass: HomeAssistant, mock_airq: AsyncMock, new_brightness
|
|
) -> None:
|
|
"""Test that setting value works."""
|
|
# Simulate the device confirming the new brightness on the next poll
|
|
mock_airq.get_current_brightness.return_value = new_brightness
|
|
|
|
await hass.services.async_call(
|
|
"number",
|
|
"set_value",
|
|
{"entity_id": ENTITY_ID, "value": new_brightness},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
# Verify the API methods were called correctly
|
|
mock_airq.set_current_brightness.assert_called_once_with(new_brightness)
|
|
|
|
# Validate that the update propagated to the state
|
|
state = hass.states.get(ENTITY_ID)
|
|
assert state is not None, (
|
|
f"{ENTITY_ID} not found among {hass.states.async_entity_ids()}"
|
|
)
|
|
assert float(state.state) == new_brightness
|
|
|
|
|
|
@pytest.mark.parametrize("new_brightness", [-1, 110])
|
|
async def test_number_set_invalid_value_caught_by_hass(
|
|
hass: HomeAssistant, mock_airq: AsyncMock, new_brightness
|
|
) -> None:
|
|
"""Test that setting incorrect values errors."""
|
|
with pytest.raises(ServiceValidationError):
|
|
await hass.services.async_call(
|
|
"number",
|
|
"set_value",
|
|
{"entity_id": ENTITY_ID, "value": new_brightness},
|
|
blocking=True,
|
|
)
|
|
|
|
mock_airq.set_current_brightness.assert_not_called()
|