"""Fixtures for Bose SoundTouch integration tests.""" import pytest from requests_mock import Mocker from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN from homeassistant.components.soundtouch.const import DOMAIN from homeassistant.const import CONF_HOST, CONF_NAME from tests.common import MockConfigEntry, load_fixture DEVICE_1_ID = "020000000001" DEVICE_2_ID = "020000000002" DEVICE_1_IP = "192.168.42.1" DEVICE_2_IP = "192.168.42.2" DEVICE_1_URL = f"http://{DEVICE_1_IP}:8090" DEVICE_2_URL = f"http://{DEVICE_2_IP}:8090" DEVICE_1_NAME = "My SoundTouch 1" DEVICE_2_NAME = "My SoundTouch 2" DEVICE_1_ENTITY_ID = f"{MEDIA_PLAYER_DOMAIN}.my_soundtouch_1" DEVICE_2_ENTITY_ID = f"{MEDIA_PLAYER_DOMAIN}.my_soundtouch_2" @pytest.fixture def device1_config() -> MockConfigEntry: """Mock SoundTouch device 1 config entry.""" return MockConfigEntry( domain=DOMAIN, unique_id=DEVICE_1_ID, data={ CONF_HOST: DEVICE_1_IP, CONF_NAME: "", }, ) @pytest.fixture def device2_config() -> MockConfigEntry: """Mock SoundTouch device 2 config entry.""" return MockConfigEntry( domain=DOMAIN, unique_id=DEVICE_2_ID, data={ CONF_HOST: DEVICE_2_IP, CONF_NAME: "", }, ) @pytest.fixture(scope="session") def device1_info() -> str: """Load SoundTouch device 1 info response and return it.""" return load_fixture("soundtouch/device1_info.xml") @pytest.fixture(scope="session") def device1_now_playing_aux() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_aux.xml") @pytest.fixture(scope="session") def device1_now_playing_bluetooth() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_bluetooth.xml") @pytest.fixture(scope="session") def device1_now_playing_radio() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_radio.xml") @pytest.fixture(scope="session") def device1_now_playing_standby() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_standby.xml") @pytest.fixture(scope="session") def device1_now_playing_upnp() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_upnp.xml") @pytest.fixture(scope="session") def device1_now_playing_upnp_paused() -> str: """Load SoundTouch device 1 now_playing response and return it.""" return load_fixture("soundtouch/device1_now_playing_upnp_paused.xml") @pytest.fixture(scope="session") def device1_presets() -> str: """Load SoundTouch device 1 presets response and return it.""" return load_fixture("soundtouch/device1_presets.xml") @pytest.fixture(scope="session") def device1_volume() -> str: """Load SoundTouch device 1 volume response and return it.""" return load_fixture("soundtouch/device1_volume.xml") @pytest.fixture(scope="session") def device1_volume_muted() -> str: """Load SoundTouch device 1 volume response and return it.""" return load_fixture("soundtouch/device1_volume_muted.xml") @pytest.fixture(scope="session") def device1_zone_master() -> str: """Load SoundTouch device 1 getZone response and return it.""" return load_fixture("soundtouch/device1_getZone_master.xml") @pytest.fixture(scope="session") def device2_info() -> str: """Load SoundTouch device 2 info response and return it.""" return load_fixture("soundtouch/device2_info.xml") @pytest.fixture(scope="session") def device2_volume() -> str: """Load SoundTouch device 2 volume response and return it.""" return load_fixture("soundtouch/device2_volume.xml") @pytest.fixture(scope="session") def device2_now_playing_standby() -> str: """Load SoundTouch device 2 now_playing response and return it.""" return load_fixture("soundtouch/device2_now_playing_standby.xml") @pytest.fixture(scope="session") def device2_zone_slave() -> str: """Load SoundTouch device 2 getZone response and return it.""" return load_fixture("soundtouch/device2_getZone_slave.xml") @pytest.fixture(scope="session") def zone_empty() -> str: """Load empty SoundTouch getZone response and return it.""" return load_fixture("soundtouch/getZone_empty.xml") @pytest.fixture def device1_requests_mock( requests_mock: Mocker, device1_info: str, device1_volume: str, device1_presets: str, device1_zone_master: str, ) -> Mocker: """Mock SoundTouch device 1 API - base URLs.""" requests_mock.get(f"{DEVICE_1_URL}/info", text=device1_info) requests_mock.get(f"{DEVICE_1_URL}/volume", text=device1_volume) requests_mock.get(f"{DEVICE_1_URL}/presets", text=device1_presets) requests_mock.get(f"{DEVICE_1_URL}/getZone", text=device1_zone_master) return requests_mock @pytest.fixture def device1_requests_mock_standby( device1_requests_mock: Mocker, device1_now_playing_standby: str, ): """Mock SoundTouch device 1 API - standby.""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_standby ) @pytest.fixture def device1_requests_mock_aux( device1_requests_mock: Mocker, device1_now_playing_aux: str, ): """Mock SoundTouch device 1 API - playing AUX.""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_aux ) @pytest.fixture def device1_requests_mock_bluetooth( device1_requests_mock: Mocker, device1_now_playing_bluetooth: str, ): """Mock SoundTouch device 1 API - playing bluetooth.""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_bluetooth ) @pytest.fixture def device1_requests_mock_radio( device1_requests_mock: Mocker, device1_now_playing_radio: str, ): """Mock SoundTouch device 1 API - playing radio.""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_radio ) @pytest.fixture def device1_requests_mock_upnp( device1_requests_mock: Mocker, device1_now_playing_upnp: str, ): """Mock SoundTouch device 1 API - playing UPNP.""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_upnp ) @pytest.fixture def device1_requests_mock_upnp_paused( device1_requests_mock: Mocker, device1_now_playing_upnp_paused: str, ): """Mock SoundTouch device 1 API - playing UPNP (paused).""" device1_requests_mock.get( f"{DEVICE_1_URL}/now_playing", text=device1_now_playing_upnp_paused ) @pytest.fixture def device1_requests_mock_key( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - key endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/key") @pytest.fixture def device1_requests_mock_volume( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - volume endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/volume") @pytest.fixture def device1_requests_mock_select( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - select endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/select") @pytest.fixture def device1_requests_mock_set_zone( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - setZone endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/setZone") @pytest.fixture def device1_requests_mock_add_zone_slave( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - addZoneSlave endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/addZoneSlave") @pytest.fixture def device1_requests_mock_remove_zone_slave( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - removeZoneSlave endpoint.""" return device1_requests_mock.post(f"{DEVICE_1_URL}/removeZoneSlave") @pytest.fixture def device1_requests_mock_dlna( device1_requests_mock: Mocker, ): """Mock SoundTouch device 1 API - DLNA endpoint.""" return device1_requests_mock.post(f"http://{DEVICE_1_IP}:8091/AVTransport/Control") @pytest.fixture def device2_requests_mock_standby( requests_mock: Mocker, device2_info: str, device2_volume: str, device2_now_playing_standby: str, device2_zone_slave: str, ) -> Mocker: """Mock SoundTouch device 2 API.""" requests_mock.get(f"{DEVICE_2_URL}/info", text=device2_info) requests_mock.get(f"{DEVICE_2_URL}/volume", text=device2_volume) requests_mock.get(f"{DEVICE_2_URL}/now_playing", text=device2_now_playing_standby) requests_mock.get(f"{DEVICE_2_URL}/getZone", text=device2_zone_slave) return requests_mock