"""Configure tests for the LastFM integration.""" from collections.abc import Awaitable, Callable from unittest.mock import patch from pylast import Track import pytest from homeassistant.components.lastfm.const import CONF_MAIN_USER, CONF_USERS, DOMAIN from homeassistant.const import CONF_API_KEY from homeassistant.core import HomeAssistant from homeassistant.setup import async_setup_component from tests.common import MockConfigEntry from tests.components.lastfm import ( API_KEY, USERNAME_1, USERNAME_2, MockNetwork, MockUser, ) ComponentSetup = Callable[[MockConfigEntry, MockUser], Awaitable[None]] @pytest.fixture(name="config_entry") def mock_config_entry() -> MockConfigEntry: """Create LastFM entry in Home Assistant.""" return MockConfigEntry( domain=DOMAIN, data={}, options={ CONF_API_KEY: API_KEY, CONF_MAIN_USER: USERNAME_1, CONF_USERS: [USERNAME_1, USERNAME_2], }, ) @pytest.fixture(name="setup_integration") async def mock_setup_integration( hass: HomeAssistant, ) -> Callable[[MockConfigEntry, MockUser], Awaitable[None]]: """Fixture for setting up the component.""" async def func(mock_config_entry: MockConfigEntry, mock_user: MockUser) -> None: mock_config_entry.add_to_hass(hass) with patch("pylast.User", return_value=mock_user): assert await async_setup_component(hass, DOMAIN, {}) await hass.async_block_till_done() return func @pytest.fixture(name="default_user") def mock_default_user() -> MockUser: """Return default mock user.""" return MockUser( now_playing_result=Track("artist", "title", MockNetwork("lastfm")), top_tracks=[Track("artist", "title", MockNetwork("lastfm"))], recent_tracks=[Track("artist", "title", MockNetwork("lastfm"))], ) @pytest.fixture(name="first_time_user") def mock_first_time_user() -> MockUser: """Return first time mock user.""" return MockUser(now_playing_result=None, top_tracks=[], recent_tracks=[])