mirror of https://github.com/home-assistant/core
97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
"""Tests for the Sonos number platform."""
|
|
|
|
from unittest.mock import PropertyMock, patch
|
|
|
|
from homeassistant.components.number import DOMAIN as NUMBER_DOMAIN, SERVICE_SET_VALUE
|
|
from homeassistant.const import ATTR_ENTITY_ID
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
CROSSOVER_ENTITY = "number.zone_a_sub_crossover_frequency"
|
|
|
|
|
|
async def test_number_entities(
|
|
hass: HomeAssistant, async_autosetup_sonos, soco, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test number entities."""
|
|
balance_number = entity_registry.entities["number.zone_a_balance"]
|
|
balance_state = hass.states.get(balance_number.entity_id)
|
|
assert balance_state.state == "39"
|
|
|
|
bass_number = entity_registry.entities["number.zone_a_bass"]
|
|
bass_state = hass.states.get(bass_number.entity_id)
|
|
assert bass_state.state == "1"
|
|
|
|
treble_number = entity_registry.entities["number.zone_a_treble"]
|
|
treble_state = hass.states.get(treble_number.entity_id)
|
|
assert treble_state.state == "-1"
|
|
|
|
audio_delay_number = entity_registry.entities["number.zone_a_audio_delay"]
|
|
audio_delay_state = hass.states.get(audio_delay_number.entity_id)
|
|
assert audio_delay_state.state == "2"
|
|
|
|
surround_level_number = entity_registry.entities["number.zone_a_surround_level"]
|
|
surround_level_state = hass.states.get(surround_level_number.entity_id)
|
|
assert surround_level_state.state == "3"
|
|
|
|
music_surround_level_number = entity_registry.entities[
|
|
"number.zone_a_music_surround_level"
|
|
]
|
|
music_surround_level_state = hass.states.get(music_surround_level_number.entity_id)
|
|
assert music_surround_level_state.state == "4"
|
|
|
|
with patch.object(
|
|
type(soco), "audio_delay", new_callable=PropertyMock
|
|
) as mock_audio_delay:
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: audio_delay_number.entity_id, "value": 3},
|
|
blocking=True,
|
|
)
|
|
mock_audio_delay.assert_called_once_with(3)
|
|
|
|
sub_gain_number = entity_registry.entities["number.zone_a_sub_gain"]
|
|
sub_gain_state = hass.states.get(sub_gain_number.entity_id)
|
|
assert sub_gain_state.state == "5"
|
|
|
|
with patch.object(
|
|
type(soco), "sub_gain", new_callable=PropertyMock
|
|
) as mock_sub_gain:
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: sub_gain_number.entity_id, "value": -8},
|
|
blocking=True,
|
|
)
|
|
mock_sub_gain.assert_called_once_with(-8)
|
|
|
|
# sub_crossover is only available on Sonos Amp devices, see test_amp_number_entities
|
|
assert CROSSOVER_ENTITY not in entity_registry.entities
|
|
|
|
|
|
async def test_amp_number_entities(
|
|
hass: HomeAssistant, async_setup_sonos, soco, entity_registry: er.EntityRegistry
|
|
) -> None:
|
|
"""Test the sub_crossover feature only available on Sonos Amp devices.
|
|
|
|
The sub_crossover value will be None on all other device types.
|
|
"""
|
|
with patch.object(soco, "sub_crossover", 50):
|
|
await async_setup_sonos()
|
|
|
|
sub_crossover_number = entity_registry.entities[CROSSOVER_ENTITY]
|
|
sub_crossover_state = hass.states.get(sub_crossover_number.entity_id)
|
|
assert sub_crossover_state.state == "50"
|
|
|
|
with patch.object(
|
|
type(soco), "sub_crossover", new_callable=PropertyMock
|
|
) as mock_sub_crossover:
|
|
await hass.services.async_call(
|
|
NUMBER_DOMAIN,
|
|
SERVICE_SET_VALUE,
|
|
{ATTR_ENTITY_ID: sub_crossover_number.entity_id, "value": 110},
|
|
blocking=True,
|
|
)
|
|
mock_sub_crossover.assert_called_once_with(110)
|