"""Test the Airobot integration init.""" from unittest.mock import AsyncMock from pyairobotrest.exceptions import AirobotAuthError, AirobotConnectionError import pytest from syrupy.assertion import SnapshotAssertion from homeassistant.components.airobot.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr from tests.common import MockConfigEntry @pytest.mark.usefixtures("init_integration") async def test_setup_entry_success( hass: HomeAssistant, mock_config_entry: MockConfigEntry ) -> None: """Test successful setup of a config entry.""" assert mock_config_entry.state is ConfigEntryState.LOADED assert len(hass.config_entries.async_entries(DOMAIN)) == 1 @pytest.mark.parametrize( ("exception", "expected_state"), [ (AirobotAuthError("Authentication failed"), ConfigEntryState.SETUP_ERROR), (AirobotConnectionError("Connection failed"), ConfigEntryState.SETUP_RETRY), ], ) async def test_setup_entry_exceptions( hass: HomeAssistant, mock_airobot_client: AsyncMock, mock_config_entry: MockConfigEntry, exception: Exception, expected_state: ConfigEntryState, ) -> None: """Test setup fails with various exceptions.""" mock_config_entry.add_to_hass(hass) mock_airobot_client.get_statuses.side_effect = exception await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() assert mock_config_entry.state is expected_state async def test_setup_entry_auth_error_triggers_reauth( hass: HomeAssistant, mock_airobot_client: AsyncMock, mock_config_entry: MockConfigEntry, ) -> None: """Test setup with auth error triggers reauth flow.""" mock_config_entry.add_to_hass(hass) mock_airobot_client.get_statuses.side_effect = AirobotAuthError( "Authentication failed" ) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() flows = hass.config_entries.flow.async_progress() assert len(flows) == 1 assert flows[0]["step_id"] == "reauth_confirm" @pytest.mark.usefixtures("init_integration") async def test_unload_entry( hass: HomeAssistant, mock_config_entry: MockConfigEntry ) -> None: """Test unloading a config entry.""" assert mock_config_entry.state is ConfigEntryState.LOADED await hass.config_entries.async_unload(mock_config_entry.entry_id) await hass.async_block_till_done() assert mock_config_entry.state is ConfigEntryState.NOT_LOADED @pytest.mark.usefixtures("init_integration") async def test_device_entry( hass: HomeAssistant, device_registry: dr.DeviceRegistry, snapshot: SnapshotAssertion, ) -> None: """Test device registry entry.""" assert ( device_entry := device_registry.async_get_device( identifiers={(DOMAIN, "T01A1B2C3")} ) ) assert device_entry == snapshot