diff --git a/homeassistant/components/alexa/capabilities.py b/homeassistant/components/alexa/capabilities.py index eba59e92cd4..94cf41d530b 100644 --- a/homeassistant/components/alexa/capabilities.py +++ b/homeassistant/components/alexa/capabilities.py @@ -749,6 +749,13 @@ class AlexaInputController(AlexaCapability): source_list = self.entity.attributes.get( media_player.ATTR_INPUT_SOURCE_LIST, [] ) + input_list = AlexaInputController.get_valid_inputs(source_list) + + return input_list + + @staticmethod + def get_valid_inputs(source_list): + """Return list of supported inputs.""" input_list = [] for source in source_list: formatted_source = ( diff --git a/homeassistant/components/alexa/entities.py b/homeassistant/components/alexa/entities.py index 8801936b35b..b10f11e2bbc 100644 --- a/homeassistant/components/alexa/entities.py +++ b/homeassistant/components/alexa/entities.py @@ -526,7 +526,13 @@ class MediaPlayerCapabilities(AlexaEntity): yield AlexaSeekController(self.entity) if supported & media_player.SUPPORT_SELECT_SOURCE: - yield AlexaInputController(self.entity) + inputs = AlexaInputController.get_valid_inputs( + self.entity.attributes.get( + media_player.const.ATTR_INPUT_SOURCE_LIST, [] + ) + ) + if len(inputs) > 0: + yield AlexaInputController(self.entity) if supported & media_player.const.SUPPORT_PLAY_MEDIA: yield AlexaChannelController(self.entity) diff --git a/tests/components/alexa/test_smart_home.py b/tests/components/alexa/test_smart_home.py index 3e8e87f62c9..a714b69461c 100644 --- a/tests/components/alexa/test_smart_home.py +++ b/tests/components/alexa/test_smart_home.py @@ -887,6 +887,7 @@ async def test_media_player(hass): | SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET, "volume_level": 0.75, + "source_list": ["hdmi", "tv"], }, ) appliance = await discovery_test(device, hass) @@ -1047,7 +1048,6 @@ async def test_media_player_power(hass): "Alexa", "Alexa.ChannelController", "Alexa.EndpointHealth", - "Alexa.InputController", "Alexa.PlaybackController", "Alexa.PlaybackStateReporter", "Alexa.PowerController", @@ -1176,6 +1176,41 @@ async def test_media_player_inputs(hass): assert call.data["source"] == "tv" +async def test_media_player_no_supported_inputs(hass): + """Test media player discovery with no supported inputs.""" + device = ( + "media_player.test_no_inputs", + "off", + { + "friendly_name": "Test media player", + "supported_features": SUPPORT_SELECT_SOURCE, + "volume_level": 0.75, + "source_list": [ + "foo", + "foo_2", + "vcr", + "betamax", + "record_player", + "f.m.", + "a.m.", + "tape_deck", + "laser_disc", + "hd_dvd", + ], + }, + ) + appliance = await discovery_test(device, hass) + + assert appliance["endpointId"] == "media_player#test_no_inputs" + assert appliance["displayCategories"][0] == "TV" + assert appliance["friendlyName"] == "Test media player" + + # Assert Alexa.InputController is not in capabilities list. + assert_endpoint_capabilities( + appliance, "Alexa", "Alexa.EndpointHealth", "Alexa.PowerController" + ) + + async def test_media_player_speaker(hass): """Test media player with speaker interface.""" device = (