"""Tests for the Bluetooth integration.""" from unittest.mock import patch import bleak from bleak.backends.device import BLEDevice import bleak_retry_connector from homeassistant.components.bluetooth.usage import ( install_multiple_bleak_catcher, uninstall_multiple_bleak_catcher, ) from homeassistant.components.bluetooth.wrappers import ( HaBleakClientWrapper, HaBleakScannerWrapper, ) from . import _get_manager MOCK_BLE_DEVICE = BLEDevice( "00:00:00:00:00:00", "any", delegate="", details={"path": "/dev/hci0/device"} ) async def test_multiple_bleak_scanner_instances(hass): """Test creating multiple BleakScanners without an integration.""" install_multiple_bleak_catcher() instance = bleak.BleakScanner() assert isinstance(instance, HaBleakScannerWrapper) uninstall_multiple_bleak_catcher() with patch("bleak.get_platform_scanner_backend_type"): instance = bleak.BleakScanner() assert not isinstance(instance, HaBleakScannerWrapper) async def test_wrapping_bleak_client(hass, enable_bluetooth): """Test we wrap BleakClient.""" install_multiple_bleak_catcher() instance = bleak.BleakClient(MOCK_BLE_DEVICE) assert isinstance(instance, HaBleakClientWrapper) uninstall_multiple_bleak_catcher() instance = bleak.BleakClient(MOCK_BLE_DEVICE) assert not isinstance(instance, HaBleakClientWrapper) async def test_bleak_client_reports_with_address(hass, enable_bluetooth, caplog): """Test we report when we pass an address to BleakClient.""" install_multiple_bleak_catcher() with patch.object( _get_manager(), "async_ble_device_from_address", return_value=MOCK_BLE_DEVICE, ): instance = bleak.BleakClient("00:00:00:00:00:00") assert "BleakClient with an address instead of a BLEDevice" in caplog.text assert isinstance(instance, HaBleakClientWrapper) uninstall_multiple_bleak_catcher() caplog.clear() instance = bleak.BleakClient("00:00:00:00:00:00") assert not isinstance(instance, HaBleakClientWrapper) assert "BleakClient with an address instead of a BLEDevice" not in caplog.text async def test_bleak_retry_connector_client_reports_with_address( hass, enable_bluetooth, caplog ): """Test we report when we pass an address to BleakClientWithServiceCache.""" install_multiple_bleak_catcher() with patch.object( _get_manager(), "async_ble_device_from_address", return_value=MOCK_BLE_DEVICE, ): instance = bleak_retry_connector.BleakClientWithServiceCache( "00:00:00:00:00:00" ) assert "BleakClient with an address instead of a BLEDevice" in caplog.text assert isinstance(instance, HaBleakClientWrapper) uninstall_multiple_bleak_catcher() caplog.clear() instance = bleak_retry_connector.BleakClientWithServiceCache("00:00:00:00:00:00") assert not isinstance(instance, HaBleakClientWrapper) assert "BleakClient with an address instead of a BLEDevice" not in caplog.text