core/tests/components/pyload/conftest.py

122 lines
3.2 KiB
Python

"""Fixtures for pyLoad integration tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, patch
from pyloadapi.types import LoginResponse, StatusServerResponse
import pytest
from homeassistant.components.pyload.const import DEFAULT_NAME, DOMAIN
from homeassistant.const import (
CONF_HOST,
CONF_MONITORED_VARIABLES,
CONF_NAME,
CONF_PASSWORD,
CONF_PLATFORM,
CONF_PORT,
CONF_SSL,
CONF_USERNAME,
CONF_VERIFY_SSL,
)
from homeassistant.helpers.typing import ConfigType
from tests.common import MockConfigEntry
USER_INPUT = {
CONF_HOST: "pyload.local",
CONF_PASSWORD: "test-password",
CONF_PORT: 8000,
CONF_SSL: True,
CONF_USERNAME: "test-username",
CONF_VERIFY_SSL: False,
}
YAML_INPUT = {
CONF_HOST: "pyload.local",
CONF_MONITORED_VARIABLES: ["speed"],
CONF_NAME: "test-name",
CONF_PASSWORD: "test-password",
CONF_PLATFORM: "pyload",
CONF_PORT: 8000,
CONF_SSL: True,
CONF_USERNAME: "test-username",
}
REAUTH_INPUT = {
CONF_PASSWORD: "new-password",
CONF_USERNAME: "new-username",
}
NEW_INPUT = {
CONF_HOST: "pyload.local",
CONF_PASSWORD: "new-password",
CONF_PORT: 8000,
CONF_SSL: True,
CONF_USERNAME: "new-username",
CONF_VERIFY_SSL: False,
}
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.pyload.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def pyload_config() -> ConfigType:
"""Mock pyload configuration entry."""
return {"sensor": YAML_INPUT}
@pytest.fixture
def mock_pyloadapi() -> Generator[AsyncMock, None, None]:
"""Mock PyLoadAPI."""
with (
patch(
"homeassistant.components.pyload.PyLoadAPI", autospec=True
) as mock_client,
patch("homeassistant.components.pyload.config_flow.PyLoadAPI", new=mock_client),
):
client = mock_client.return_value
client.username = "username"
client.api_url = "https://pyload.local:8000/"
client.login.return_value = LoginResponse(
{
"_permanent": True,
"authenticated": True,
"id": 2,
"name": "username",
"role": 0,
"perms": 0,
"template": "default",
"_flashes": [["message", "Logged in successfully"]],
}
)
client.get_status.return_value = StatusServerResponse(
{
"pause": False,
"active": 1,
"queue": 6,
"total": 37,
"speed": 5405963.0,
"download": True,
"reconnect": False,
"captcha": False,
}
)
client.version.return_value = "0.5.0"
client.free_space.return_value = 99999999999
yield client
@pytest.fixture(name="config_entry")
def mock_config_entry() -> MockConfigEntry:
"""Mock pyLoad configuration entry."""
return MockConfigEntry(
domain=DOMAIN, title=DEFAULT_NAME, data=USER_INPUT, entry_id="XXXXXXXXXXXXXX"
)