def test_play_everywhere(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_create_zone): """Test play everywhere.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # one master, one slave => create zone self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_1"}, True) assert mocked_create_zone.call_count == 1 # unknown master. create zone is must not be called self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_X"}, True) assert mocked_create_zone.call_count == 1 # no slaves, create zone must not be called all_devices.pop(1) self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_1"}, True) assert mocked_create_zone.call_count == 1
def test_media_commands(self, mocked_soundtouch_device): """Test supported media commands.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].supported_features == 17853
def test_ensure_setup_config(self, mocked_soundtouch_device): """Test setup OK with custom config.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert len(all_devices) == 1 assert all_devices[0].name == 'soundtouch' assert all_devices[0].config['port'] == 8090 assert mocked_soundtouch_device.call_count == 1
def test_mute(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_mute): """Test mute volume.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].mute_volume(None) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 2 assert mocked_mute.call_count == 1
def test_play_media_url(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_play_url): """Test play preset 1.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].play_media("MUSIC", "http://fqdn/file.mp3") mocked_play_url.assert_called_with("http://fqdn/file.mp3")
def test_update(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test update device state.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 self.hass.data[soundtouch.DATA_SOUNDTOUCH][0].update() assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2
def test_play_pause_play(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_play_pause): """Test play/pause.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].media_play_pause() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 1 assert mocked_play_pause.call_count == 1
def test_is_muted(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test device volume is muted.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].is_volume_muted is True
def test_set_volume_level(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_set_volume): """Test set volume level.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].set_volume_level(0.17) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 2 mocked_set_volume.assert_called_with(17)
def test_should_turn_on(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_power_on): """Test device is turned on.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].turn_on() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 1 assert mocked_power_on.call_count == 1
def test_get_state_pause(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test state device is paused.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].state == STATE_PAUSED
def test_get_volume_level(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test volume level.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].volume_level == 0.12
def test_remove_zone_slave( self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_remove_zone_slave, ): """Test adding a slave to an existing zone.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # remove one slave self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_REMOVE_ZONE_SLAVE, { "master": "media_player.entity_1", "slaves": ["media_player.entity_2"] }, True, ) assert mocked_remove_zone_slave.call_count == 1 # unknown master. add zone slave is not called self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_REMOVE_ZONE_SLAVE, { "master": "media_player.entity_X", "slaves": ["media_player.entity_2"] }, True, ) assert mocked_remove_zone_slave.call_count == 1 # no slave to add, add zone slave is not called self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_REMOVE_ZONE_SLAVE, { "master": "media_player.entity_1", "slaves": [] }, True, ) assert mocked_remove_zone_slave.call_count == 1
def test_playing_unknown_media(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test playing media info.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].media_title is None
def test_volume_down(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_volume_down): """Test volume down.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].volume_down() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 2 assert mocked_volume_down.call_count == 1
def test_play_media_url(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_play_url): """Test play preset 1.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].play_media('MUSIC', "http://fqdn/file.mp3") mocked_play_url.assert_called_with("http://fqdn/file.mp3")
def test_mute(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_mute): """Test mute volume.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].mute_volume(None) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 2 assert mocked_mute.call_count == 1
def test_volume_down(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_volume_down): """Test volume down.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].volume_down() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 2 assert mocked_volume_down.call_count == 1
def test_should_turn_on(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_power_on): """Test device is turned on.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].turn_on() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 1 assert mocked_power_on.call_count == 1
def test_play_pause_play(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_play_pause): """Test play/pause.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].media_play_pause() assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 1 assert mocked_play_pause.call_count == 1
def test_update(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test update device state.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 self.hass.data[soundtouch.DATA_SOUNDTOUCH][0].update() assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2
def test_create_zone(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_create_zone): """Test creating a zone.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # one master, one slave => create zone self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, { "master": "media_player.entity_1", "slaves": ["media_player.entity_2"] }, True, ) assert mocked_create_zone.call_count == 1 # unknown master. create zone is must not be called self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, { "master": "media_player.entity_X", "slaves": ["media_player.entity_2"] }, True, ) assert mocked_create_zone.call_count == 1 # no slaves, create zone must not be called self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, { "master": "media_player.entity_X", "slaves": [] }, True, ) assert mocked_create_zone.call_count == 1
def test_ensure_setup_discovery(self, mocked_soundtouch_device): """Test setup with discovery.""" new_device = {"port": "8090", "host": "192.168.1.1", "properties": {}, "hostname": "hostname.local"} soundtouch.setup_platform(self.hass, None, mock.MagicMock(), new_device) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert len(all_devices) == 1 assert all_devices[0].config['port'] == 8090 assert all_devices[0].config['host'] == '192.168.1.1' assert mocked_soundtouch_device.call_count == 1
def test_play_media(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_presets, mocked_select_preset): """Test play preset 1.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].play_media('PLAYLIST', 1) assert mocked_presets.call_count == 1 assert mocked_select_preset.call_count == 1 all_devices[0].play_media('PLAYLIST', 2) assert mocked_presets.call_count == 2 assert mocked_select_preset.call_count == 1
def test_ensure_setup_discovery(self, mocked_soundtouch_device): """Test setup with discovery.""" new_device = { "port": "8090", "host": "192.168.1.1", "properties": {}, "hostname": "hostname.local" } soundtouch.setup_platform(self.hass, None, mock.MagicMock(), new_device) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert len(all_devices) == 1 assert all_devices[0].config['port'] == 8090 assert all_devices[0].config['host'] == '192.168.1.1' assert mocked_soundtouch_device.call_count == 1
def test_next_previous_track(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_next_track, mocked_previous_track): """Test next/previous track.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].media_next_track() assert mocked_status.call_count == 2 assert mocked_next_track.call_count == 1 all_devices[0].media_previous_track() assert mocked_status.call_count == 3 assert mocked_previous_track.call_count == 1
def test_playing_radio(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test playing radio info.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].state == STATE_PLAYING assert all_devices[0].media_image_url == "image.url" assert all_devices[0].media_title == "station" assert all_devices[0].media_track is None assert all_devices[0].media_artist is None assert all_devices[0].media_album_name is None assert all_devices[0].media_duration is None
def test_play_media(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_presets, mocked_select_preset): """Test play preset 1.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].play_media('PLAYLIST', 1) assert mocked_presets.call_count == 1 assert mocked_select_preset.call_count == 1 all_devices[0].play_media('PLAYLIST', 2) assert mocked_presets.call_count == 2 assert mocked_select_preset.call_count == 1
def test_playing_radio(self, mocked_soundtouch_device, mocked_status, mocked_volume): """Test playing radio info.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert all_devices[0].state == STATE_PLAYING assert all_devices[0].media_image_url == "image.url" assert all_devices[0].media_title == "station" assert all_devices[0].media_track is None assert all_devices[0].media_artist is None assert all_devices[0].media_album_name is None assert all_devices[0].media_duration is None
def test_next_previous_track(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_next_track, mocked_previous_track): """Test next/previous track.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] assert mocked_soundtouch_device.call_count == 1 assert mocked_status.call_count == 1 assert mocked_volume.call_count == 1 all_devices[0].media_next_track() assert mocked_status.call_count == 2 assert mocked_next_track.call_count == 1 all_devices[0].media_previous_track() assert mocked_status.call_count == 3 assert mocked_previous_track.call_count == 1
def test_play_everywhere(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_create_zone): """Test play everywhere.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # one master, one slave => create zone self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_1"}, True, ) assert mocked_create_zone.call_count == 1 # unknown master. create zone is must not be called self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_X"}, True, ) assert mocked_create_zone.call_count == 1 # no slaves, create zone must not be called all_devices.pop(1) self.hass.services.call( soundtouch.DOMAIN, soundtouch.SERVICE_PLAY_EVERYWHERE, {"master": "media_player.entity_1"}, True, ) assert mocked_create_zone.call_count == 1
def test_ensure_setup_discovery_no_duplicate(self, mocked_soundtouch_device): """Test setup OK if device already exists.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 1 new_device = { "port": "8090", "host": "192.168.1.1", "properties": {}, "hostname": "hostname.local" } soundtouch.setup_platform( self.hass, None, mock.MagicMock(), new_device # New device ) assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 2 existing_device = { "port": "8090", "host": "192.168.0.1", "properties": {}, "hostname": "hostname.local" } soundtouch.setup_platform( self.hass, None, mock.MagicMock(), existing_device # Existing device ) assert mocked_soundtouch_device.call_count == 2 assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 2
def test_ensure_setup_discovery_no_duplicate(self, mocked_soundtouch_device): """Test setup OK if device already exists.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 1 new_device = {"port": "8090", "host": "192.168.1.1", "properties": {}, "hostname": "hostname.local"} soundtouch.setup_platform(self.hass, None, mock.MagicMock(), new_device # New device ) assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 2 existing_device = {"port": "8090", "host": "192.168.0.1", "properties": {}, "hostname": "hostname.local"} soundtouch.setup_platform(self.hass, None, mock.MagicMock(), existing_device # Existing device ) assert mocked_soundtouch_device.call_count == 2 assert len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]) == 2
def test_add_zone_slave(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_add_zone_slave): """Test removing a slave from a zone.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # add one slave self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_ADD_ZONE_SLAVE, {"master": "media_player.entity_1", "slaves": ["media_player.entity_2"]}, True) assert mocked_add_zone_slave.call_count == 1 # unknown master. add zone slave is not called self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_ADD_ZONE_SLAVE, {"master": "media_player.entity_X", "slaves": ["media_player.entity_2"]}, True) assert mocked_add_zone_slave.call_count == 1 # no slave to add, add zone slave is not called self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_ADD_ZONE_SLAVE, {"master": "media_player.entity_1", "slaves": ["media_player.entity_X"]}, True) assert mocked_add_zone_slave.call_count == 1
def test_create_zone(self, mocked_soundtouch_device, mocked_status, mocked_volume, mocked_create_zone): """Test creating a zone.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] all_devices[0].entity_id = "media_player.entity_1" all_devices[1].entity_id = "media_player.entity_2" assert mocked_soundtouch_device.call_count == 2 assert mocked_status.call_count == 2 assert mocked_volume.call_count == 2 # one master, one slave => create zone self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, {"master": "media_player.entity_1", "slaves": ["media_player.entity_2"]}, True) assert mocked_create_zone.call_count == 1 # unknown master. create zone is must not be called self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, {"master": "media_player.entity_X", "slaves": ["media_player.entity_2"]}, True) assert mocked_create_zone.call_count == 1 # no slaves, create zone must not be called self.hass.services.call(soundtouch.DOMAIN, soundtouch.SERVICE_CREATE_ZONE, {"master": "media_player.entity_X", "slaves": []}, True) assert mocked_create_zone.call_count == 1