From ca3a22b5a3e173f12fee0d87272bcec278ee100a Mon Sep 17 00:00:00 2001
From: Raman Gupta <7243222+raman325@users.noreply.github.com>
Date: Sun, 22 Mar 2020 12:34:00 -0400
Subject: [PATCH] Filter out duplicate app names from vizio's source list
 (#33051)

* filter out additional app config names from pyvizios app list

* add test

* change where filtering app list occurs

* fix test

* fix mistake in change

* hopefully final test fix

* fix test scenario that unknowingly broke with test change
---
 homeassistant/components/vizio/media_player.py |  6 +++++-
 tests/components/vizio/const.py                |  3 +--
 tests/components/vizio/test_media_player.py    | 11 +++++++----
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py
index a46a4c9a2d1..d97a82ca144 100644
--- a/homeassistant/components/vizio/media_player.py
+++ b/homeassistant/components/vizio/media_player.py
@@ -335,7 +335,11 @@ class VizioDevice(MediaPlayerDevice):
                     if _input not in INPUT_APPS
                 ],
                 *self._available_apps,
-                *self._get_additional_app_names(),
+                *[
+                    app
+                    for app in self._get_additional_app_names()
+                    if app not in self._available_apps
+                ],
             ]
 
         return self._available_inputs
diff --git a/tests/components/vizio/const.py b/tests/components/vizio/const.py
index 2cb9103c4d9..25abd01d53b 100644
--- a/tests/components/vizio/const.py
+++ b/tests/components/vizio/const.py
@@ -70,10 +70,9 @@ INPUT_LIST = ["HDMI", "USB", "Bluetooth", "AUX"]
 CURRENT_APP = "Hulu"
 APP_LIST = ["Hulu", "Netflix"]
 INPUT_LIST_WITH_APPS = INPUT_LIST + ["CAST"]
-CUSTOM_APP_NAME = "APP3"
 CUSTOM_CONFIG = {CONF_APP_ID: "test", CONF_MESSAGE: None, CONF_NAME_SPACE: 10}
 ADDITIONAL_APP_CONFIG = {
-    "name": CUSTOM_APP_NAME,
+    "name": CURRENT_APP,
     CONF_CONFIG: CUSTOM_CONFIG,
 }
 
diff --git a/tests/components/vizio/test_media_player.py b/tests/components/vizio/test_media_player.py
index 68366e8e98b..ebeef1661ed 100644
--- a/tests/components/vizio/test_media_player.py
+++ b/tests/components/vizio/test_media_player.py
@@ -58,7 +58,6 @@ from .const import (
     APP_LIST,
     CURRENT_APP,
     CURRENT_INPUT,
-    CUSTOM_APP_NAME,
     CUSTOM_CONFIG,
     ENTITY_ID,
     INPUT_LIST,
@@ -180,11 +179,15 @@ async def _test_setup_with_apps(
                 + [
                     app["name"]
                     for app in device_config[CONF_APPS][CONF_ADDITIONAL_CONFIGS]
+                    if app["name"] not in APP_LIST
                 ]
             )
         else:
             list_to_test = list(INPUT_LIST_WITH_APPS + APP_LIST)
 
+        if CONF_ADDITIONAL_CONFIGS in device_config.get(CONF_APPS, {}):
+            assert attr["source_list"].count(CURRENT_APP) == 1
+
         for app_to_remove in INPUT_APPS:
             if app_to_remove in list_to_test:
                 list_to_test.remove(app_to_remove)
@@ -471,14 +474,14 @@ async def test_setup_with_apps_additional_apps_config(
         hass,
         "launch_app",
         SERVICE_SELECT_SOURCE,
-        {ATTR_INPUT_SOURCE: CURRENT_APP},
-        CURRENT_APP,
+        {ATTR_INPUT_SOURCE: "Netflix"},
+        "Netflix",
     )
     await _test_service(
         hass,
         "launch_app_config",
         SERVICE_SELECT_SOURCE,
-        {ATTR_INPUT_SOURCE: CUSTOM_APP_NAME},
+        {ATTR_INPUT_SOURCE: CURRENT_APP},
         **CUSTOM_CONFIG,
     )
 
-- 
GitLab