core/tests/components/myuplink/test_number.py

106 lines
3.1 KiB
Python
Raw Normal View History

"""Tests for myuplink switch module."""
from unittest.mock import MagicMock
from aiohttp import ClientError
import pytest
from homeassistant.components.myuplink.const import DOMAIN
from homeassistant.components.number import SERVICE_SET_VALUE
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity_registry as er
from tests.common import load_fixture
TEST_PLATFORM = Platform.NUMBER
pytestmark = pytest.mark.parametrize("platforms", [(TEST_PLATFORM,)])
ENTITY_ID = "number.gotham_city_degree_minutes"
ENTITY_FRIENDLY_NAME = "Gotham City Degree minutes"
ENTITY_UID = "robin-r-1234-20240201-123456-aa-bb-cc-dd-ee-ff-40940"
async def test_entity_registry(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
mock_myuplink_client: MagicMock,
setup_platform: None,
) -> None:
"""Test that the entities are registered in the entity registry."""
entry = entity_registry.async_get(ENTITY_ID)
assert entry.unique_id == ENTITY_UID
async def test_attributes(
hass: HomeAssistant,
mock_myuplink_client: MagicMock,
setup_platform: None,
) -> None:
"""Test the switch attributes are correct."""
state = hass.states.get(ENTITY_ID)
assert state.state == "-875.0"
assert state.attributes == {
"friendly_name": ENTITY_FRIENDLY_NAME,
"min": -3000,
"max": 3000,
"mode": "auto",
"step": 1.0,
"unit_of_measurement": "DM",
}
async def test_set_value(
hass: HomeAssistant,
mock_myuplink_client: MagicMock,
setup_platform: None,
) -> None:
"""Test the value of the number entity can be set."""
await hass.services.async_call(
TEST_PLATFORM,
SERVICE_SET_VALUE,
{ATTR_ENTITY_ID: ENTITY_ID, "value": -125},
blocking=True,
)
await hass.async_block_till_done()
mock_myuplink_client.async_set_device_points.assert_called_once()
async def test_api_failure(
hass: HomeAssistant,
mock_myuplink_client: MagicMock,
setup_platform: None,
) -> None:
"""Test handling of exception from API."""
with pytest.raises(HomeAssistantError):
mock_myuplink_client.async_set_device_points.side_effect = ClientError
await hass.services.async_call(
TEST_PLATFORM,
SERVICE_SET_VALUE,
{ATTR_ENTITY_ID: ENTITY_ID, "value": -125},
blocking=True,
)
await hass.async_block_till_done()
mock_myuplink_client.async_set_device_points.assert_called_once()
@pytest.mark.parametrize(
"load_device_points_file",
[load_fixture("device_points_nibe_smo20.json", DOMAIN)],
)
async def test_entity_registry_smo20(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
mock_myuplink_client: MagicMock,
setup_platform: None,
) -> None:
"""Test that the entities are registered in the entity registry."""
entry = entity_registry.async_get("number.f730_cu_3x400v_change_in_curve")
assert entry.unique_id == "robin-r-1234-20240201-123456-aa-bb-cc-dd-ee-ff-47028"