async def test_two_platforms_add_same_entity(hass): """Test two platforms in the same domain adding an entity with the same name.""" entity_platform1 = MockEntityPlatform( hass, domain="mock_integration", platform_name="mock_platform", platform=None ) entity1 = SlowEntity(name="entity_1") entity_platform2 = MockEntityPlatform( hass, domain="mock_integration", platform_name="mock_platform", platform=None ) entity2 = SlowEntity(name="entity_1") await asyncio.gather( entity_platform1.async_add_entities([entity1]), entity_platform2.async_add_entities([entity2]), ) entities = [] @callback def handle_service(entity, *_): entities.append(entity) entity_platform1.async_register_entity_service("hello", {}, handle_service) await hass.services.async_call( "mock_platform", "hello", {"entity_id": "all"}, blocking=True ) assert len(entities) == 2 assert {entity1.entity_id, entity2.entity_id} == { "mock_integration.entity_1", "mock_integration.entity_1_2", } assert entity1 in entities assert entity2 in entities
def test_registry_respect_entity_namespace(hass): """Test that the registry respects entity namespace.""" mock_registry(hass) platform = MockEntityPlatform(hass, entity_namespace='ns') entity = MockEntity(unique_id='1234', name='Device Name') yield from platform.async_add_entities([entity]) assert entity.entity_id == 'test_domain.ns_device_name'
def test_registry_respect_entity_disabled(hass): """Test that the registry respects entity disabled.""" mock_registry(hass, { 'test_domain.world': entity_registry.RegistryEntry( entity_id='test_domain.world', unique_id='1234', # Using component.async_add_entities is equal to platform "domain" platform='test_platform', disabled_by=entity_registry.DISABLED_USER ) }) platform = MockEntityPlatform(hass) entity = MockEntity(unique_id='1234') yield from platform.async_add_entities([entity]) assert entity.entity_id is None assert hass.states.async_entity_ids() == []
async def test_passive_bluetooth_entity_with_entity_platform( hass, mock_bleak_scanner_start ): """Test with a mock entity platform.""" await async_setup_component(hass, DOMAIN, {DOMAIN: {}}) entity_platform = MockEntityPlatform(hass) @callback def _mock_update_method( service_info: BluetoothServiceInfo, ) -> dict[str, str]: return {"test": "data"} @callback def _async_generate_mock_data( data: dict[str, str], ) -> PassiveBluetoothDataUpdate: """Generate mock data.""" return NO_DEVICES_PASSIVE_BLUETOOTH_DATA_UPDATE coordinator = PassiveBluetoothProcessorCoordinator( hass, _LOGGER, "aa:bb:cc:dd:ee:ff", BluetoothScanningMode.ACTIVE, _mock_update_method, ) assert coordinator.available is False # no data yet saved_callback = None def _async_register_callback(_hass, _callback, _matcher, _mode): nonlocal saved_callback saved_callback = _callback return lambda: None processor = PassiveBluetoothDataProcessor(_async_generate_mock_data) with patch( "homeassistant.components.bluetooth.update_coordinator.async_register_callback", _async_register_callback, ): coordinator.async_register_processor(processor) cancel_coordinator = coordinator.async_start() processor.async_add_entities_listener( PassiveBluetoothProcessorEntity, lambda entities: hass.async_create_task( entity_platform.async_add_entities(entities) ), ) saved_callback(NO_DEVICES_BLUETOOTH_SERVICE_INFO, BluetoothChange.ADVERTISEMENT) await hass.async_block_till_done() saved_callback(NO_DEVICES_BLUETOOTH_SERVICE_INFO, BluetoothChange.ADVERTISEMENT) await hass.async_block_till_done() assert ( hass.states.get("test_domain.test_platform_aa_bb_cc_dd_ee_ff_temperature") is not None ) assert ( hass.states.get("test_domain.test_platform_aa_bb_cc_dd_ee_ff_pressure") is not None ) cancel_coordinator()