1+ import pytest
12from aioesphomeapi import (
3+ APIClient ,
24 BluetoothLERawAdvertisement ,
35 BluetoothLERawAdvertisementsResponse ,
6+ BluetoothScannerMode ,
7+ BluetoothScannerStateResponse ,
48)
59from bluetooth_data_tools import int_to_bluetooth_address
6- from habluetooth import BaseHaRemoteScanner , HaBluetoothConnector , get_manager
10+ from habluetooth import (
11+ BaseHaRemoteScanner ,
12+ BluetoothScanningMode ,
13+ HaBluetoothConnector ,
14+ get_manager ,
15+ )
716
817from bleak_esphome .backend .client import ESPHomeClientData
918from bleak_esphome .backend .scanner import ESPHomeScanner
1221ESP_NAME = "proxy"
1322
1423
15- def test_scanner () -> None :
24+ @pytest .fixture
25+ def scanner () -> ESPHomeScanner :
26+ """Fixture to create an ESPHomeScanner instance."""
1627 connector = HaBluetoothConnector (ESPHomeClientData , ESP_MAC_ADDRESS , lambda : True )
17- scanner = ESPHomeScanner (ESP_MAC_ADDRESS , ESP_NAME , connector , True )
28+ return ESPHomeScanner (ESP_MAC_ADDRESS , ESP_NAME , connector , True )
29+
30+
31+ def test_scanner (scanner : ESPHomeScanner ) -> None :
1832 assert isinstance (scanner , BaseHaRemoteScanner )
1933
2034
21- def test_scanner_async_on_advertisement () -> None :
22- connector = HaBluetoothConnector (ESPHomeClientData , ESP_MAC_ADDRESS , lambda : True )
23- scanner = ESPHomeScanner (ESP_MAC_ADDRESS , ESP_NAME , connector , True )
35+ def test_scanner_async_on_advertisement (scanner : ESPHomeScanner ) -> None :
2436 adv = BluetoothLERawAdvertisementsResponse (
2537 advertisements = [
2638 BluetoothLERawAdvertisement (
@@ -45,3 +57,26 @@ def test_scanner_async_on_advertisement() -> None:
4557 assert manager .async_last_service_info (
4658 int_to_bluetooth_address (246965243285491 ), True
4759 )
60+
61+
62+ def test_scanner_async_update_scanner_state (
63+ scanner : ESPHomeScanner , mock_client : APIClient
64+ ) -> None :
65+ mock_client .subscribe_bluetooth_scanner_state (scanner .async_update_scanner_state )
66+ scanner .async_update_scanner_state (
67+ BluetoothScannerStateResponse (
68+ mode = BluetoothScannerMode .ACTIVE ,
69+ )
70+ )
71+ assert scanner .current_mode == BluetoothScanningMode .ACTIVE
72+ assert scanner .requested_mode == BluetoothScanningMode .ACTIVE
73+ scanner .async_update_scanner_state (
74+ BluetoothScannerStateResponse (
75+ mode = BluetoothScannerMode .PASSIVE ,
76+ )
77+ )
78+ assert scanner .current_mode == BluetoothScanningMode .PASSIVE
79+ assert scanner .requested_mode == BluetoothScanningMode .PASSIVE
80+ scanner .async_update_scanner_state (BluetoothScannerStateResponse (mode = None ))
81+ assert scanner .current_mode is None
82+ assert scanner .requested_mode is None
0 commit comments