Add full test coverage for Comelit sensor platform (#141813)

This commit is contained in:
Simone Chemelli 2025-03-30 15:02:15 +02:00 committed by GitHub
parent a5b320180a
commit b4a6ca63b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 167 additions and 0 deletions

View File

@ -104,4 +104,5 @@ def mock_vedo_config_entry() -> Generator[MockConfigEntry]:
CONF_PIN: VEDO_PIN,
CONF_TYPE: VEDO,
},
entry_id="vedo_config_entry_id",
)

View File

@ -0,0 +1,76 @@
# serializer version: 1
# name: test_all_entities[sensor.zone0-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'alarm',
'armed',
'open',
'excluded',
'faulty',
'inhibited',
'isolated',
'rest',
'sabotated',
'unavailable',
'unknown',
]),
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.zone0',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': None,
'platform': 'comelit',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'zone_status',
'unique_id': 'vedo_config_entry_id-0',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.zone0-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Zone0',
'options': list([
'alarm',
'armed',
'open',
'excluded',
'faulty',
'inhibited',
'isolated',
'rest',
'sabotated',
'unavailable',
'unknown',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.zone0',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'rest',
})
# ---

View File

@ -0,0 +1,90 @@
"""Tests for Comelit SimpleHome sensor platform."""
from unittest.mock import AsyncMock, patch
from aiocomelit.api import AlarmDataObject, ComelitVedoAreaObject, ComelitVedoZoneObject
from aiocomelit.const import AlarmAreaState, AlarmZoneState
from freezegun.api import FrozenDateTimeFactory
from syrupy import SnapshotAssertion
from homeassistant.components.comelit.const import SCAN_INTERVAL
from homeassistant.const import STATE_UNKNOWN, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_integration
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
ENTITY_ID = "sensor.zone0"
async def test_all_entities(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
mock_vedo: AsyncMock,
mock_vedo_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch("homeassistant.components.comelit.VEDO_PLATFORMS", [Platform.SENSOR]):
await setup_integration(hass, mock_vedo_config_entry)
await snapshot_platform(
hass,
entity_registry,
snapshot(),
mock_vedo_config_entry.entry_id,
)
async def test_sensor_state_unknown(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
mock_vedo: AsyncMock,
mock_vedo_config_entry: MockConfigEntry,
) -> None:
"""Test sensor unknown state."""
await setup_integration(hass, mock_vedo_config_entry)
assert (state := hass.states.get(ENTITY_ID))
assert state.state == AlarmZoneState.REST.value
vedo_query = AlarmDataObject(
alarm_areas={
0: ComelitVedoAreaObject(
index=0,
name="Area0",
p1=True,
p2=True,
ready=False,
armed=True,
alarm=False,
alarm_memory=False,
sabotage=False,
anomaly=False,
in_time=False,
out_time=False,
human_status=AlarmAreaState.UNKNOWN,
)
},
alarm_zones={
0: ComelitVedoZoneObject(
index=0,
name="Zone0",
status_api="0x000",
status=0,
human_status=AlarmZoneState.UNKNOWN,
)
},
)
mock_vedo.get_all_areas_and_zones.return_value = vedo_query
freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True)
assert (state := hass.states.get(ENTITY_ID))
assert state.state == STATE_UNKNOWN