1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 02:48:57 +00:00
Files
core/tests/components/inels/test_init.py
2025-10-23 16:55:29 +02:00

103 lines
3.3 KiB
Python

"""Tests for iNELS integration."""
from unittest.mock import ANY, AsyncMock, patch
import pytest
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from . import HA_INELS_PATH
from .common import DOMAIN, inels
from tests.common import MockConfigEntry
from tests.typing import MqttMockHAClient
async def test_ha_mqtt_publish(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient
) -> None:
"""Test that MQTT publish function works correctly."""
config_entry = MockConfigEntry(domain=DOMAIN, data={})
config_entry.add_to_hass(hass)
with (
patch(f"{HA_INELS_PATH}.InelsDiscovery") as mock_discovery_class,
patch(
"homeassistant.config_entries.ConfigEntries.async_forward_entry_setups",
return_value=None,
),
):
mock_discovery = AsyncMock()
mock_discovery.start.return_value = []
mock_discovery_class.return_value = mock_discovery
await inels.async_setup_entry(hass, config_entry)
topic, payload, qos, retain = "test/topic", "test_payload", 1, True
await config_entry.runtime_data.mqtt.publish(topic, payload, qos, retain)
mqtt_mock.async_publish.assert_called_once_with(topic, payload, qos, retain)
async def test_ha_mqtt_subscribe(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient
) -> None:
"""Test that MQTT subscribe function works correctly."""
config_entry = MockConfigEntry(domain=DOMAIN, data={})
config_entry.add_to_hass(hass)
with (
patch(f"{HA_INELS_PATH}.InelsDiscovery") as mock_discovery_class,
patch(
"homeassistant.config_entries.ConfigEntries.async_forward_entry_setups",
return_value=None,
),
):
mock_discovery = AsyncMock()
mock_discovery.start.return_value = []
mock_discovery_class.return_value = mock_discovery
await inels.async_setup_entry(hass, config_entry)
topic = "test/topic"
await config_entry.runtime_data.mqtt.subscribe(topic)
mqtt_mock.async_subscribe.assert_any_call(topic, ANY, 0, "utf-8", None)
async def test_ha_mqtt_not_available(
hass: HomeAssistant, mqtt_mock: MqttMockHAClient
) -> None:
"""Test that ConfigEntryNotReady is raised when MQTT is not available."""
config_entry = MockConfigEntry(domain=DOMAIN, data={})
config_entry.add_to_hass(hass)
with (
patch(
"homeassistant.components.mqtt.async_wait_for_mqtt_client",
return_value=False,
),
pytest.raises(ConfigEntryNotReady, match="MQTT integration not available"),
):
await inels.async_setup_entry(hass, config_entry)
async def test_unload_entry(hass: HomeAssistant, mock_mqtt) -> None:
"""Test unload entry."""
config_entry = MockConfigEntry(domain=DOMAIN, data={})
config_entry.add_to_hass(hass)
config_entry.runtime_data = inels.InelsData(mqtt=mock_mqtt, devices=[])
with patch(
"homeassistant.config_entries.ConfigEntries.async_unload_platforms",
return_value=True,
) as mock_unload_platforms:
result = await inels.async_unload_entry(hass, config_entry)
assert result is True
mock_mqtt.unsubscribe_topics.assert_called_once()
mock_mqtt.unsubscribe_listeners.assert_called_once()
mock_unload_platforms.assert_called_once()