"""Tests for the Sonsrr integration.""" from unittest.mock import MagicMock, patch from aiopyarr import ArrAuthenticationException, ArrException from homeassistant.components.sonarr.const import CONF_BASE_PATH, DOMAIN from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState from homeassistant.const import ( CONF_API_KEY, CONF_HOST, CONF_PORT, CONF_SOURCE, CONF_SSL, CONF_URL, CONF_VERIFY_SSL, ) from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry async def test_config_entry_not_ready( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_sonarr: MagicMock, ) -> None: """Test the configuration entry not ready.""" mock_sonarr.async_get_system_status.side_effect = ArrException mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY async def test_config_entry_reauth( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_sonarr: MagicMock, ) -> None: """Test the configuration entry needing to be re-authenticated.""" mock_sonarr.async_get_system_status.side_effect = ArrAuthenticationException with patch.object(hass.config_entries.flow, "async_init") as mock_flow_init: mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() assert mock_config_entry.state is ConfigEntryState.SETUP_ERROR mock_flow_init.assert_called_once_with( DOMAIN, context={ CONF_SOURCE: SOURCE_REAUTH, "entry_id": mock_config_entry.entry_id, "unique_id": mock_config_entry.unique_id, "title_placeholders": {"name": mock_config_entry.title}, }, data=mock_config_entry.data, ) async def test_unload_config_entry( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_sonarr: MagicMock, ) -> None: """Test the configuration entry unloading.""" mock_config_entry.add_to_hass(hass) with patch( "homeassistant.components.sonarr.sensor.async_setup_entry", return_value=True, ): await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() assert hass.data[DOMAIN] assert mock_config_entry.state is ConfigEntryState.LOADED assert mock_config_entry.entry_id in hass.data[DOMAIN] 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 assert mock_config_entry.entry_id not in hass.data[DOMAIN] async def test_migrate_config_entry(hass: HomeAssistant): """Test successful migration of entry data.""" legacy_config = { CONF_API_KEY: "MOCK_API_KEY", CONF_HOST: "1.2.3.4", CONF_PORT: 8989, CONF_SSL: False, CONF_VERIFY_SSL: False, CONF_BASE_PATH: "/base/", } entry = MockConfigEntry(domain=DOMAIN, data=legacy_config) assert entry.data == legacy_config assert entry.version == 1 assert not entry.unique_id await entry.async_migrate(hass) assert entry.data == { CONF_API_KEY: "MOCK_API_KEY", CONF_HOST: "1.2.3.4", CONF_PORT: 8989, CONF_SSL: False, CONF_VERIFY_SSL: False, CONF_BASE_PATH: "/base/", CONF_URL: "http://1.2.3.4:8989/base", } assert entry.version == 2 assert not entry.unique_id