85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
"""The tests for the LG webOS TV platform."""
|
|
|
|
from unittest.mock import Mock
|
|
|
|
from aiowebostv import WebOsTvPairError
|
|
import pytest
|
|
|
|
from homeassistant.components.media_player import ATTR_INPUT_SOURCE_LIST
|
|
from homeassistant.components.webostv.const import CONF_SOURCES, DOMAIN
|
|
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState
|
|
from homeassistant.const import CONF_CLIENT_SECRET, EVENT_HOMEASSISTANT_STOP
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import setup_webostv
|
|
from .const import ENTITY_ID
|
|
|
|
|
|
async def test_reauth_setup_entry(
|
|
hass: HomeAssistant, client, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
"""Test reauth flow triggered by setup entry."""
|
|
monkeypatch.setattr(client, "is_connected", Mock(return_value=False))
|
|
monkeypatch.setattr(client, "connect", Mock(side_effect=WebOsTvPairError))
|
|
entry = await setup_webostv(hass)
|
|
|
|
assert entry.state is ConfigEntryState.SETUP_ERROR
|
|
|
|
flows = hass.config_entries.flow.async_progress()
|
|
assert len(flows) == 1
|
|
|
|
flow = flows[0]
|
|
assert flow.get("step_id") == "reauth_confirm"
|
|
assert flow.get("handler") == DOMAIN
|
|
|
|
assert "context" in flow
|
|
assert flow["context"].get("source") == SOURCE_REAUTH
|
|
assert flow["context"].get("entry_id") == entry.entry_id
|
|
|
|
|
|
async def test_key_update_setup_entry(
|
|
hass: HomeAssistant, client, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
"""Test key update from setup entry."""
|
|
monkeypatch.setattr(client, "client_key", "new_key")
|
|
entry = await setup_webostv(hass)
|
|
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
assert entry.data[CONF_CLIENT_SECRET] == "new_key"
|
|
|
|
|
|
async def test_update_options(hass: HomeAssistant, client) -> None:
|
|
"""Test update options triggers reload."""
|
|
config_entry = await setup_webostv(hass)
|
|
|
|
assert config_entry.state is ConfigEntryState.LOADED
|
|
assert config_entry.update_listeners is not None
|
|
sources = hass.states.get(ENTITY_ID).attributes[ATTR_INPUT_SOURCE_LIST]
|
|
assert sources == ["Input01", "Input02", "Live TV"]
|
|
|
|
# remove Input01 and reload
|
|
new_options = config_entry.options.copy()
|
|
new_options[CONF_SOURCES] = ["Input02", "Live TV"]
|
|
hass.config_entries.async_update_entry(config_entry, options=new_options)
|
|
await hass.async_block_till_done()
|
|
|
|
assert config_entry.state is ConfigEntryState.LOADED
|
|
sources = hass.states.get(ENTITY_ID).attributes[ATTR_INPUT_SOURCE_LIST]
|
|
assert sources == ["Input02", "Live TV"]
|
|
|
|
|
|
async def test_disconnect_on_stop(hass: HomeAssistant, client) -> None:
|
|
"""Test we disconnect the client and clear callbacks when Home Assistants stops."""
|
|
config_entry = await setup_webostv(hass)
|
|
|
|
assert client.disconnect.call_count == 0
|
|
assert client.clear_state_update_callbacks.call_count == 0
|
|
assert config_entry.state is ConfigEntryState.LOADED
|
|
|
|
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
|
|
await hass.async_block_till_done()
|
|
|
|
assert client.disconnect.call_count == 1
|
|
assert client.clear_state_update_callbacks.call_count == 1
|
|
assert config_entry.state is ConfigEntryState.LOADED
|