"""Tests for Transmission init.""" from unittest.mock import MagicMock, patch import pytest from transmissionrpc.error import TransmissionError from homeassistant.components.transmission.const import DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant from . import MOCK_CONFIG_DATA from tests.common import MockConfigEntry @pytest.fixture(autouse=True) def mock_api(): """Mock an api.""" with patch("transmissionrpc.Client") as api: yield api async def test_successful_config_entry(hass: HomeAssistant) -> None: """Test settings up integration from config entry.""" entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG_DATA) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) assert entry.state == ConfigEntryState.LOADED async def test_setup_failed_connection_error( hass: HomeAssistant, mock_api: MagicMock ) -> None: """Test integration failed due to connection error.""" entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG_DATA) entry.add_to_hass(hass) mock_api.side_effect = TransmissionError("111: Connection refused") await hass.config_entries.async_setup(entry.entry_id) assert entry.state == ConfigEntryState.SETUP_RETRY async def test_setup_failed_auth_error( hass: HomeAssistant, mock_api: MagicMock ) -> None: """Test integration failed due to invalid credentials error.""" entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG_DATA) entry.add_to_hass(hass) mock_api.side_effect = TransmissionError("401: Unauthorized") await hass.config_entries.async_setup(entry.entry_id) assert entry.state == ConfigEntryState.SETUP_ERROR async def test_unload_entry(hass: HomeAssistant) -> None: """Test removing integration.""" entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG_DATA) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() assert await hass.config_entries.async_unload(entry.entry_id) await hass.async_block_till_done() assert entry.state is ConfigEntryState.NOT_LOADED assert not hass.data[DOMAIN]