Files
core/tests/components/togrill/test_select.py
Joakim Plate 7322bee4dd Add select entity to ToGrill (#151114)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-09-01 14:24:43 +02:00

173 lines
4.5 KiB
Python

"""Test select for ToGrill integration."""
from unittest.mock import Mock
import pytest
from syrupy.assertion import SnapshotAssertion
from togrill_bluetooth.packets import (
GrillType,
PacketA0Notify,
PacketA8Notify,
PacketA303Write,
Taste,
)
from homeassistant.components.select import (
ATTR_OPTION,
DOMAIN as SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
)
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import TOGRILL_SERVICE_INFO, setup_entry
from tests.common import MockConfigEntry, snapshot_platform
from tests.components.bluetooth import inject_bluetooth_service_info
@pytest.mark.parametrize(
"packets",
[
pytest.param([], id="no_data"),
pytest.param(
[
PacketA0Notify(
battery=45,
version_major=1,
version_minor=5,
function_type=1,
probe_count=2,
ambient=False,
alarm_interval=5,
alarm_sound=True,
),
PacketA8Notify(
probe=1,
alarm_type=0,
grill_type=1,
),
PacketA8Notify(
probe=2,
alarm_type=0,
taste=1,
),
PacketA8Notify(probe=2, alarm_type=None),
],
id="probes_with_different_data",
),
pytest.param(
[
PacketA8Notify(
probe=1,
alarm_type=0,
grill_type=99,
),
PacketA8Notify(
probe=2,
alarm_type=0,
taste=99,
),
],
id="probes_with_unknown_data",
),
],
)
async def test_setup(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
mock_entry: MockConfigEntry,
mock_client: Mock,
packets,
) -> None:
"""Test the setup."""
inject_bluetooth_service_info(hass, TOGRILL_SERVICE_INFO)
await setup_entry(hass, mock_entry, [Platform.SELECT])
for packet in packets:
mock_client.mocked_notify(packet)
await snapshot_platform(hass, entity_registry, snapshot, mock_entry.entry_id)
@pytest.mark.parametrize(
("packets", "entity_id", "value", "write_packet"),
[
pytest.param(
[
PacketA8Notify(
probe=1,
alarm_type=PacketA8Notify.AlarmType.TEMPERATURE_TARGET,
temperature_1=50.0,
),
],
"select.probe_1_grill_type",
"veal",
PacketA303Write(probe=1, grill_type=GrillType.VEAL, taste=None),
id="grill_type",
),
pytest.param(
[
PacketA8Notify(
probe=1,
alarm_type=PacketA8Notify.AlarmType.TEMPERATURE_TARGET,
grill_type=GrillType.BEEF,
),
],
"select.probe_1_taste",
"medium",
PacketA303Write(probe=1, grill_type=GrillType.BEEF, taste=Taste.MEDIUM),
id="taste",
),
pytest.param(
[
PacketA8Notify(
probe=1,
alarm_type=PacketA8Notify.AlarmType.TEMPERATURE_TARGET,
grill_type=GrillType.BEEF,
taste=Taste.MEDIUM,
),
],
"select.probe_1_taste",
"none",
PacketA303Write(probe=1, grill_type=GrillType.BEEF, taste=None),
id="taste_none",
),
],
)
async def test_set_option(
hass: HomeAssistant,
mock_entry: MockConfigEntry,
mock_client: Mock,
packets,
entity_id,
value,
write_packet,
) -> None:
"""Test the selection of option."""
inject_bluetooth_service_info(hass, TOGRILL_SERVICE_INFO)
await setup_entry(hass, mock_entry, [Platform.SELECT])
for packet in packets:
mock_client.mocked_notify(packet)
await hass.services.async_call(
SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
service_data={
ATTR_OPTION: value,
},
target={
ATTR_ENTITY_ID: entity_id,
},
blocking=True,
)
mock_client.write.assert_any_call(write_packet)