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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
from unittest import TestCase
import pytest
from miio import AirQualityMonitorCGDN1
from miio.airqualitymonitor_miot import (
AirQualityMonitorMiotException,
ChargingState,
DisplayTemperatureUnitCGDN1,
)
from .dummies import DummyMiotDevice
_INITIAL_STATE = {
"humidity": 34,
"pm25": 10,
"pm10": 15,
"temperature": 18.599999,
"co2": 620,
"battery": 20,
"charging_state": 2,
"voltage": 26,
"start_time": 0,
"end_time": 0,
"monitoring_frequency": 1,
"screen_off": 15,
"device_off": 30,
"temperature_unit": "c",
}
class DummyAirQualityMonitorCGDN1(DummyMiotDevice, AirQualityMonitorCGDN1):
def __init__(self, *args, **kwargs):
self.state = _INITIAL_STATE
self.return_values = {
"get_prop": self._get_state,
"set_monitoring_frequency": lambda x: self._set_state(
"monitoring_frequency", x
),
"set_device_off_duration": lambda x: self._set_state("device_off", x),
"set_screen_off_duration": lambda x: self._set_state("screen_off", x),
"set_display_temperature_unit": lambda x: self._set_state(
"temperature_unit", x
),
}
super().__init__(*args, **kwargs)
@pytest.fixture(scope="function")
def airqualitymonitorcgdn1(request):
request.cls.device = DummyAirQualityMonitorCGDN1()
@pytest.mark.usefixtures("airqualitymonitorcgdn1")
class TestAirQualityMonitor(TestCase):
def test_status(self):
status = self.device.status()
assert status.humidity is _INITIAL_STATE["humidity"]
assert status.pm25 is _INITIAL_STATE["pm25"]
assert status.pm10 is _INITIAL_STATE["pm10"]
assert status.temperature is _INITIAL_STATE["temperature"]
assert status.co2 is _INITIAL_STATE["co2"]
assert status.battery is _INITIAL_STATE["battery"]
assert status.charging_state is ChargingState(_INITIAL_STATE["charging_state"])
assert status.monitoring_frequency is _INITIAL_STATE["monitoring_frequency"]
assert status.screen_off is _INITIAL_STATE["screen_off"]
assert status.device_off is _INITIAL_STATE["device_off"]
assert status.display_temperature_unit is DisplayTemperatureUnitCGDN1(
_INITIAL_STATE["temperature_unit"]
)
def test_set_monitoring_frequency_duration(self):
def monitoring_frequency():
return self.device.status().monitoring_frequency
self.device.set_monitoring_frequency_duration(0)
assert monitoring_frequency() == 0
self.device.set_monitoring_frequency_duration(290)
assert monitoring_frequency() == 290
self.device.set_monitoring_frequency_duration(600)
assert monitoring_frequency() == 600
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_monitoring_frequency_duration(-1)
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_monitoring_frequency_duration(601)
def test_set_device_off_duration(self):
def device_off_duration():
return self.device.status().device_off
self.device.set_device_off_duration(0)
assert device_off_duration() == 0
self.device.set_device_off_duration(29)
assert device_off_duration() == 29
self.device.set_device_off_duration(60)
assert device_off_duration() == 60
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_device_off_duration(-1)
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_device_off_duration(61)
def test_set_screen_off_duration(self):
def screen_off_duration():
return self.device.status().screen_off
self.device.set_screen_off_duration(0)
assert screen_off_duration() == 0
self.device.set_screen_off_duration(140)
assert screen_off_duration() == 140
self.device.set_screen_off_duration(300)
assert screen_off_duration() == 300
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_screen_off_duration(-1)
with pytest.raises(AirQualityMonitorMiotException):
self.device.set_screen_off_duration(301)
def test_set_display_temperature_unit(self):
def display_temperature_unit():
return self.device.status().display_temperature_unit
self.device.set_display_temperature_unit(DisplayTemperatureUnitCGDN1.Celcius)
assert display_temperature_unit() == DisplayTemperatureUnitCGDN1.Celcius
self.device.set_display_temperature_unit(DisplayTemperatureUnitCGDN1.Fahrenheit)
assert display_temperature_unit() == DisplayTemperatureUnitCGDN1.Fahrenheit
|