File: test_motion_sensor.py

package info (click to toggle)
devolo-home-control-api 0.19.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 804 kB
  • sloc: python: 3,167; makefile: 3
file content (182 lines) | stat: -rw-r--r-- 9,427 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
"""Test interacting with a window contact."""
import json

from requests_mock import Mocker

from devolo_home_control_api.homecontrol import HomeControl

from . import HOMECONTROL_URL, Subscriber, load_fixture
from .mocks import WEBSOCKET

ELEMENT_ID = "hdm:ZWave:CBC56091/8"
FIXTURE = load_fixture("homecontrol_motion_sensor")


def test_state_change(local_gateway: HomeControl) -> None:
    """Test state change of a binary sensor."""
    subscriber = Subscriber(ELEMENT_ID)
    local_gateway.publisher.register(ELEMENT_ID, subscriber)
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    binary_sensor = motion_sensor.binary_sensor_property[f"devolo.BinarySensor:{ELEMENT_ID}"]
    state = binary_sensor.state
    last_activity = binary_sensor.last_activity
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["sensor_event"]))
    assert state != binary_sensor.state
    assert last_activity != binary_sensor.last_activity
    assert subscriber.update.call_count == 1


def test_temperature_report(local_gateway: HomeControl) -> None:
    """Test processing a temperature report."""
    subscriber = Subscriber(ELEMENT_ID)
    local_gateway.publisher.register(ELEMENT_ID, subscriber)
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    temperature_sensor = motion_sensor.multi_level_sensor_property[f"devolo.MultiLevelSensor:{ELEMENT_ID}#MultilevelSensor(1)"]
    value = temperature_sensor.value
    last_activity = temperature_sensor.last_activity
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["temperature_event"]))
    assert value != temperature_sensor.value
    assert last_activity != temperature_sensor.last_activity
    assert subscriber.update.call_count == 1


def test_battery_report(local_gateway: HomeControl) -> None:
    """Test processing a battery report."""
    subscriber = Subscriber(ELEMENT_ID)
    local_gateway.publisher.register(ELEMENT_ID, subscriber)
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    battery_level = motion_sensor.battery_level
    battery_low = motion_sensor.battery_low
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["battery_low"]))
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["battery_level"]))
    assert battery_level != motion_sensor.battery_level
    assert battery_low != motion_sensor.battery_low
    assert subscriber.update.call_count == 2


def test_changing_general_device_settings(local_gateway: HomeControl) -> None:
    """Test changing general device settings."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    events_enabled = motion_sensor.settings_property["general_device_settings"].events_enabled
    icon = motion_sensor.settings_property["general_device_settings"].icon
    name = motion_sensor.settings_property["general_device_settings"].name
    zone_id = motion_sensor.settings_property["general_device_settings"].zone_id
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["general_device_settings"]))
    assert events_enabled != motion_sensor.settings_property["general_device_settings"].events_enabled
    assert icon != motion_sensor.settings_property["general_device_settings"].icon
    assert name != motion_sensor.settings_property["general_device_settings"].name
    assert zone_id != motion_sensor.settings_property["general_device_settings"].zone_id


def test_setting_general_device_settings(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test setting general device settings."""
    response = FIXTURE["success"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    events_enabled = motion_sensor.settings_property["general_device_settings"].events_enabled
    icon = motion_sensor.settings_property["general_device_settings"].icon
    name = motion_sensor.settings_property["general_device_settings"].name
    zone_id = motion_sensor.settings_property["general_device_settings"].zone_id
    motion_sensor.settings_property["general_device_settings"].set(zone_id="hz_2")
    assert motion_sensor.settings_property["general_device_settings"].events_enabled == events_enabled
    assert icon == motion_sensor.settings_property["general_device_settings"].icon
    assert name == motion_sensor.settings_property["general_device_settings"].name
    assert zone_id != motion_sensor.settings_property["general_device_settings"].zone_id


def test_changing_led_settings(local_gateway: HomeControl) -> None:
    """Test changing led settings."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["led"]))
    assert not motion_sensor.settings_property["led"].led_setting


def test_setting_led(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test setting led settings."""
    response = FIXTURE["success"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    led_setting = motion_sensor.settings_property["led"].led_setting
    motion_sensor.settings_property["led"].set(led_setting=False)
    assert motion_sensor.settings_property["led"].led_setting != led_setting


def test_pending_operation(local_gateway: HomeControl) -> None:
    """Test processing of a pending operation."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["pending_operation"]))
    assert motion_sensor.pending_operations


def test_changing_motion_sensitivity(local_gateway: HomeControl) -> None:
    """Test changing motion sensitivity settings."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    motion_sensitivity = motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["motion_sensitivity"]))
    assert motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity != motion_sensitivity


def test_setting_motion_sensitivity(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test setting motion sensitivity settings."""
    response = FIXTURE["success"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    motion_sensitivity = motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity
    assert motion_sensor.settings_property["motion_sensitivity"].set(9)
    assert motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity != motion_sensitivity


def test_setting_motion_sensitivity_same_value(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test setting motion sensitivity settings using the same value."""
    response = FIXTURE["fail"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    motion_sensitivity = motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity
    assert not motion_sensor.settings_property["motion_sensitivity"].set(9)
    assert motion_sensor.settings_property["motion_sensitivity"].motion_sensitivity == motion_sensitivity


def test_temperature_report_setting(local_gateway: HomeControl) -> None:
    """Test processing the temperature report setting."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["temperature_report"]))
    assert not motion_sensor.settings_property["temperature_report"].temp_report


def test_setting_temperature_report(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test chaning the temperature report setting."""
    response = FIXTURE["success"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    assert motion_sensor.settings_property["temperature_report"].set(temp_report=False)
    assert not motion_sensor.settings_property["temperature_report"].temp_report


def test_setting_temperature_report_same_value(remote_gateway: HomeControl, requests_mock: Mocker) -> None:
    """Test chaning the temperature report setting using the same value."""
    response = FIXTURE["fail"]
    requests_mock.post(f"{HOMECONTROL_URL}/remote/json-rpc", json=response)
    motion_sensor = remote_gateway.devices[ELEMENT_ID]
    assert not motion_sensor.settings_property["temperature_report"].set(temp_report=False)
    assert motion_sensor.settings_property["temperature_report"].temp_report


def test_changing_expert_settings(local_gateway: HomeControl) -> None:
    """Test changing expert settings."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    param_changed = motion_sensor.settings_property["param_changed"].param_changed
    WEBSOCKET.recv_packet(json.dumps(FIXTURE["param_changed"]))
    assert param_changed != motion_sensor.settings_property["param_changed"].param_changed


def test_getting_properties(local_gateway: HomeControl) -> None:
    """Test getting a property of the device."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    assert motion_sensor.get_property("binary_sensor") == list(motion_sensor.binary_sensor_property.values())
    assert motion_sensor.get_property("multi_level_sensor") == list(motion_sensor.multi_level_sensor_property.values())


def test_getting_state(local_gateway: HomeControl) -> None:
    """Test getting the online state of the device."""
    motion_sensor = local_gateway.devices[ELEMENT_ID]
    assert motion_sensor.is_online()