core/tests/components/device_tracker/test_entities.py

82 lines
2.7 KiB
Python
Raw Normal View History

"""Tests for device tracker entities."""
import pytest
from homeassistant.components.device_tracker.config_entry import (
2019-07-31 19:25:30 +00:00
BaseTrackerEntity,
ScannerEntity,
)
from homeassistant.components.device_tracker.const import (
ATTR_HOST_NAME,
ATTR_IP,
ATTR_MAC,
2019-07-31 19:25:30 +00:00
ATTR_SOURCE_TYPE,
DOMAIN,
2022-09-20 14:50:07 +00:00
SourceType,
)
from homeassistant.const import ATTR_BATTERY_LEVEL, STATE_HOME, STATE_NOT_HOME
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from tests.common import MockConfigEntry
async def test_scanner_entity_device_tracker(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test ScannerEntity based device tracker."""
# Make device tied to other integration so device tracker entities get enabled
dr.async_get(hass).async_get_or_create(
name="Device from other integration",
config_entry_id=MockConfigEntry().entry_id,
connections={(dr.CONNECTION_NETWORK_MAC, "ad:de:ef:be:ed:fe")},
)
2019-07-31 19:25:30 +00:00
config_entry = MockConfigEntry(domain="test")
config_entry.add_to_hass(hass)
2019-07-31 19:25:30 +00:00
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
await hass.async_block_till_done()
entity_id = "device_tracker.test_ad_de_ef_be_ed_fe"
entity_state = hass.states.get(entity_id)
assert entity_state.attributes == {
2022-09-20 14:50:07 +00:00
ATTR_SOURCE_TYPE: SourceType.ROUTER,
2019-07-31 19:25:30 +00:00
ATTR_BATTERY_LEVEL: 100,
ATTR_IP: "0.0.0.0",
ATTR_MAC: "ad:de:ef:be:ed:fe",
ATTR_HOST_NAME: "test.hostname.org",
}
assert entity_state.state == STATE_NOT_HOME
entity = hass.data[DOMAIN].get_entity(entity_id)
entity.set_connected()
await hass.async_block_till_done()
entity_state = hass.states.get(entity_id)
assert entity_state.state == STATE_HOME
def test_scanner_entity() -> None:
"""Test coverage for base ScannerEntity entity class."""
entity = ScannerEntity()
with pytest.raises(NotImplementedError):
assert entity.source_type is None
with pytest.raises(NotImplementedError):
assert entity.is_connected is None
with pytest.raises(NotImplementedError):
assert entity.state == STATE_NOT_HOME
assert entity.battery_level is None
assert entity.ip_address is None
assert entity.mac_address is None
assert entity.hostname is None
def test_base_tracker_entity() -> None:
"""Test coverage for base BaseTrackerEntity entity class."""
entity = BaseTrackerEntity()
with pytest.raises(NotImplementedError):
assert entity.source_type is None
assert entity.battery_level is None
with pytest.raises(NotImplementedError):
assert entity.state_attributes is None