4
4
from unittest .mock import AsyncMock , MagicMock , patch
5
5
6
6
import pytest
7
- from velbusaio .channels import Button , Relay , SelectedProgram , Temperature
7
+ from velbusaio .channels import (
8
+ Button ,
9
+ ButtonCounter ,
10
+ Dimmer ,
11
+ LightSensor ,
12
+ Relay ,
13
+ SelectedProgram ,
14
+ SensorNumber ,
15
+ Temperature ,
16
+ )
8
17
9
18
from homeassistant .components .velbus import VelbusConfigEntry
10
19
from homeassistant .components .velbus .const import DOMAIN
@@ -22,6 +31,10 @@ def mock_controller(
22
31
mock_relay : AsyncMock ,
23
32
mock_temperature : AsyncMock ,
24
33
mock_select : AsyncMock ,
34
+ mock_buttoncounter : AsyncMock ,
35
+ mock_sensornumber : AsyncMock ,
36
+ mock_lightsensor : AsyncMock ,
37
+ mock_dimmer : AsyncMock ,
25
38
) -> Generator [AsyncMock ]:
26
39
"""Mock a successful velbus controller."""
27
40
with (
@@ -37,6 +50,14 @@ def mock_controller(
37
50
cont .get_all_switch .return_value = [mock_relay ]
38
51
cont .get_all_climate .return_value = [mock_temperature ]
39
52
cont .get_all_select .return_value = [mock_select ]
53
+ cont .get_all_sensor .return_value = [
54
+ mock_buttoncounter ,
55
+ mock_temperature ,
56
+ mock_sensornumber ,
57
+ mock_lightsensor ,
58
+ ]
59
+ cont .get_all_light .return_value = [mock_dimmer ]
60
+ cont .get_all_led .return_value = [mock_button ]
40
61
yield controller
41
62
42
63
@@ -53,6 +74,7 @@ def mock_button() -> AsyncMock:
53
74
channel .get_module_sw_version .return_value = "1.0.0"
54
75
channel .get_module_serial .return_value = "a1b2c3d4e5f6"
55
76
channel .is_closed .return_value = True
77
+ channel .is_on .return_value = False
56
78
return channel
57
79
58
80
@@ -68,6 +90,7 @@ def mock_temperature() -> AsyncMock:
68
90
channel .get_full_name .return_value = "Channel full name"
69
91
channel .get_module_sw_version .return_value = "3.0.0"
70
92
channel .get_module_serial .return_value = "asdfghjk"
93
+ channel .is_counter_channel .return_value = False
71
94
channel .get_class .return_value = "temperature"
72
95
channel .get_unit .return_value = "°C"
73
96
channel .get_state .return_value = 20.0
@@ -114,6 +137,82 @@ def mock_select() -> AsyncMock:
114
137
return channel
115
138
116
139
140
+ @pytest .fixture
141
+ def mock_buttoncounter () -> AsyncMock :
142
+ """Mock a successful velbus channel."""
143
+ channel = AsyncMock (spec = ButtonCounter )
144
+ channel .get_categories .return_value = ["sensor" ]
145
+ channel .get_name .return_value = "ButtonCounter"
146
+ channel .get_module_address .return_value = 2
147
+ channel .get_channel_number .return_value = 2
148
+ channel .get_module_type_name .return_value = "VMB7IN"
149
+ channel .get_full_name .return_value = "Channel full name"
150
+ channel .get_module_sw_version .return_value = "1.0.0"
151
+ channel .get_module_serial .return_value = "a1b2c3d4e5f6"
152
+ channel .is_counter_channel .return_value = True
153
+ channel .is_temperature .return_value = False
154
+ channel .get_state .return_value = 100
155
+ channel .get_unit .return_value = "W"
156
+ channel .get_counter_state .return_value = 100
157
+ channel .get_counter_unit .return_value = "kWh"
158
+ return channel
159
+
160
+
161
+ @pytest .fixture
162
+ def mock_sensornumber () -> AsyncMock :
163
+ """Mock a successful velbus channel."""
164
+ channel = AsyncMock (spec = SensorNumber )
165
+ channel .get_categories .return_value = ["sensor" ]
166
+ channel .get_name .return_value = "SensorNumber"
167
+ channel .get_module_address .return_value = 2
168
+ channel .get_channel_number .return_value = 3
169
+ channel .get_module_type_name .return_value = "VMB7IN"
170
+ channel .get_full_name .return_value = "Channel full name"
171
+ channel .get_module_sw_version .return_value = "1.0.0"
172
+ channel .get_module_serial .return_value = "a1b2c3d4e5f6"
173
+ channel .is_counter_channel .return_value = False
174
+ channel .is_temperature .return_value = False
175
+ channel .get_unit .return_value = "m"
176
+ channel .get_state .return_value = 10
177
+ return channel
178
+
179
+
180
+ @pytest .fixture
181
+ def mock_lightsensor () -> AsyncMock :
182
+ """Mock a successful velbus channel."""
183
+ channel = AsyncMock (spec = LightSensor )
184
+ channel .get_categories .return_value = ["sensor" ]
185
+ channel .get_name .return_value = "LightSensor"
186
+ channel .get_module_address .return_value = 2
187
+ channel .get_channel_number .return_value = 4
188
+ channel .get_module_type_name .return_value = "VMB7IN"
189
+ channel .get_full_name .return_value = "Channel full name"
190
+ channel .get_module_sw_version .return_value = "1.0.0"
191
+ channel .get_module_serial .return_value = "a1b2c3d4e5f6"
192
+ channel .is_counter_channel .return_value = False
193
+ channel .is_temperature .return_value = False
194
+ channel .get_unit .return_value = "illuminance"
195
+ channel .get_state .return_value = 250
196
+ return channel
197
+
198
+
199
+ @pytest .fixture
200
+ def mock_dimmer () -> AsyncMock :
201
+ """Mock a successful velbus channel."""
202
+ channel = AsyncMock (spec = Dimmer )
203
+ channel .get_categories .return_value = ["light" ]
204
+ channel .get_name .return_value = "Dimmer"
205
+ channel .get_module_address .return_value = 3
206
+ channel .get_channel_number .return_value = 1
207
+ channel .get_module_type_name .return_value = "VMBDN1"
208
+ channel .get_full_name .return_value = "Dimmer full name"
209
+ channel .get_module_sw_version .return_value = "1.0.0"
210
+ channel .get_module_serial .return_value = "a1b2c3d4e5f6g7"
211
+ channel .is_on .return_value = False
212
+ channel .get_dimmer_state .return_value = 33
213
+ return channel
214
+
215
+
117
216
@pytest .fixture (name = "config_entry" )
118
217
async def mock_config_entry (
119
218
hass : HomeAssistant ,
0 commit comments