File: test_airqualitymonitor_miot.py

package info (click to toggle)
python-miio 0.5.12-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,888 kB
  • sloc: python: 23,425; makefile: 9
file content (137 lines) | stat: -rw-r--r-- 4,818 bytes parent folder | download | duplicates (2)
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