| 
					
				 | 
			
			
				@@ -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, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) 
			 |