mirror of https://github.com/home-assistant/core
247 lines
7.4 KiB
Python
247 lines
7.4 KiB
Python
"""Test the Panasonic Viera setup process."""
|
|
|
|
from unittest.mock import Mock, patch
|
|
|
|
from homeassistant.components.panasonic_viera.const import (
|
|
ATTR_DEVICE_INFO,
|
|
ATTR_UDN,
|
|
DEFAULT_NAME,
|
|
DOMAIN,
|
|
)
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import CONF_HOST, STATE_UNAVAILABLE
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from .conftest import (
|
|
MOCK_CONFIG_DATA,
|
|
MOCK_DEVICE_INFO,
|
|
MOCK_ENCRYPTION_DATA,
|
|
get_mock_remote,
|
|
)
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
async def test_setup_entry_encrypted(hass: HomeAssistant, mock_remote) -> None:
|
|
"""Test setup with encrypted config entry."""
|
|
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()
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_entry_encrypted_missing_device_info(
|
|
hass: HomeAssistant, mock_remote
|
|
) -> None:
|
|
"""Test setup with encrypted config entry and missing device info."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_CONFIG_DATA[CONF_HOST],
|
|
data={**MOCK_CONFIG_DATA, **MOCK_ENCRYPTION_DATA},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_entry.data[ATTR_DEVICE_INFO] == MOCK_DEVICE_INFO
|
|
assert mock_entry.unique_id == MOCK_DEVICE_INFO[ATTR_UDN]
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_entry_encrypted_missing_device_info_none(
|
|
hass: HomeAssistant,
|
|
) -> None:
|
|
"""Test setup with encrypted config entry and device info set to None."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_CONFIG_DATA[CONF_HOST],
|
|
data={**MOCK_CONFIG_DATA, **MOCK_ENCRYPTION_DATA},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
mock_remote = get_mock_remote(device_info=None)
|
|
|
|
with patch(
|
|
"homeassistant.components.panasonic_viera.RemoteControl",
|
|
return_value=mock_remote,
|
|
):
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_entry.data[ATTR_DEVICE_INFO] is None
|
|
assert mock_entry.unique_id == MOCK_CONFIG_DATA[CONF_HOST]
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_entry_unencrypted(hass: HomeAssistant, mock_remote) -> None:
|
|
"""Test setup with unencrypted config entry."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_DEVICE_INFO[ATTR_UDN],
|
|
data={**MOCK_CONFIG_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()
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_entry_unencrypted_missing_device_info(
|
|
hass: HomeAssistant, mock_remote
|
|
) -> None:
|
|
"""Test setup with unencrypted config entry and missing device info."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_CONFIG_DATA[CONF_HOST],
|
|
data={**MOCK_CONFIG_DATA},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_entry.data[ATTR_DEVICE_INFO] == MOCK_DEVICE_INFO
|
|
assert mock_entry.unique_id == MOCK_DEVICE_INFO[ATTR_UDN]
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_entry_unencrypted_missing_device_info_none(
|
|
hass: HomeAssistant,
|
|
) -> None:
|
|
"""Test setup with unencrypted config entry and device info set to None."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_CONFIG_DATA[CONF_HOST],
|
|
data={**MOCK_CONFIG_DATA},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
mock_remote = get_mock_remote(device_info=None)
|
|
|
|
with patch(
|
|
"homeassistant.components.panasonic_viera.RemoteControl",
|
|
return_value=mock_remote,
|
|
):
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_entry.data[ATTR_DEVICE_INFO] is None
|
|
assert mock_entry.unique_id == MOCK_CONFIG_DATA[CONF_HOST]
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv
|
|
assert state_tv.name == DEFAULT_NAME
|
|
|
|
assert state_remote
|
|
assert state_remote.name == DEFAULT_NAME
|
|
|
|
|
|
async def test_setup_config_flow_initiated(hass: HomeAssistant) -> None:
|
|
"""Test if config flow is initiated in setup."""
|
|
mock_remote = get_mock_remote()
|
|
mock_remote.get_device_info = Mock(side_effect=OSError)
|
|
|
|
with patch(
|
|
"homeassistant.components.panasonic_viera.config_flow.RemoteControl",
|
|
return_value=mock_remote,
|
|
):
|
|
assert (
|
|
await async_setup_component(
|
|
hass,
|
|
DOMAIN,
|
|
{DOMAIN: {CONF_HOST: "0.0.0.0"}},
|
|
)
|
|
is True
|
|
)
|
|
|
|
assert len(hass.config_entries.flow.async_progress()) == 1
|
|
|
|
|
|
async def test_setup_unload_entry(hass: HomeAssistant, mock_remote) -> None:
|
|
"""Test if config entry is unloaded."""
|
|
mock_entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=MOCK_DEVICE_INFO[ATTR_UDN],
|
|
data={**MOCK_CONFIG_DATA},
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
await hass.config_entries.async_unload(mock_entry.entry_id)
|
|
assert mock_entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv.state == STATE_UNAVAILABLE
|
|
assert state_remote.state == STATE_UNAVAILABLE
|
|
|
|
await hass.config_entries.async_remove(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
state_tv = hass.states.get("media_player.panasonic_viera_tv")
|
|
state_remote = hass.states.get("remote.panasonic_viera_tv")
|
|
|
|
assert state_tv is None
|
|
assert state_remote is None
|