1
0
mirror of https://github.com/home-assistant/core.git synced 2026-08-06 13:26:29 +01:00
Files
core/tests/components/midea/test_init.py
T
2026-07-23 20:50:47 +02:00

110 lines
3.5 KiB
Python

"""Tests for midea __init__.py."""
from unittest.mock import patch
from midealocal.const import DeviceType, ProtocolVersion
from homeassistant.components.midea.const import CONF_KEY, CONF_SUBTYPE, DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import (
CONF_DEVICE_ID,
CONF_IP_ADDRESS,
CONF_MODEL,
CONF_NAME,
CONF_PORT,
CONF_PROTOCOL,
CONF_TOKEN,
CONF_TYPE,
)
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from .conftest import DummyDevice
from .const import TEST_DEVICE_ID
from tests.common import MockConfigEntry
_ENTRY_DATA = {
CONF_DEVICE_ID: TEST_DEVICE_ID,
CONF_NAME: "m",
CONF_TYPE: DeviceType.AC,
CONF_IP_ADDRESS: "1.1.1.1",
CONF_PORT: 6444,
CONF_MODEL: "m",
CONF_PROTOCOL: ProtocolVersion.V2,
CONF_TOKEN: "",
CONF_KEY: "",
CONF_SUBTYPE: 0,
}
async def test_async_setup(hass: HomeAssistant) -> None:
"""Test the midea domain can be set up without any config entries."""
assert await async_setup_component(hass, DOMAIN, {})
async def test_unload_entry(hass: HomeAssistant) -> None:
"""Test async_unload_entry unloads platforms and closes the device."""
entry = MockConfigEntry(domain=DOMAIN, data=_ENTRY_DATA)
entry.add_to_hass(hass)
device = DummyDevice(DeviceType.AC)
with patch(
"homeassistant.components.midea.device_selector",
return_value=device,
):
await hass.config_entries.async_setup(entry.entry_id)
assert entry.state is ConfigEntryState.LOADED
assert device.daemon is True
assert await hass.config_entries.async_unload(entry.entry_id)
assert entry.state is ConfigEntryState.NOT_LOADED
assert ("close",) in device.calls
async def test_async_setup_entry_paths(hass: HomeAssistant) -> None:
"""Test async_setup_entry for success and no-device return."""
entry = MockConfigEntry(domain=DOMAIN, data=_ENTRY_DATA)
entry.add_to_hass(hass)
with patch(
"homeassistant.components.midea.device_selector",
return_value=DummyDevice(DeviceType.AC),
):
await hass.config_entries.async_setup(entry.entry_id)
assert entry.state is ConfigEntryState.LOADED
entry2 = MockConfigEntry(
domain=DOMAIN,
data={**_ENTRY_DATA, CONF_DEVICE_ID: TEST_DEVICE_ID + 1},
)
entry2.add_to_hass(hass)
with patch(
"homeassistant.components.midea.device_selector",
return_value=None,
):
await hass.config_entries.async_setup(entry2.entry_id)
assert entry2.state is ConfigEntryState.SETUP_ERROR
async def test_setup_entry_not_ready_on_connect_failure(
hass: HomeAssistant,
) -> None:
"""Test async_setup_entry raises ConfigEntryNotReady when connect returns False.
The real device.connect() already catches SocketException/AuthException
internally and reports failure by returning False; it never raises them.
It can also leave the socket open in that case (e.g. when authentication
fails), so the socket must be closed explicitly to avoid a ResourceWarning.
"""
entry = MockConfigEntry(domain=DOMAIN, data=_ENTRY_DATA)
entry.add_to_hass(hass)
device = DummyDevice(DeviceType.AC)
with (
patch(
"homeassistant.components.midea.device_selector",
return_value=device,
),
patch.object(device, "connect", return_value=False),
):
await hass.config_entries.async_setup(entry.entry_id)
assert entry.state is ConfigEntryState.SETUP_RETRY
assert ("close_socket",) in device.calls