"""Einrichten, Entladen und das Geraet in der Registrierung.""" from __future__ import annotations from unittest.mock import MagicMock from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr from pytest_homeassistant_custom_component.common import MockConfigEntry from custom_components.ninstrip.api import NinstripAuthError, NinstripConnectionError from custom_components.ninstrip.const import DOMAIN from tests_unit.samples import MAC_K1Y async def test_einrichten_und_entladen( hass: HomeAssistant, init_integration: MockConfigEntry ) -> None: assert init_integration.state is ConfigEntryState.LOADED assert await hass.config_entries.async_unload(init_integration.entry_id) await hass.async_block_till_done() assert init_integration.state is ConfigEntryState.NOT_LOADED async def test_geraet_traegt_mac_modell_und_version( hass: HomeAssistant, init_integration: MockConfigEntry ) -> None: geraet = dr.async_get(hass).async_get_device_by_identifier( (DOMAIN, MAC_K1Y), init_integration.entry_id ) assert geraet is not None assert geraet.manufacturer == "ninstrip" # Das Modell beschreibt den Strip, nicht das Produkt - das steht in model_id. assert geraet.model == "sk6812_rgbw, 60 Pixel" assert geraet.model_id == "ninstrip" assert geraet.sw_version == "0.1.0-12-g71a57" assert (dr.CONNECTION_NETWORK_MAC, MAC_K1Y) in geraet.connections async def test_unerreichbares_geraet_wird_spaeter_erneut_versucht( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_client: MagicMock ) -> None: mock_client.get_state.side_effect = NinstripConnectionError("weg") mock_config_entry.add_to_hass(hass) assert not await hass.config_entries.async_setup(mock_config_entry.entry_id) assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY async def test_abgelehntes_token_verlangt_neue_anmeldung( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_client: MagicMock ) -> None: mock_client.get_state.side_effect = NinstripAuthError("abgelehnt") mock_config_entry.add_to_hass(hass) assert not await hass.config_entries.async_setup(mock_config_entry.entry_id) assert mock_config_entry.state is ConfigEntryState.SETUP_ERROR assert any( flow["context"]["source"] == "reauth" for flow in hass.config_entries.flow.async_progress() )