Support for new ks240 fan/light wall switch (#839)

In order to support the ks240 which has children for the fan and light
components, this PR adds those modules at the parent level and hides the
children so it looks like a single device to consumers. It also decides
which modules not to take from the child because the child does not
support them even though it say it does. It does this for now via a
fixed list, e.g. `Time`, `Firmware` etc.

Also adds fixtures from two versions and corresponding tests.
This commit is contained in:
Steven B
2024-04-24 19:17:49 +01:00
committed by GitHub
parent 65874c0365
commit eff8db450d
13 changed files with 1067 additions and 20 deletions

View File

@@ -1,18 +1,17 @@
from pytest_mock import MockerFixture
from kasa import SmartDevice
from kasa.smart.modules import FanModule
from kasa.tests.device_fixtures import parametrize
fan = parametrize(
"has fan", component_filter="fan_control", protocol_filter={"SMART.CHILD"}
)
fan = parametrize("has fan", component_filter="fan_control", protocol_filter={"SMART"})
@fan
async def test_fan_speed(dev: SmartDevice, mocker: MockerFixture):
"""Test fan speed feature."""
fan: FanModule = dev.modules["FanModule"]
fan = dev.modules.get("FanModule")
assert fan
level_feature = fan._module_features["fan_speed_level"]
assert (
level_feature.minimum_value
@@ -22,7 +21,7 @@ async def test_fan_speed(dev: SmartDevice, mocker: MockerFixture):
call = mocker.spy(fan, "call")
await fan.set_fan_speed_level(3)
call.assert_called_with("set_device_info", {"fan_sleep_level": 3})
call.assert_called_with("set_device_info", {"fan_speed_level": 3})
await dev.update()
@@ -33,7 +32,8 @@ async def test_fan_speed(dev: SmartDevice, mocker: MockerFixture):
@fan
async def test_sleep_mode(dev: SmartDevice, mocker: MockerFixture):
"""Test sleep mode feature."""
fan: FanModule = dev.modules["FanModule"]
fan = dev.modules.get("FanModule")
assert fan
sleep_feature = fan._module_features["fan_sleep_mode"]
assert isinstance(sleep_feature.value, bool)