mirror of https://github.com/home-assistant/core
121 lines
2.9 KiB
Python
121 lines
2.9 KiB
Python
"""Test helpers for Panasonic Viera."""
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
from panasonic_viera import TV_TYPE_ENCRYPTED, TV_TYPE_NONENCRYPTED
|
|
import pytest
|
|
|
|
from homeassistant.components.panasonic_viera.const import (
|
|
ATTR_FRIENDLY_NAME,
|
|
ATTR_MANUFACTURER,
|
|
ATTR_MODEL_NUMBER,
|
|
ATTR_UDN,
|
|
CONF_APP_ID,
|
|
CONF_ENCRYPTION_KEY,
|
|
CONF_ON_ACTION,
|
|
DEFAULT_MANUFACTURER,
|
|
DEFAULT_MODEL_NUMBER,
|
|
DEFAULT_NAME,
|
|
DEFAULT_PORT,
|
|
DOMAIN,
|
|
)
|
|
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.typing import UNDEFINED, UndefinedType
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
MOCK_BASIC_DATA = {
|
|
CONF_HOST: "0.0.0.0",
|
|
CONF_NAME: DEFAULT_NAME,
|
|
}
|
|
|
|
MOCK_CONFIG_DATA = {
|
|
**MOCK_BASIC_DATA,
|
|
CONF_PORT: DEFAULT_PORT,
|
|
CONF_ON_ACTION: None,
|
|
}
|
|
|
|
MOCK_ENCRYPTION_DATA = {
|
|
CONF_APP_ID: "mock-app-id",
|
|
CONF_ENCRYPTION_KEY: "mock-encryption-key",
|
|
}
|
|
|
|
MOCK_DEVICE_INFO = {
|
|
ATTR_FRIENDLY_NAME: DEFAULT_NAME,
|
|
ATTR_MANUFACTURER: DEFAULT_MANUFACTURER,
|
|
ATTR_MODEL_NUMBER: DEFAULT_MODEL_NUMBER,
|
|
ATTR_UDN: "mock-unique-id",
|
|
}
|
|
|
|
|
|
def get_mock_remote(
|
|
request_error=None,
|
|
authorize_error=None,
|
|
encrypted=False,
|
|
app_id=None,
|
|
encryption_key=None,
|
|
device_info: UndefinedType | None = UNDEFINED,
|
|
):
|
|
"""Return a mock remote."""
|
|
mock_remote = Mock()
|
|
|
|
mock_remote.type = TV_TYPE_ENCRYPTED if encrypted else TV_TYPE_NONENCRYPTED
|
|
mock_remote.app_id = app_id
|
|
mock_remote.enc_key = encryption_key
|
|
|
|
def request_pin_code(name=None):
|
|
if request_error is not None:
|
|
raise request_error
|
|
|
|
mock_remote.request_pin_code = request_pin_code
|
|
|
|
def authorize_pin_code(pincode):
|
|
if pincode == "1234":
|
|
return
|
|
|
|
if authorize_error is not None:
|
|
raise authorize_error
|
|
|
|
mock_remote.authorize_pin_code = authorize_pin_code
|
|
|
|
mock_remote.get_device_info = Mock(
|
|
return_value=MOCK_DEVICE_INFO if device_info is UNDEFINED else device_info
|
|
)
|
|
|
|
mock_remote.send_key = Mock()
|
|
|
|
mock_remote.get_volume = Mock(return_value=100)
|
|
|
|
return mock_remote
|
|
|
|
|
|
@pytest.fixture(name="mock_remote")
|
|
def mock_remote_fixture():
|
|
"""Patch the library remote."""
|
|
mock_remote = get_mock_remote()
|
|
|
|
with patch(
|
|
"homeassistant.components.panasonic_viera.RemoteControl",
|
|
return_value=mock_remote,
|
|
):
|
|
yield mock_remote
|
|
|
|
|
|
@pytest.fixture
|
|
async def init_integration(hass: HomeAssistant, mock_remote: Mock) -> MockConfigEntry:
|
|
"""Set up the Panasonic Viera integration for testing."""
|
|
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_DEVICE_INFO[ATTR_UDN],
|
|
data={**MOCK_CONFIG_DATA, **MOCK_ENCRYPTION_DATA, **MOCK_DEVICE_INFO},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return mock_entry
|