Initial commit: Main Gate Controller HACS integration
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
"""Tests for entity creation and device info."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from custom_components.main_gate_controller.const import (
|
||||
DOMAIN,
|
||||
GATE_STATE_CLOSED,
|
||||
MANUFACTURER,
|
||||
MODEL,
|
||||
)
|
||||
|
||||
|
||||
async def test_setup_creates_entities_and_device(
|
||||
hass: HomeAssistant, loaded_entry
|
||||
):
|
||||
"""A loaded entry creates one button, one sensor and one device."""
|
||||
entity_registry = er.async_get(hass)
|
||||
device_registry = dr.async_get(hass)
|
||||
|
||||
button_unique_id = f"{loaded_entry.entry_id}_open"
|
||||
sensor_unique_id = f"{loaded_entry.entry_id}_status"
|
||||
|
||||
button_entity_id = entity_registry.async_get_entity_id(
|
||||
Platform.BUTTON, DOMAIN, button_unique_id
|
||||
)
|
||||
sensor_entity_id = entity_registry.async_get_entity_id(
|
||||
Platform.SENSOR, DOMAIN, sensor_unique_id
|
||||
)
|
||||
assert button_entity_id is not None
|
||||
assert sensor_entity_id is not None
|
||||
|
||||
button_state = hass.states.get(button_entity_id)
|
||||
sensor_state = hass.states.get(sensor_entity_id)
|
||||
assert button_state is not None
|
||||
assert sensor_state is not None
|
||||
assert sensor_state.state == GATE_STATE_CLOSED
|
||||
|
||||
attrs = sensor_state.attributes
|
||||
assert attrs["remaining_seconds"] is None
|
||||
assert attrs["running"] is False
|
||||
assert attrs["duration"] == 20.0
|
||||
|
||||
device = device_registry.async_get_device(identifiers={(DOMAIN, loaded_entry.entry_id)})
|
||||
assert device is not None
|
||||
assert device.name == "Main Gate"
|
||||
assert device.manufacturer == MANUFACTURER
|
||||
assert device.model == MODEL
|
||||
|
||||
|
||||
async def test_setup_states_remain_consistent_after_restart(hass: HomeAssistant):
|
||||
"""After a (logical) restart the state is closed and not running."""
|
||||
from pytest_homeassistant_custom_component.common import MockConfigEntry
|
||||
|
||||
from tests.conftest import make_entry_data
|
||||
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Main Gate",
|
||||
data=make_entry_data(switch_entity_id="switch.main_gate_relay", name="Main Gate"),
|
||||
unique_id="switch.main_gate_relay",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
sensor_state = hass.states.get(f"sensor.{entry.title.lower().replace(' ', '_')}_status")
|
||||
assert sensor_state is None or sensor_state.state == GATE_STATE_CLOSED
|
||||
|
||||
|
||||
async def test_unload_entry(hass: HomeAssistant, loaded_entry):
|
||||
"""Unloading removes entities and clears the runtime data attribute."""
|
||||
# Capture the runtime data reference before unload – HA deletes the
|
||||
# attribute on unload by design (see homeassistant.config_entries).
|
||||
controller_before = loaded_entry.runtime_data
|
||||
assert controller_before is not None
|
||||
|
||||
assert await hass.config_entries.async_unload(loaded_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# The cycle was cancelled; the controller is reset to a safe closed state.
|
||||
assert controller_before.is_running is False
|
||||
assert controller_before.status == GATE_STATE_CLOSED
|
||||
assert not hasattr(loaded_entry, "runtime_data")
|
||||
Reference in New Issue
Block a user