mirror of
https://github.com/home-assistant/core.git
synced 2026-07-11 08:39:02 +01:00
170 lines
5.1 KiB
Python
170 lines
5.1 KiB
Python
"""Tests for Synology DSM select entities."""
|
|
|
|
from unittest.mock import AsyncMock, MagicMock, Mock, patch
|
|
|
|
import pytest
|
|
from synology_dsm.api.core.hardware import FanSpeed
|
|
from syrupy.assertion import SnapshotAssertion
|
|
|
|
from homeassistant.components.select import (
|
|
DOMAIN as SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
)
|
|
from homeassistant.components.synology_dsm.const import DOMAIN
|
|
from homeassistant.const import (
|
|
ATTR_ENTITY_ID,
|
|
ATTR_OPTION,
|
|
CONF_HOST,
|
|
CONF_MAC,
|
|
CONF_PASSWORD,
|
|
CONF_PORT,
|
|
CONF_SSL,
|
|
CONF_USERNAME,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
from .common import mock_dsm_hardware, mock_dsm_information
|
|
from .consts import HOST, MACS, PASSWORD, PORT, SERIAL, USE_SSL, USERNAME
|
|
|
|
from tests.common import MockConfigEntry, snapshot_platform
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_dsm():
|
|
"""Mock a successful service."""
|
|
with patch("homeassistant.components.synology_dsm.common.SynologyDSM") as dsm:
|
|
dsm.login = AsyncMock(return_value=True)
|
|
dsm.update = AsyncMock(return_value=True)
|
|
|
|
dsm.surveillance_station.update = AsyncMock(return_value=True)
|
|
dsm.upgrade.update = AsyncMock(return_value=True)
|
|
dsm.network = Mock(
|
|
update=AsyncMock(return_value=True), macs=MACS, hostname=HOST
|
|
)
|
|
dsm.hardware = mock_dsm_hardware()
|
|
dsm.information = mock_dsm_information()
|
|
dsm.file = Mock(get_shared_folders=AsyncMock(return_value=None))
|
|
dsm.logout = AsyncMock(return_value=True)
|
|
yield dsm
|
|
|
|
|
|
async def test_fan_speed(
|
|
hass: HomeAssistant,
|
|
entity_registry: er.EntityRegistry,
|
|
snapshot: SnapshotAssertion,
|
|
mock_dsm: MagicMock,
|
|
) -> None:
|
|
"""Test Synology DSM fan speed mode select entity."""
|
|
with (
|
|
patch(
|
|
"homeassistant.components.synology_dsm.common.SynologyDSM",
|
|
return_value=mock_dsm,
|
|
),
|
|
patch("homeassistant.components.synology_dsm.PLATFORMS", ["select"]),
|
|
):
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: HOST,
|
|
CONF_PORT: PORT,
|
|
CONF_SSL: USE_SSL,
|
|
CONF_USERNAME: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
CONF_MAC: MACS[0],
|
|
},
|
|
unique_id=SERIAL,
|
|
)
|
|
entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("fan_speed", "fan_speed_parameter"),
|
|
[
|
|
("full_speed", FanSpeed.FULL),
|
|
("cool", FanSpeed.COOL),
|
|
("quiet", FanSpeed.QUIET),
|
|
("low_power", FanSpeed.QUIET_STOP),
|
|
],
|
|
)
|
|
async def test_fan_speed_select_option(
|
|
hass: HomeAssistant,
|
|
mock_dsm: MagicMock,
|
|
fan_speed: str,
|
|
fan_speed_parameter: FanSpeed,
|
|
) -> None:
|
|
"""Test selecting a fan speed mode option."""
|
|
with (
|
|
patch(
|
|
"homeassistant.components.synology_dsm.common.SynologyDSM",
|
|
return_value=mock_dsm,
|
|
),
|
|
patch("homeassistant.components.synology_dsm.PLATFORMS", ["select"]),
|
|
):
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: HOST,
|
|
CONF_PORT: PORT,
|
|
CONF_SSL: USE_SSL,
|
|
CONF_USERNAME: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
CONF_MAC: MACS[0],
|
|
},
|
|
unique_id=SERIAL,
|
|
)
|
|
entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
await hass.services.async_call(
|
|
SELECT_DOMAIN,
|
|
SERVICE_SELECT_OPTION,
|
|
{
|
|
ATTR_ENTITY_ID: "select.nas_meontheinternet_com_fan_speed_mode",
|
|
ATTR_OPTION: fan_speed,
|
|
},
|
|
blocking=True,
|
|
)
|
|
assert mock_dsm.hardware.set_fan_speed.call_args[0][0] == fan_speed_parameter
|
|
|
|
|
|
async def test_fan_speed_supported_option(
|
|
hass: HomeAssistant,
|
|
entity_registry: er.EntityRegistry,
|
|
snapshot: SnapshotAssertion,
|
|
mock_dsm: MagicMock,
|
|
) -> None:
|
|
"""Test selecting a fan speed mode option."""
|
|
with (
|
|
patch(
|
|
"homeassistant.components.synology_dsm.common.SynologyDSM",
|
|
return_value=mock_dsm,
|
|
),
|
|
patch("homeassistant.components.synology_dsm.PLATFORMS", ["select"]),
|
|
):
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: HOST,
|
|
CONF_PORT: PORT,
|
|
CONF_SSL: USE_SSL,
|
|
CONF_USERNAME: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
CONF_MAC: MACS[0],
|
|
},
|
|
unique_id=SERIAL,
|
|
)
|
|
entry.add_to_hass(hass)
|
|
|
|
mock_dsm.hardware.supported_fan_speeds = [FanSpeed.FULL, FanSpeed.COOL]
|
|
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|