-
-
Notifications
You must be signed in to change notification settings - Fork 273
Expand file tree
/
Copy pathtest_dimmer.py
More file actions
182 lines (146 loc) · 5.32 KB
/
test_dimmer.py
File metadata and controls
182 lines (146 loc) · 5.32 KB
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
import pytest
from kasa import DeviceType, Module
from kasa.iot import IotDimmer
from .conftest import dimmer_iot, handle_turn_on, turn_on
@dimmer_iot
async def test_set_brightness(dev):
light = dev.modules.get(Module.Light)
assert light
await handle_turn_on(dev, False)
await dev.update()
assert dev.is_on is False
await light.set_brightness(99)
await dev.update()
assert light.brightness == 99
assert dev.is_on is True
await light.set_brightness(0)
await dev.update()
assert light.brightness == 99
assert dev.is_on is False
@dimmer_iot
@turn_on
async def test_set_brightness_transition(dev, turn_on, mocker):
light = dev.modules.get(Module.Light)
assert light
await handle_turn_on(dev, turn_on)
query_helper = mocker.spy(IotDimmer, "_query_helper")
await light.set_brightness(99, transition=1000)
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 99, "duration": 1000},
)
await dev.update()
assert light.brightness == 99
assert dev.is_on
await light.set_brightness(0, transition=1000)
await dev.update()
assert dev.is_on is False
@dimmer_iot
async def test_set_brightness_invalid(dev):
light = dev.modules.get(Module.Light)
assert light
for invalid_brightness in [-1, 101]:
with pytest.raises(ValueError, match="Invalid brightness"):
await light.set_brightness(invalid_brightness)
for invalid_type in [0.5, "foo"]:
with pytest.raises(TypeError, match="Brightness must be an integer"):
await light.set_brightness(invalid_type)
@dimmer_iot
async def test_set_brightness_invalid_transition(dev):
light = dev.modules.get(Module.Light)
assert light
for invalid_transition in [-1]:
with pytest.raises(ValueError, match="Transition value .+? is not valid."):
await light.set_brightness(1, transition=invalid_transition)
for invalid_type in [0.5, "foo"]:
with pytest.raises(TypeError, match="Transition must be integer"):
await light.set_brightness(1, transition=invalid_type)
@dimmer_iot
async def test_turn_on_transition(dev, mocker):
light = dev.modules.get(Module.Light)
assert light
query_helper = mocker.spy(IotDimmer, "_query_helper")
original_brightness = light.brightness
await dev.turn_on(transition=1000)
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": original_brightness, "duration": 1000},
)
await dev.update()
assert dev.is_on
assert light.brightness == original_brightness
@dimmer_iot
async def test_turn_off_transition(dev, mocker):
light = dev.modules.get(Module.Light)
assert light
await handle_turn_on(dev, True)
query_helper = mocker.spy(IotDimmer, "_query_helper")
original_brightness = light.brightness
await dev.turn_off(transition=1000)
await dev.update()
assert dev.is_off
assert light.brightness == original_brightness
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 0, "duration": 1000},
)
@dimmer_iot
@turn_on
async def test_set_dimmer_transition(dev, turn_on, mocker):
light = dev.modules.get(Module.Light)
assert light
await handle_turn_on(dev, turn_on)
query_helper = mocker.spy(IotDimmer, "_query_helper")
await dev.set_dimmer_transition(99, 1000)
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 99, "duration": 1000},
)
await dev.update()
assert dev.is_on
assert light.brightness == 99
@dimmer_iot
@turn_on
async def test_set_dimmer_transition_to_off(dev, turn_on, mocker):
light = dev.modules.get(Module.Light)
assert light
await handle_turn_on(dev, turn_on)
original_brightness = light.brightness
query_helper = mocker.spy(IotDimmer, "_query_helper")
await dev.set_dimmer_transition(0, 1000)
await dev.update()
assert dev.is_off
assert light.brightness == original_brightness
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 0, "duration": 1000},
)
@dimmer_iot
async def test_set_dimmer_transition_invalid_brightness(dev):
for invalid_brightness in [-1, 101]:
with pytest.raises(ValueError, match="Invalid brightness value: "):
await dev.set_dimmer_transition(invalid_brightness, 1000)
for invalid_type in [0.5, "foo"]:
with pytest.raises(TypeError, match="Transition must be integer"):
await dev.set_dimmer_transition(1, invalid_type)
@dimmer_iot
async def test_set_dimmer_transition_invalid_transition(dev):
for invalid_transition in [-1]:
with pytest.raises(ValueError, match="Transition value .+? is not valid."):
await dev.set_dimmer_transition(1, transition=invalid_transition)
for invalid_type in [0.5, "foo"]:
with pytest.raises(TypeError, match="Transition must be integer"):
await dev.set_dimmer_transition(1, transition=invalid_type)
@dimmer_iot
def test_device_type_dimmer(dev):
assert dev.device_type == DeviceType.Dimmer