Make sure entity inherit disabled device (#60469)

This commit is contained in:
Joakim Plate 2021-12-01 22:59:57 +01:00 committed by GitHub
parent d1962f6e51
commit c54ca7941f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 3 deletions

View file

@ -42,7 +42,7 @@ from . import (
service,
)
from .device_registry import DeviceRegistry
from .entity_registry import DISABLED_INTEGRATION, EntityRegistry
from .entity_registry import DISABLED_DEVICE, DISABLED_INTEGRATION, EntityRegistry
from .event import async_call_later, async_track_time_interval
from .typing import ConfigType, DiscoveryInfoType
@ -456,6 +456,7 @@ class EntityPlatform:
device_info = entity.device_info
device_id = None
device = None
if config_entry_id is not None and device_info is not None:
processed_dev_info: dict[str, str | None] = {
@ -523,6 +524,11 @@ class EntityPlatform:
unit_of_measurement=entity.unit_of_measurement,
)
if device and device.disabled and not entry.disabled:
entry = entity_registry.async_update_entity(
entry.entity_id, disabled_by=DISABLED_DEVICE
)
entity.registry_entry = entry
entity.entity_id = entry.entity_id

View file

@ -7,14 +7,14 @@ from unittest.mock import ANY, Mock, patch
import pytest
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, PERCENTAGE
from homeassistant.core import CoreState, callback
from homeassistant.core import CoreState, HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError, PlatformNotReady
from homeassistant.helpers import (
device_registry as dr,
entity_platform,
entity_registry as er,
)
from homeassistant.helpers.entity import async_generate_entity_id
from homeassistant.helpers.entity import DeviceInfo, async_generate_entity_id
from homeassistant.helpers.entity_component import (
DEFAULT_SCAN_INTERVAL,
EntityComponent,
@ -1080,6 +1080,44 @@ async def test_entity_disabled_by_integration(hass):
assert entry_disabled.disabled_by == er.DISABLED_INTEGRATION
async def test_entity_disabled_by_device(hass: HomeAssistant):
"""Test entity disabled by device."""
connections = {(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}
entity_disabled = MockEntity(
unique_id="disabled", device_info=DeviceInfo(connections=connections)
)
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Mock setup entry method."""
async_add_entities([entity_disabled])
return True
platform = MockPlatform(async_setup_entry=async_setup_entry)
config_entry = MockConfigEntry(entry_id="super-mock-id", domain=DOMAIN)
entity_platform = MockEntityPlatform(
hass, platform_name=config_entry.domain, platform=platform
)
device_registry = dr.async_get(hass)
device_registry.async_get_or_create(
config_entry_id=config_entry.entry_id,
connections=connections,
disabled_by=dr.DeviceEntryDisabler.USER,
)
assert await entity_platform.async_setup_entry(config_entry)
await hass.async_block_till_done()
assert entity_disabled.hass is None
assert entity_disabled.platform is None
registry = er.async_get(hass)
entry_disabled = registry.async_get_or_create(DOMAIN, DOMAIN, "disabled")
assert entry_disabled.disabled_by == er.DISABLED_DEVICE
async def test_entity_info_added_to_entity_registry(hass):
"""Test entity info is written to entity registry."""
component = EntityComponent(_LOGGER, DOMAIN, hass, timedelta(seconds=20))