|
@@ -1,3 +1,4 @@
|
|
|
+from typing import Any
|
|
|
from switchbot.adv_parser import parse_advertisement_data
|
|
|
from bleak.backends.scanner import AdvertisementData
|
|
|
from bleak.backends.device import BLEDevice
|
|
@@ -5,13 +6,32 @@ from bleak.backends.device import BLEDevice
|
|
|
from switchbot.models import SwitchBotAdvertisement
|
|
|
from switchbot import SwitchbotModel
|
|
|
|
|
|
+ADVERTISEMENT_DATA_DEFAULTS = {
|
|
|
+ "local_name": "",
|
|
|
+ "manufacturer_data": {},
|
|
|
+ "service_data": {},
|
|
|
+ "service_uuids": [],
|
|
|
+ "rssi": -127,
|
|
|
+ "platform_data": ((),),
|
|
|
+ "tx_power": -127,
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+def generate_advertisement_data(**kwargs: Any) -> AdvertisementData:
|
|
|
+ """Generate advertisement data with defaults."""
|
|
|
+ new = kwargs.copy()
|
|
|
+ for key, value in ADVERTISEMENT_DATA_DEFAULTS.items():
|
|
|
+ new.setdefault(key, value)
|
|
|
+ return AdvertisementData(**new)
|
|
|
+
|
|
|
|
|
|
def test_parse_advertisement_data_curtain():
|
|
|
"""Test parse_advertisement_data for curtain."""
|
|
|
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
|
|
|
- adv_data = AdvertisementData(
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
|
|
|
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"c\xc0X\x00\x11\x04"},
|
|
|
+ rssi=-80,
|
|
|
)
|
|
|
result = parse_advertisement_data(ble_device, adv_data)
|
|
|
assert result == SwitchBotAdvertisement(
|
|
@@ -32,13 +52,14 @@ def test_parse_advertisement_data_curtain():
|
|
|
"modelName": SwitchbotModel.CURTAIN,
|
|
|
},
|
|
|
device=ble_device,
|
|
|
+ rssi=-80,
|
|
|
)
|
|
|
|
|
|
|
|
|
def test_parse_advertisement_data_empty():
|
|
|
"""Test parse_advertisement_data with empty data does not blow up."""
|
|
|
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
|
|
|
- adv_data = AdvertisementData(
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
manufacturer_data={2409: b"\xe7\xabF\xac\x8f\x92|\x0f\x00\x11\x04"},
|
|
|
service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b""},
|
|
|
)
|
|
@@ -49,10 +70,11 @@ def test_parse_advertisement_data_empty():
|
|
|
def test_new_bot_firmware():
|
|
|
"""Test parsing adv data from new bot firmware."""
|
|
|
ble_device = BLEDevice("aa:bb:cc:dd:ee:ff", "any")
|
|
|
- adv_data = AdvertisementData(
|
|
|
+ adv_data = generate_advertisement_data(
|
|
|
manufacturer_data={89: b"\xd8.\xad\xcd\r\x85"},
|
|
|
service_data={"00000d00-0000-1000-8000-00805f9b34fb": b"H\x10\xe1"},
|
|
|
service_uuids=["CBA20D00-224D-11E6-9FB8-0002A5D5C51B"],
|
|
|
+ rssi=-90,
|
|
|
)
|
|
|
result = parse_advertisement_data(ble_device, adv_data)
|
|
|
assert result == SwitchBotAdvertisement(
|
|
@@ -66,4 +88,5 @@ def test_new_bot_firmware():
|
|
|
"modelName": SwitchbotModel.BOT,
|
|
|
},
|
|
|
device=ble_device,
|
|
|
+ rssi=-90,
|
|
|
)
|