1+ from typing import Any
12from switchbot .adv_parser import parse_advertisement_data
23from bleak .backends .scanner import AdvertisementData
34from bleak .backends .device import BLEDevice
45
56from switchbot .models import SwitchBotAdvertisement
67from switchbot import SwitchbotModel
78
9+ ADVERTISEMENT_DATA_DEFAULTS = {
10+ "local_name" : "" ,
11+ "manufacturer_data" : {},
12+ "service_data" : {},
13+ "service_uuids" : [],
14+ "rssi" : - 127 ,
15+ "platform_data" : ((),),
16+ "tx_power" : - 127 ,
17+ }
18+
19+
20+ def generate_advertisement_data (** kwargs : Any ) -> AdvertisementData :
21+ """Generate advertisement data with defaults."""
22+ new = kwargs .copy ()
23+ for key , value in ADVERTISEMENT_DATA_DEFAULTS .items ():
24+ new .setdefault (key , value )
25+ return AdvertisementData (** new )
26+
827
928def test_parse_advertisement_data_curtain ():
1029 """Test parse_advertisement_data for curtain."""
1130 ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
12- adv_data = AdvertisementData (
31+ adv_data = generate_advertisement_data (
1332 manufacturer_data = {2409 : b"\xe7 \xab F\xac \x8f \x92 |\x0f \x00 \x11 \x04 " },
1433 service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"c\xc0 X\x00 \x11 \x04 " },
34+ rssi = - 80 ,
1535 )
1636 result = parse_advertisement_data (ble_device , adv_data )
1737 assert result == SwitchBotAdvertisement (
@@ -32,13 +52,14 @@ def test_parse_advertisement_data_curtain():
3252 "modelName" : SwitchbotModel .CURTAIN ,
3353 },
3454 device = ble_device ,
55+ rssi = - 80 ,
3556 )
3657
3758
3859def test_parse_advertisement_data_empty ():
3960 """Test parse_advertisement_data with empty data does not blow up."""
4061 ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
41- adv_data = AdvertisementData (
62+ adv_data = generate_advertisement_data (
4263 manufacturer_data = {2409 : b"\xe7 \xab F\xac \x8f \x92 |\x0f \x00 \x11 \x04 " },
4364 service_data = {"0000fd3d-0000-1000-8000-00805f9b34fb" : b"" },
4465 )
@@ -49,10 +70,11 @@ def test_parse_advertisement_data_empty():
4970def test_new_bot_firmware ():
5071 """Test parsing adv data from new bot firmware."""
5172 ble_device = BLEDevice ("aa:bb:cc:dd:ee:ff" , "any" )
52- adv_data = AdvertisementData (
73+ adv_data = generate_advertisement_data (
5374 manufacturer_data = {89 : b"\xd8 .\xad \xcd \r \x85 " },
5475 service_data = {"00000d00-0000-1000-8000-00805f9b34fb" : b"H\x10 \xe1 " },
5576 service_uuids = ["CBA20D00-224D-11E6-9FB8-0002A5D5C51B" ],
77+ rssi = - 90 ,
5678 )
5779 result = parse_advertisement_data (ble_device , adv_data )
5880 assert result == SwitchBotAdvertisement (
@@ -66,4 +88,5 @@ def test_new_bot_firmware():
6688 "modelName" : SwitchbotModel .BOT ,
6789 },
6890 device = ble_device ,
91+ rssi = - 90 ,
6992 )
0 commit comments