mirror of https://github.com/home-assistant/core
155 lines
4.8 KiB
Python
155 lines
4.8 KiB
Python
"""Tests for the Fully Kiosk Browser integration."""
|
|
|
|
import json
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from fullykiosk import FullyKioskError
|
|
import pytest
|
|
|
|
from homeassistant.components.fully_kiosk.const import DOMAIN
|
|
from homeassistant.components.fully_kiosk.entity import valid_global_mac_address
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import (
|
|
CONF_HOST,
|
|
CONF_MAC,
|
|
CONF_PASSWORD,
|
|
CONF_SSL,
|
|
CONF_VERIFY_SSL,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
|
|
|
|
async def test_load_unload_config_entry(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
mock_fully_kiosk: MagicMock,
|
|
) -> None:
|
|
"""Test the Fully Kiosk Browser configuration entry loading/unloading."""
|
|
mock_config_entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_config_entry.state is ConfigEntryState.LOADED
|
|
assert len(mock_fully_kiosk.getDeviceInfo.mock_calls) == 1
|
|
assert len(mock_fully_kiosk.getSettings.mock_calls) == 1
|
|
|
|
await hass.config_entries.async_unload(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert not hass.data.get(DOMAIN)
|
|
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"side_effect",
|
|
[FullyKioskError("error", "status"), TimeoutError],
|
|
)
|
|
async def test_config_entry_not_ready(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
mock_fully_kiosk: MagicMock,
|
|
side_effect: Exception,
|
|
) -> None:
|
|
"""Test the Fully Kiosk Browser configuration entry not ready."""
|
|
mock_fully_kiosk.getDeviceInfo.side_effect = side_effect
|
|
|
|
mock_config_entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY
|
|
|
|
|
|
async def _load_config(
|
|
hass: HomeAssistant,
|
|
config_entry: MockConfigEntry,
|
|
device_info_fixture: str,
|
|
) -> None:
|
|
with patch(
|
|
"homeassistant.components.fully_kiosk.coordinator.FullyKiosk",
|
|
autospec=True,
|
|
) as client_mock:
|
|
client = client_mock.return_value
|
|
client.getDeviceInfo.return_value = json.loads(
|
|
load_fixture(device_info_fixture, DOMAIN)
|
|
)
|
|
client.getSettings.return_value = json.loads(
|
|
load_fixture("listsettings.json", DOMAIN)
|
|
)
|
|
|
|
config_entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
|
|
async def test_multiple_kiosk_with_empty_mac(
|
|
hass: HomeAssistant,
|
|
entity_registry: er.EntityRegistry,
|
|
device_registry: dr.DeviceRegistry,
|
|
) -> None:
|
|
"""Test that multiple kiosk devices with empty MAC don't get merged."""
|
|
config_entry1 = MockConfigEntry(
|
|
title="Test device 1",
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: "127.0.0.1",
|
|
CONF_PASSWORD: "mocked-password",
|
|
CONF_MAC: "",
|
|
CONF_SSL: False,
|
|
CONF_VERIFY_SSL: False,
|
|
},
|
|
unique_id="111111",
|
|
)
|
|
await _load_config(hass, config_entry1, "deviceinfo_empty_mac1.json")
|
|
assert len(device_registry.devices) == 1
|
|
|
|
config_entry2 = MockConfigEntry(
|
|
title="Test device 2",
|
|
domain=DOMAIN,
|
|
data={
|
|
CONF_HOST: "127.0.0.2",
|
|
CONF_PASSWORD: "mocked-password",
|
|
CONF_MAC: "",
|
|
CONF_SSL: True,
|
|
CONF_VERIFY_SSL: False,
|
|
},
|
|
unique_id="22222",
|
|
)
|
|
await _load_config(hass, config_entry2, "deviceinfo_empty_mac2.json")
|
|
assert len(device_registry.devices) == 2
|
|
|
|
state1 = hass.states.get("sensor.test_kiosk_1_battery")
|
|
assert state1
|
|
|
|
state2 = hass.states.get("sensor.test_kiosk_2_battery")
|
|
assert state2
|
|
|
|
entry1 = entity_registry.async_get("sensor.test_kiosk_1_battery")
|
|
assert entry1
|
|
assert entry1.unique_id == "abcdef-111111-batteryLevel"
|
|
|
|
entry2 = entity_registry.async_get("sensor.test_kiosk_2_battery")
|
|
assert entry2
|
|
assert entry2.unique_id == "abcdef-222222-batteryLevel"
|
|
|
|
assert entry1.device_id != entry2.device_id
|
|
|
|
device1 = device_registry.async_get(entry1.device_id)
|
|
assert device1
|
|
|
|
device2 = device_registry.async_get(entry2.device_id)
|
|
assert device2
|
|
|
|
assert device1 != device2
|
|
|
|
|
|
async def test_valid_global_mac_address() -> None:
|
|
"""Test valid_global_mac_address function."""
|
|
assert valid_global_mac_address("a1:bb:cc:dd:ee:ff")
|
|
assert not valid_global_mac_address("02:00:00:00:00:00")
|
|
assert not valid_global_mac_address(None)
|
|
assert not valid_global_mac_address("foobar")
|