Add Bang olufsen init testing (#119834)

This commit is contained in:
Markus Jacobsen 2024-06-21 08:35:38 +02:00 committed by GitHub
parent 353e4865e1
commit 1962759953
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 101 additions and 3 deletions

View File

@ -130,7 +130,6 @@ omit =
homeassistant/components/baf/sensor.py
homeassistant/components/baf/switch.py
homeassistant/components/baidu/tts.py
homeassistant/components/bang_olufsen/__init__.py
homeassistant/components/bang_olufsen/entity.py
homeassistant/components/bang_olufsen/media_player.py
homeassistant/components/bang_olufsen/util.py

View File

@ -1,10 +1,10 @@
"""Test fixtures for bang_olufsen."""
from unittest.mock import AsyncMock, patch
from collections.abc import Generator
from unittest.mock import AsyncMock, Mock, patch
from mozart_api.models import BeolinkPeer
import pytest
from typing_extensions import Generator
from homeassistant.components.bang_olufsen.const import DOMAIN
@ -44,10 +44,19 @@ def mock_mozart_client() -> Generator[AsyncMock]:
),
):
client = mock_client.return_value
# REST API client methods
client.get_beolink_self = AsyncMock()
client.get_beolink_self.return_value = BeolinkPeer(
friendly_name=TEST_FRIENDLY_NAME, jid=TEST_JID_1
)
# Non-REST API client methods
client.check_device_connection = AsyncMock()
client.close_api_client = AsyncMock()
client.connect_notifications = AsyncMock()
client.disconnect_notifications = Mock()
yield client

View File

@ -0,0 +1,90 @@
"""Test the bang_olufsen __init__."""
from aiohttp.client_exceptions import ServerTimeoutError
from homeassistant.components.bang_olufsen import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceRegistry
from .const import TEST_MODEL_BALANCE, TEST_NAME, TEST_SERIAL_NUMBER
async def test_setup_entry(
hass: HomeAssistant,
mock_config_entry,
mock_mozart_client,
device_registry: DeviceRegistry,
) -> None:
"""Test async_setup_entry."""
assert mock_config_entry.state == ConfigEntryState.NOT_LOADED
# Load entry
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
assert mock_config_entry.state == ConfigEntryState.LOADED
# Check that the device has been registered properly
device = device_registry.async_get_device(
identifiers={(DOMAIN, TEST_SERIAL_NUMBER)}
)
assert device is not None
assert device.name == TEST_NAME
assert device.model == TEST_MODEL_BALANCE
# Ensure that the connection has been checked WebSocket connection has been initialized
assert mock_mozart_client.check_device_connection.call_count == 1
assert mock_mozart_client.close_api_client.call_count == 0
assert mock_mozart_client.connect_notifications.call_count == 1
async def test_setup_entry_failed(
hass: HomeAssistant, mock_config_entry, mock_mozart_client
) -> None:
"""Test failed async_setup_entry."""
# Set the device connection check to fail
mock_mozart_client.check_device_connection.side_effect = ExceptionGroup(
"", (ServerTimeoutError(), TimeoutError())
)
assert mock_config_entry.state == ConfigEntryState.NOT_LOADED
# Load entry
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
assert mock_config_entry.state == ConfigEntryState.SETUP_RETRY
# Ensure that the connection has been checked, API client correctly closed
# and WebSocket connection has not been initialized
assert mock_mozart_client.check_device_connection.call_count == 1
assert mock_mozart_client.close_api_client.call_count == 1
assert mock_mozart_client.connect_notifications.call_count == 0
async def test_unload_entry(
hass: HomeAssistant, mock_config_entry, mock_mozart_client
) -> None:
"""Test unload_entry."""
# Load entry
assert mock_config_entry.state == ConfigEntryState.NOT_LOADED
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
assert mock_config_entry.state == ConfigEntryState.LOADED
# Unload entry
await hass.config_entries.async_unload(mock_config_entry.entry_id)
# Ensure WebSocket notification listener and REST API client have been closed
assert mock_mozart_client.disconnect_notifications.call_count == 1
assert mock_mozart_client.close_api_client.call_count == 1
# Ensure that the entry is not loaded and has been removed from hass
assert mock_config_entry.entry_id not in hass.data[DOMAIN]
assert mock_config_entry.state == ConfigEntryState.NOT_LOADED