158 lines
4.9 KiB
Python
158 lines
4.9 KiB
Python
"""Fixtures for Sonarr integration tests."""
|
|
|
|
from collections.abc import Generator
|
|
import json
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from aiopyarr import (
|
|
Command,
|
|
Diskspace,
|
|
SonarrCalendar,
|
|
SonarrQueue,
|
|
SonarrSeries,
|
|
SonarrWantedMissing,
|
|
SystemStatus,
|
|
)
|
|
import pytest
|
|
|
|
from homeassistant.components.sonarr.const import (
|
|
CONF_BASE_PATH,
|
|
CONF_UPCOMING_DAYS,
|
|
CONF_WANTED_MAX_ITEMS,
|
|
DEFAULT_UPCOMING_DAYS,
|
|
DEFAULT_WANTED_MAX_ITEMS,
|
|
DOMAIN,
|
|
)
|
|
from homeassistant.const import (
|
|
CONF_API_KEY,
|
|
CONF_HOST,
|
|
CONF_PORT,
|
|
CONF_SSL,
|
|
CONF_VERIFY_SSL,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
|
|
|
|
def sonarr_calendar() -> list[SonarrCalendar]:
|
|
"""Generate a response for the calendar method."""
|
|
results = json.loads(load_fixture("sonarr/calendar.json"))
|
|
return [SonarrCalendar(result) for result in results]
|
|
|
|
|
|
def sonarr_commands() -> list[Command]:
|
|
"""Generate a response for the commands method."""
|
|
results = json.loads(load_fixture("sonarr/command.json"))
|
|
return [Command(result) for result in results]
|
|
|
|
|
|
def sonarr_diskspace() -> list[Diskspace]:
|
|
"""Generate a response for the diskspace method."""
|
|
results = json.loads(load_fixture("sonarr/diskspace.json"))
|
|
return [Diskspace(result) for result in results]
|
|
|
|
|
|
def sonarr_queue() -> SonarrQueue:
|
|
"""Generate a response for the queue method."""
|
|
results = json.loads(load_fixture("sonarr/queue.json"))
|
|
return SonarrQueue(results)
|
|
|
|
|
|
def sonarr_series() -> list[SonarrSeries]:
|
|
"""Generate a response for the series method."""
|
|
results = json.loads(load_fixture("sonarr/series.json"))
|
|
return [SonarrSeries(result) for result in results]
|
|
|
|
|
|
def sonarr_system_status() -> SystemStatus:
|
|
"""Generate a response for the system status method."""
|
|
result = json.loads(load_fixture("sonarr/system-status.json"))
|
|
return SystemStatus(result)
|
|
|
|
|
|
def sonarr_wanted() -> SonarrWantedMissing:
|
|
"""Generate a response for the wanted method."""
|
|
results = json.loads(load_fixture("sonarr/wanted-missing.json"))
|
|
return SonarrWantedMissing(results)
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_config_entry() -> MockConfigEntry:
|
|
"""Return the default mocked config entry."""
|
|
return MockConfigEntry(
|
|
title="Sonarr",
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: "192.168.1.189",
|
|
CONF_PORT: 8989,
|
|
CONF_BASE_PATH: "/api",
|
|
CONF_SSL: False,
|
|
CONF_VERIFY_SSL: False,
|
|
CONF_API_KEY: "MOCK_API_KEY",
|
|
CONF_UPCOMING_DAYS: DEFAULT_UPCOMING_DAYS,
|
|
CONF_WANTED_MAX_ITEMS: DEFAULT_WANTED_MAX_ITEMS,
|
|
},
|
|
options={
|
|
CONF_UPCOMING_DAYS: DEFAULT_UPCOMING_DAYS,
|
|
CONF_WANTED_MAX_ITEMS: DEFAULT_WANTED_MAX_ITEMS,
|
|
},
|
|
unique_id=None,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_setup_entry() -> Generator[None, None, None]:
|
|
"""Mock setting up a config entry."""
|
|
with patch("homeassistant.components.sonarr.async_setup_entry", return_value=True):
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_sonarr_config_flow() -> Generator[None, MagicMock, None]:
|
|
"""Return a mocked Sonarr client."""
|
|
with patch(
|
|
"homeassistant.components.sonarr.config_flow.SonarrClient", autospec=True
|
|
) as sonarr_mock:
|
|
client = sonarr_mock.return_value
|
|
client.async_get_calendar.return_value = sonarr_calendar()
|
|
client.async_get_commands.return_value = sonarr_commands()
|
|
client.async_get_diskspace.return_value = sonarr_diskspace()
|
|
client.async_get_queue.return_value = sonarr_queue()
|
|
client.async_get_series.return_value = sonarr_series()
|
|
client.async_get_system_status.return_value = sonarr_system_status()
|
|
client.async_get_wanted.return_value = sonarr_wanted()
|
|
|
|
yield client
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_sonarr() -> Generator[None, MagicMock, None]:
|
|
"""Return a mocked Sonarr client."""
|
|
with patch(
|
|
"homeassistant.components.sonarr.SonarrClient", autospec=True
|
|
) as sonarr_mock:
|
|
client = sonarr_mock.return_value
|
|
client.async_get_calendar.return_value = sonarr_calendar()
|
|
client.async_get_commands.return_value = sonarr_commands()
|
|
client.async_get_diskspace.return_value = sonarr_diskspace()
|
|
client.async_get_queue.return_value = sonarr_queue()
|
|
client.async_get_series.return_value = sonarr_series()
|
|
client.async_get_system_status.return_value = sonarr_system_status()
|
|
client.async_get_wanted.return_value = sonarr_wanted()
|
|
|
|
yield client
|
|
|
|
|
|
@pytest.fixture
|
|
async def init_integration(
|
|
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_sonarr: MagicMock
|
|
) -> MockConfigEntry:
|
|
"""Set up the Sonarr integration for testing."""
|
|
mock_config_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return mock_config_entry
|