1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-01 11:46:40 +01:00
Files
core/tests/components/wmspro/test_init.py
T
2026-06-22 17:41:27 +02:00

106 lines
3.6 KiB
Python

"""Test the wmspro initialization."""
from pathlib import Path
from unittest.mock import AsyncMock
import aiohttp
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.wmspro.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.storage import STORAGE_DIR
from . import remove_config_entry, setup_config_entry, unload_config_entry
from tests.common import MockConfigEntry
async def test_config_entry_device_config_ping_failed(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_hub_ping: AsyncMock,
) -> None:
"""Test that a config entry will be retried due to ConfigEntryNotReady."""
mock_hub_ping.side_effect = aiohttp.ClientError
assert not await setup_config_entry(hass, mock_config_entry)
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY
assert len(mock_hub_ping.mock_calls) == 1
async def test_config_entry_device_config_refresh_failed(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_hub_ping: AsyncMock,
mock_hub_refresh: AsyncMock,
) -> None:
"""Test that a config entry will be retried due to ConfigEntryNotReady."""
mock_hub_refresh.side_effect = aiohttp.ClientError
assert not await setup_config_entry(hass, mock_config_entry)
assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY
assert len(mock_hub_ping.mock_calls) == 1
assert len(mock_hub_refresh.mock_calls) == 1
async def test_config_entry_persistent_storage(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_hub_ping: AsyncMock,
mock_hub_refresh: AsyncMock,
) -> None:
"""Test that a config entry will use and cleanup persistent storage."""
config_dir = Path(
hass.config.path(STORAGE_DIR, f"{DOMAIN}-{mock_config_entry.entry_id}")
)
assert await setup_config_entry(hass, mock_config_entry)
assert config_dir.is_dir() # created during setup
assert await unload_config_entry(hass, mock_config_entry)
assert config_dir.is_dir() # NOT removed, but kept during unload
assert await remove_config_entry(hass, mock_config_entry)
assert not config_dir.is_dir() # removed during removal
@pytest.mark.parametrize(
("mock_hub_configuration", "mock_hub_status"),
[
("config_prod_awning_dimmer.json", "status_prod_awning.json"),
("config_prod_awning_dimmer.json", "status_prod_dimmer.json"),
("config_prod_roller_shutter.json", "status_prod_roller_shutter.json"),
],
indirect=True,
)
async def test_device_setup(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_hub_ping: AsyncMock,
mock_hub_configuration: AsyncMock,
mock_hub_status: AsyncMock,
device_registry: dr.DeviceRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test that the device is created correctly."""
assert await setup_config_entry(hass, mock_config_entry)
assert len(mock_hub_ping.mock_calls) == 1
assert len(mock_hub_configuration.mock_calls) == 1
assert len(mock_hub_status.mock_calls) > 0
device_entries = device_registry.devices.get_devices_for_config_entry_id(
mock_config_entry.entry_id
)
assert len(device_entries) > 1
device_entries = list(
filter(
lambda e: e.identifiers != {(DOMAIN, mock_config_entry.entry_id)},
device_entries,
)
)
assert len(device_entries) > 0
for device_entry in device_entries:
assert device_entry == snapshot(name=f"device-{device_entry.serial_number}")