diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index 2ffce00f62f..65cae7942a6 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -630,17 +630,18 @@ class ConfigEntries: EntityRegistryDisabledHandler(hass).async_setup() @callback - def async_domains(self) -> list[str]: + def async_domains( + self, include_ignore: bool = False, include_disabled: bool = False + ) -> list[str]: """Return domains for which we have entries.""" - seen: set[str] = set() - result = [] - - for entry in self._entries.values(): - if entry.domain not in seen: - seen.add(entry.domain) - result.append(entry.domain) - - return result + return list( + { + entry.domain: None + for entry in self._entries.values() + if (include_ignore or entry.source != SOURCE_IGNORE) + and (include_disabled or not entry.disabled_by) + } + ) @callback def async_get_entry(self, entry_id: str) -> ConfigEntry | None: diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index af1f7ba2ec4..4db1952dbfb 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -473,7 +473,7 @@ async def test_entries_gets_entries(manager): assert manager.async_entries("test2") == [entry1, entry2] -async def test_domains_gets_uniques(manager): +async def test_domains_gets_domains_uniques(manager): """Test we only return each domain once.""" MockConfigEntry(domain="test").add_to_manager(manager) MockConfigEntry(domain="test2").add_to_manager(manager) @@ -484,6 +484,46 @@ async def test_domains_gets_uniques(manager): assert manager.async_domains() == ["test", "test2", "test3"] +async def test_domains_gets_domains_excludes_ignore_and_disabled(manager): + """Test we only return each domain once.""" + MockConfigEntry(domain="test").add_to_manager(manager) + MockConfigEntry(domain="test2").add_to_manager(manager) + MockConfigEntry(domain="test2").add_to_manager(manager) + MockConfigEntry( + domain="ignored", source=config_entries.SOURCE_IGNORE + ).add_to_manager(manager) + MockConfigEntry(domain="test3").add_to_manager(manager) + MockConfigEntry(domain="disabled", disabled_by="user").add_to_manager(manager) + assert manager.async_domains() == ["test", "test2", "test3"] + assert manager.async_domains(include_ignore=False) == ["test", "test2", "test3"] + assert manager.async_domains(include_disabled=False) == ["test", "test2", "test3"] + assert manager.async_domains(include_ignore=False, include_disabled=False) == [ + "test", + "test2", + "test3", + ] + + assert manager.async_domains(include_ignore=True) == [ + "test", + "test2", + "ignored", + "test3", + ] + assert manager.async_domains(include_disabled=True) == [ + "test", + "test2", + "test3", + "disabled", + ] + assert manager.async_domains(include_ignore=True, include_disabled=True) == [ + "test", + "test2", + "ignored", + "test3", + "disabled", + ] + + async def test_saving_and_loading(hass): """Test that we're saving and loading correctly.""" mock_integration(