1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
"""Test of vacuum devices."""
from collections.abc import Iterable
from typing import List, Sequence, Tuple, Type
import pytest
from miio.device import Device
from miio.integrations.vacuum.roborock.vacuum import ROCKROBO_V1
from miio.interfaces import VacuumInterface
# list of all supported vacuum classes
VACUUM_CLASSES: Tuple[Type[VacuumInterface], ...] = tuple(
cl for cl in VacuumInterface.__subclasses__() # type: ignore
)
def _all_vacuum_models() -> Sequence[Tuple[Type[Device], str]]:
""":return: list of tuples with supported vacuum models with corresponding class"""
result: List[Tuple[Type[Device], str]] = []
for cls in VACUUM_CLASSES:
assert issubclass(cls, Device)
vacuum_models = cls.supported_models
assert isinstance(vacuum_models, Iterable)
for model in vacuum_models:
result.append((cls, model))
return result # type: ignore
@pytest.mark.parametrize("cls, model", _all_vacuum_models())
def test_vacuum_fan_speed_presets(cls: Type[Device], model: str) -> None:
"""Test method VacuumInterface.fan_speed_presets()"""
if model == ROCKROBO_V1:
return # this model cannot be tested because presets depends on firmware
dev = cls("127.0.0.1", "68ffffffffffffffffffffffffffffff", model=model)
assert isinstance(dev, VacuumInterface)
presets = dev.fan_speed_presets()
assert presets is not None, "presets must be defined"
assert bool(presets), "presets cannot be empty"
assert isinstance(presets, dict), "presets must be dictionary"
for name, value in presets.items():
assert isinstance(name, str), "presets key must be string"
assert name, "presets key cannot be empty"
assert isinstance(value, int), "presets value must be integer"
assert value >= 0, "presets value must be >= 0"
@pytest.mark.parametrize("cls, model", _all_vacuum_models())
def test_vacuum_set_fan_speed_presets_fails(cls: Type[Device], model: str) -> None:
"""Test method VacuumInterface.fan_speed_presets()"""
if model == ROCKROBO_V1:
return # this model cannot be tested because presets depends on firmware
dev = cls("127.0.0.1", "68ffffffffffffffffffffffffffffff", model=model)
assert isinstance(dev, VacuumInterface)
with pytest.raises(ValueError):
dev.set_fan_speed_preset(-1)
|