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
Beispiel #4
0
 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
Beispiel #5
0
 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")
Beispiel #6
0
 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
Beispiel #7
0
 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
Beispiel #8
0
 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
Beispiel #9
0
 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)
Beispiel #10
0
 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
Beispiel #11
0
 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
Beispiel #13
0
    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
Beispiel #14
0
 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
Beispiel #15
0
 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
Beispiel #22
0
    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
Beispiel #24
0
 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
Beispiel #25
0
 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
Beispiel #26
0
 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
Beispiel #27
0
 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
Beispiel #31
0
    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
Beispiel #32
0
 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