diff --git a/homeassistant/components/plex/server.py b/homeassistant/components/plex/server.py index e667a8a77ac..12398edfd59 100644 --- a/homeassistant/components/plex/server.py +++ b/homeassistant/components/plex/server.py @@ -144,11 +144,11 @@ class PlexServer: config_entry_update_needed = False def _connect_with_token(): - available_servers = [ - (x.name, x.clientIdentifier) - for x in self.account.resources() - if "server" in x.provides and x.presence + all_servers = [ + x for x in self.account.resources() if "server" in x.provides ] + servers = [x for x in all_servers if x.presence] or all_servers + available_servers = [(x.name, x.clientIdentifier) for x in servers] if not available_servers: raise NoServersFound diff --git a/tests/components/plex/conftest.py b/tests/components/plex/conftest.py index bd2fc6a7fa8..6ed8eaaa94a 100644 --- a/tests/components/plex/conftest.py +++ b/tests/components/plex/conftest.py @@ -239,7 +239,7 @@ def plextv_resources_base_fixture(): @pytest.fixture(name="plextv_resources", scope="session") def plextv_resources_fixture(plextv_resources_base): """Load default payload for plex.tv resources and return it.""" - return plextv_resources_base.format(second_server_enabled=0) + return plextv_resources_base.format(first_server_enabled=1, second_server_enabled=0) @pytest.fixture(name="plextv_shared_users", scope="session") diff --git a/tests/components/plex/test_config_flow.py b/tests/components/plex/test_config_flow.py index 72958fc10c0..45904588a10 100644 --- a/tests/components/plex/test_config_flow.py +++ b/tests/components/plex/test_config_flow.py @@ -210,7 +210,9 @@ async def test_multiple_servers_with_selection( requests_mock.get( "https://plex.tv/api/resources", - text=plextv_resources_base.format(second_server_enabled=1), + text=plextv_resources_base.format( + first_server_enabled=1, second_server_enabled=1 + ), ) with patch("plexauth.PlexAuth.initiate_auth"), patch( "plexauth.PlexAuth.token", return_value=MOCK_TOKEN @@ -248,6 +250,42 @@ async def test_multiple_servers_with_selection( assert result["data"][PLEX_SERVER_CONFIG][CONF_TOKEN] == MOCK_TOKEN +async def test_only_non_present_servers( + hass, + mock_plex_calls, + requests_mock, + plextv_resources_base, + current_request_with_host, +): + """Test creating an entry with one server available.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_USER} + ) + assert result["type"] == "form" + assert result["step_id"] == "user" + + requests_mock.get( + "https://plex.tv/api/resources", + text=plextv_resources_base.format( + first_server_enabled=0, second_server_enabled=0 + ), + ) + with patch("plexauth.PlexAuth.initiate_auth"), patch( + "plexauth.PlexAuth.token", return_value=MOCK_TOKEN + ): + result = await hass.config_entries.flow.async_configure( + result["flow_id"], user_input={} + ) + assert result["type"] == "external" + + result = await hass.config_entries.flow.async_configure(result["flow_id"]) + assert result["type"] == "external_done" + + result = await hass.config_entries.flow.async_configure(result["flow_id"]) + assert result["type"] == "form" + assert result["step_id"] == "select_server" + + async def test_adding_last_unconfigured_server( hass, mock_plex_calls, @@ -272,7 +310,9 @@ async def test_adding_last_unconfigured_server( requests_mock.get( "https://plex.tv/api/resources", - text=plextv_resources_base.format(second_server_enabled=1), + text=plextv_resources_base.format( + first_server_enabled=1, second_server_enabled=1 + ), ) with patch("plexauth.PlexAuth.initiate_auth"), patch( @@ -332,7 +372,9 @@ async def test_all_available_servers_configured( requests_mock.get("https://plex.tv/users/account", text=plextv_account) requests_mock.get( "https://plex.tv/api/resources", - text=plextv_resources_base.format(second_server_enabled=1), + text=plextv_resources_base.format( + first_server_enabled=1, second_server_enabled=1 + ), ) with patch("plexauth.PlexAuth.initiate_auth"), patch( diff --git a/tests/fixtures/plex/plextv_resources_base.xml b/tests/fixtures/plex/plextv_resources_base.xml index 41e61711d36..5802c58d4d4 100644 --- a/tests/fixtures/plex/plextv_resources_base.xml +++ b/tests/fixtures/plex/plextv_resources_base.xml @@ -1,5 +1,5 @@ - +