1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-02 08:26:41 +01:00
Files
core/tests/components/gardena_bluetooth/test_select.py

135 lines
3.9 KiB
Python

"""Test Gardena Bluetooth sensor."""
from collections.abc import Awaitable, Callable
from unittest.mock import Mock, call
from gardena_bluetooth.const import (
AquaContour,
AquaContourPosition,
AquaContourWatering,
AquaContourWateringMode,
)
from habluetooth import BluetoothServiceInfo
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.select import (
DOMAIN as SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
)
from homeassistant.const import ATTR_ENTITY_ID, ATTR_OPTION, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import AQUA_CONTOUR_SERVICE_INFO, setup_entry
from tests.common import MockConfigEntry, snapshot_platform
@pytest.fixture
def mock_chars(mock_read_char_raw):
"""Mock data on device."""
mock_read_char_raw[AquaContourWatering.watering_active.uuid] = b"\x00"
return mock_read_char_raw
@pytest.mark.parametrize(
("service_info", "raw"),
[
pytest.param(
AQUA_CONTOUR_SERVICE_INFO,
{
AquaContourWatering.watering_active.uuid: AquaContourWatering.watering_active.encode(
0
),
AquaContour.operation_mode.uuid: AquaContour.operation_mode.encode(0),
AquaContourPosition.active_position.uuid: AquaContourPosition.active_position.encode(
0
),
},
id="aqua_contour",
),
],
)
async def test_setup(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
mock_read_char_raw: dict[str, bytes],
service_info: BluetoothServiceInfo,
raw: dict[str, bytes],
entity_registry: er.EntityRegistry,
) -> None:
"""Test setup creates expected entities."""
mock_read_char_raw.update(raw)
mock_entry = await setup_entry(
hass, platforms=[Platform.SELECT], service_info=service_info
)
await snapshot_platform(hass, entity_registry, snapshot, mock_entry.entry_id)
async def test_state_change(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
mock_read_char_raw: dict[str, bytes],
scan_step: Callable[[], Awaitable[None]],
) -> None:
"""Test setup creates expected entities."""
entity_id = "select.mock_title_watering"
mock_read_char_raw[AquaContourWatering.watering_active.uuid] = (
AquaContourWatering.watering_active.encode(AquaContourWateringMode.REST)
)
await setup_entry(
hass, platforms=[Platform.SELECT], service_info=AQUA_CONTOUR_SERVICE_INFO
)
state = hass.states.get(entity_id)
assert state
assert state.state == "rest"
mock_read_char_raw[AquaContourWatering.watering_active.uuid] = (
AquaContourWatering.watering_active.encode(AquaContourWateringMode.CONTOUR_1)
)
await scan_step()
state = hass.states.get(entity_id)
assert state
assert state.state == "contour_1"
async def test_select(
hass: HomeAssistant,
mock_entry: MockConfigEntry,
mock_client: Mock,
mock_read_char_raw: dict[str, bytes],
) -> None:
"""Test switching makes correct calls."""
mock_read_char_raw[AquaContourWatering.watering_active.uuid] = b"\x00"
entity_id = "select.mock_title_watering"
await setup_entry(
hass, platforms=[Platform.SELECT], service_info=AQUA_CONTOUR_SERVICE_INFO
)
assert hass.states.get(entity_id)
await hass.services.async_call(
SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
{ATTR_ENTITY_ID: entity_id, ATTR_OPTION: "rest"},
blocking=True,
)
await hass.services.async_call(
SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
{ATTR_ENTITY_ID: entity_id, ATTR_OPTION: "contour_3"},
blocking=True,
)
assert mock_client.write_char.mock_calls == [
call(AquaContourWatering.watering_active, 0),
call(AquaContourWatering.watering_active, 3),
]