"""Tests for the arcam_fmj component.""" from unittest.mock import Mock, patch from arcam.fmj.client import Client from arcam.fmj.state import State import pytest from homeassistant.components.arcam_fmj.const import DEFAULT_NAME from homeassistant.components.arcam_fmj.media_player import ArcamFmj from homeassistant.const import CONF_HOST, CONF_PORT from tests.common import MockConfigEntry MOCK_HOST = "127.0.0.1" MOCK_PORT = 50000 MOCK_TURN_ON = { "service": "switch.turn_on", "data": {"entity_id": "switch.test"}, } MOCK_ENTITY_ID = "media_player.arcam_fmj_127_0_0_1_zone_1" MOCK_UUID = "456789abcdef" MOCK_UDN = f"uuid:01234567-89ab-cdef-0123-{MOCK_UUID}" MOCK_NAME = f"{DEFAULT_NAME} ({MOCK_HOST})" MOCK_CONFIG_ENTRY = {CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT} @pytest.fixture(name="client") def client_fixture(): """Get a mocked client.""" client = Mock(Client) client.host = MOCK_HOST client.port = MOCK_PORT return client @pytest.fixture(name="state_1") def state_1_fixture(client): """Get a mocked state.""" state = Mock(State) state.client = client state.zn = 1 state.get_power.return_value = True state.get_volume.return_value = 0.0 state.get_source_list.return_value = [] state.get_incoming_audio_format.return_value = (0, 0) state.get_mute.return_value = None state.get_decode_modes.return_value = [] return state @pytest.fixture(name="state_2") def state_2_fixture(client): """Get a mocked state.""" state = Mock(State) state.client = client state.zn = 2 state.get_power.return_value = True state.get_volume.return_value = 0.0 state.get_source_list.return_value = [] state.get_incoming_audio_format.return_value = (0, 0) state.get_mute.return_value = None state.get_decode_modes.return_value = [] return state @pytest.fixture(name="state") def state_fixture(state_1): """Get a mocked state.""" return state_1 @pytest.fixture(name="player") def player_fixture(hass, state): """Get standard player.""" player = ArcamFmj(MOCK_NAME, state, MOCK_UUID) player.entity_id = MOCK_ENTITY_ID player.hass = hass player.async_write_ha_state = Mock() return player @pytest.fixture(name="player_setup") async def player_setup_fixture(hass, state_1, state_2, client): """Get standard player.""" config_entry = MockConfigEntry( domain="arcam_fmj", data=MOCK_CONFIG_ENTRY, title=MOCK_NAME ) config_entry.add_to_hass(hass) def state_mock(cli, zone): if zone == 1: return state_1 if zone == 2: return state_2 with patch("homeassistant.components.arcam_fmj.Client", return_value=client), patch( "homeassistant.components.arcam_fmj.media_player.State", side_effect=state_mock ), patch("homeassistant.components.arcam_fmj._run_client", return_value=None): assert await hass.config_entries.async_setup(config_entry.entry_id) await hass.async_block_till_done() yield MOCK_ENTITY_ID