"""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)