"""Tests de l'unique binary sensor Arkteos.""" from __future__ import annotations from unittest.mock import Mock from custom_components.arkteos.binary_sensor import ArkteosConnectionBinarySensor from custom_components.arkteos.const import DOMAIN class FakeClient: def __init__(self, available: bool = False) -> None: self.available = available self.callbacks: list[object] = [] def add_availability_callback(self, callback) -> None: self.callbacks.append(callback) def remove_availability_callback(self, callback) -> None: self.callbacks.remove(callback) def test_binary_sensor_is_created() -> None: assert ArkteosConnectionBinarySensor(FakeClient()) is not None def test_unique_id_is_stable() -> None: assert ArkteosConnectionBinarySensor(FakeClient()).unique_id == "arkteos_zuran4_connection" def test_device_info_is_correct() -> None: info = ArkteosConnectionBinarySensor(FakeClient()).device_info assert info["identifiers"] == {(DOMAIN, "arkteos_zuran4")} assert info["manufacturer"] == "Arkteos" assert info["model"] == "Zuran 4" def test_is_on_when_client_is_available() -> None: assert ArkteosConnectionBinarySensor(FakeClient(True)).is_on def test_is_off_when_client_is_unavailable() -> None: assert not ArkteosConnectionBinarySensor(FakeClient(False)).is_on def test_availability_callback_writes_state() -> None: client = FakeClient() entity = ArkteosConnectionBinarySensor(client) entity.async_write_ha_state = Mock() entity._handle_availability(True) entity.async_write_ha_state.assert_called_once() def test_callback_is_removed_before_entity_removal() -> None: client = FakeClient() entity = ArkteosConnectionBinarySensor(client) client.add_availability_callback(entity._handle_availability) client.remove_availability_callback(entity._handle_availability) assert client.callbacks == [] def test_no_polling_method_is_declared() -> None: entity = ArkteosConnectionBinarySensor(FakeClient()) assert not hasattr(entity, "async_update") def test_binary_sensor_is_read_only() -> None: source = ArkteosConnectionBinarySensor.__module__ assert source == "custom_components.arkteos.binary_sensor"