22
33from __future__ import annotations
44
5- import pytest
6-
75from kasa import Device
86from kasa .smartcam .smartcammodule import SmartCamModule
97
@@ -32,79 +30,4 @@ async def test_battery(dev: Device):
3230 for feat_id in feat_ids :
3331 feat = dev .features .get (feat_id )
3432 assert feat
35- assert feat .value is not None
36-
37-
38- @battery_smartcam
39- async def test_battery_branches (dev : Device ):
40- """Exercise various battery property branches not covered by fixtures."""
41- battery = dev .modules .get (SmartCamModule .SmartCamBattery )
42- assert battery
43-
44- # Keep original sys_info and restore after test
45- orig_sys = dict (battery ._device .sys_info )
46- try :
47- # helper to replace the dict contents without rebinding the property
48- def set_sys (d : dict ):
49- battery ._device .sys_info .clear ()
50- battery ._device .sys_info .update (d )
51-
52- # battery_temperature: reported
53- set_sys ({"battery_temperature" : 12 })
54- assert battery .battery_temperature == 12
55-
56- # battery_temperature: not reported -> fallback 0
57- set_sys ({"battery_temperature" : None })
58- assert battery .battery_temperature == 0
59-
60- # battery_voltage: not available and no percent -> None
61- set_sys ({"battery_voltage" : None , "battery_percent" : None })
62- assert battery .battery_voltage is None
63-
64- # battery_voltage: derive from battery_percent (50%)
65- set_sys ({"battery_voltage" : None , "battery_percent" : 50 })
66- assert battery .battery_voltage == pytest .approx (3.0 + (50.0 / 100.0 ) * 1.2 )
67-
68- # battery_voltage: explicit NO and percent present
69- set_sys ({"battery_voltage" : "NO" , "battery_percent" : 75 })
70- assert battery .battery_voltage == pytest .approx (3.0 + (75.0 / 100.0 ) * 1.2 )
71-
72- # battery_voltage: numeric millivolts
73- set_sys ({"battery_voltage" : 4022 })
74- assert battery .battery_voltage == pytest .approx (4.022 )
75-
76- # battery_voltage: string numeric
77- set_sys ({"battery_voltage" : "4022" })
78- assert battery .battery_voltage == pytest .approx (4.022 )
79-
80- # battery_voltage: unparseable string -> None
81- set_sys ({"battery_voltage" : "N/A" , "battery_percent" : None })
82- assert battery .battery_voltage is None
83-
84- # battery_charging: explicit boolean
85- set_sys ({"battery_charging" : True })
86- assert battery .battery_charging is True
87- set_sys ({"battery_charging" : False })
88- assert battery .battery_charging is False
89-
90- # battery_charging: explicit strings
91- set_sys ({"battery_charging" : "NO" })
92- assert battery .battery_charging is False
93- set_sys ({"battery_charging" : "YES" })
94- assert battery .battery_charging is True
95-
96- # battery_charging: fallback to voltage presence
97- set_sys ({"battery_charging" : None , "battery_voltage" : None })
98- assert battery .battery_charging is False
99- set_sys ({"battery_charging" : None , "battery_voltage" : "NO" })
100- assert battery .battery_charging is False
101- set_sys ({"battery_charging" : None , "battery_voltage" : 4000 })
102- assert battery .battery_charging is True
103-
104- # battery_percent and battery_low simple getters
105- set_sys ({"battery_percent" : 42 , "low_battery" : True })
106- assert battery .battery_percent == 42
107- assert battery .battery_low is True
108- finally :
109- battery ._device .sys_info .clear ()
110- battery ._device .sys_info .update (orig_sys )
33+ assert feat .value is not None
0 commit comments