mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 19:53:34 +00:00
9473d97ad2
Introduce common module interfaces across smart and iot devices and provide better typing implementation for getting modules to support this.
81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
import pytest
|
|
from pytest_mock import MockerFixture
|
|
|
|
from kasa import Module
|
|
from kasa.smart import SmartDevice
|
|
from kasa.tests.device_fixtures import parametrize
|
|
|
|
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 = dev.modules.get(Module.Fan)
|
|
assert fan
|
|
|
|
level_feature = fan._module_features["fan_speed_level"]
|
|
assert (
|
|
level_feature.minimum_value
|
|
<= level_feature.value
|
|
<= level_feature.maximum_value
|
|
)
|
|
|
|
call = mocker.spy(fan, "call")
|
|
await fan.set_fan_speed_level(3)
|
|
call.assert_called_with(
|
|
"set_device_info", {"device_on": True, "fan_speed_level": 3}
|
|
)
|
|
|
|
await dev.update()
|
|
|
|
assert fan.fan_speed_level == 3
|
|
assert level_feature.value == 3
|
|
|
|
|
|
@fan
|
|
async def test_sleep_mode(dev: SmartDevice, mocker: MockerFixture):
|
|
"""Test sleep mode feature."""
|
|
fan = dev.modules.get(Module.Fan)
|
|
assert fan
|
|
sleep_feature = fan._module_features["fan_sleep_mode"]
|
|
assert isinstance(sleep_feature.value, bool)
|
|
|
|
call = mocker.spy(fan, "call")
|
|
await fan.set_sleep_mode(True)
|
|
call.assert_called_with("set_device_info", {"fan_sleep_mode_on": True})
|
|
|
|
await dev.update()
|
|
|
|
assert fan.sleep_mode is True
|
|
assert sleep_feature.value is True
|
|
|
|
|
|
@fan
|
|
async def test_fan_interface(dev: SmartDevice, mocker: MockerFixture):
|
|
"""Test fan speed on device interface."""
|
|
assert isinstance(dev, SmartDevice)
|
|
fan = dev.modules.get(Module.Fan)
|
|
assert fan
|
|
device = fan._device
|
|
assert device.is_fan
|
|
|
|
await device.set_fan_speed_level(1)
|
|
await dev.update()
|
|
assert device.fan_speed_level == 1
|
|
assert device.is_on
|
|
|
|
await device.set_fan_speed_level(4)
|
|
await dev.update()
|
|
assert device.fan_speed_level == 4
|
|
|
|
await device.set_fan_speed_level(0)
|
|
await dev.update()
|
|
assert not device.is_on
|
|
|
|
with pytest.raises(ValueError):
|
|
await device.set_fan_speed_level(-1)
|
|
|
|
with pytest.raises(ValueError):
|
|
await device.set_fan_speed_level(5)
|