mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 01:08:12 +00:00
Add available tones property to siren entity description (#70216)
* Fix siren entity description and available tones property * Add test * Fix bug * Add coverage
This commit is contained in:
parent
5e50a8abd5
commit
c390834ae4
@ -152,12 +152,14 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
class SirenEntityDescription(ToggleEntityDescription):
|
||||
"""A class that describes siren entities."""
|
||||
|
||||
available_tones: list[int | str] | dict[int, str] | None = None
|
||||
|
||||
|
||||
class SirenEntity(ToggleEntity):
|
||||
"""Representation of a siren device."""
|
||||
|
||||
entity_description: SirenEntityDescription
|
||||
_attr_available_tones: list[int | str] | dict[int, str] | None = None
|
||||
_attr_available_tones: list[int | str] | dict[int, str] | None
|
||||
|
||||
@final
|
||||
@property
|
||||
@ -180,4 +182,8 @@ class SirenEntity(ToggleEntity):
|
||||
|
||||
Requires SirenEntityFeature.TONES.
|
||||
"""
|
||||
return self._attr_available_tones
|
||||
if hasattr(self, "_attr_available_tones"):
|
||||
return self._attr_available_tones
|
||||
if hasattr(self, "entity_description"):
|
||||
return self.entity_description.available_tones
|
||||
return None
|
||||
|
@ -3,7 +3,11 @@ from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.siren import SirenEntity, process_turn_on_params
|
||||
from homeassistant.components.siren import (
|
||||
SirenEntity,
|
||||
SirenEntityDescription,
|
||||
process_turn_on_params,
|
||||
)
|
||||
from homeassistant.components.siren.const import SirenEntityFeature
|
||||
|
||||
|
||||
@ -12,10 +16,20 @@ class MockSirenEntity(SirenEntity):
|
||||
|
||||
_attr_is_on = True
|
||||
|
||||
def __init__(self, supported_features=0, available_tones=None):
|
||||
def __init__(
|
||||
self,
|
||||
supported_features=0,
|
||||
available_tones_as_attr=None,
|
||||
available_tones_in_desc=None,
|
||||
):
|
||||
"""Initialize mock siren entity."""
|
||||
self._attr_supported_features = supported_features
|
||||
self._attr_available_tones = available_tones
|
||||
if available_tones_as_attr is not None:
|
||||
self._attr_available_tones = available_tones_as_attr
|
||||
elif available_tones_in_desc is not None:
|
||||
self.entity_description = SirenEntityDescription(
|
||||
"mock", available_tones=available_tones_in_desc
|
||||
)
|
||||
|
||||
|
||||
async def test_sync_turn_on(hass):
|
||||
@ -50,11 +64,23 @@ async def test_no_available_tones(hass):
|
||||
|
||||
async def test_available_tones_list(hass):
|
||||
"""Test that valid tones from tone list will get passed in."""
|
||||
siren = MockSirenEntity(SirenEntityFeature.TONES, ["a", "b"])
|
||||
siren = MockSirenEntity(
|
||||
SirenEntityFeature.TONES, available_tones_as_attr=["a", "b"]
|
||||
)
|
||||
siren.hass = hass
|
||||
assert process_turn_on_params(siren, {"tone": "a"}) == {"tone": "a"}
|
||||
|
||||
|
||||
async def test_available_tones(hass):
|
||||
"""Test different available tones scenarios."""
|
||||
siren = MockSirenEntity(
|
||||
SirenEntityFeature.TONES, available_tones_in_desc=["a", "b"]
|
||||
)
|
||||
assert siren.available_tones == ["a", "b"]
|
||||
siren = MockSirenEntity(SirenEntityFeature.TONES)
|
||||
assert siren.available_tones is None
|
||||
|
||||
|
||||
async def test_available_tones_dict(hass):
|
||||
"""Test that valid tones from available_tones dict will get passed in."""
|
||||
siren = MockSirenEntity(SirenEntityFeature.TONES, {1: "a", 2: "b"})
|
||||
|
Loading…
x
Reference in New Issue
Block a user