Skip to content

Commit

Permalink
Unit tests for the Xiaomi Ceiling Lamp added.
Browse files Browse the repository at this point in the history
  • Loading branch information
syssi committed Nov 26, 2017
1 parent 73ec545 commit 49184f1
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 10 deletions.
15 changes: 8 additions & 7 deletions miio/ceil.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ class CeilStatus:
"""Container for status reports from Xiaomi Philips LED Ceiling Lamp."""

def __init__(self, data: Dict[str, Any]) -> None:
# ['power', 'bright', 'snm', 'dv', 'cctsw', 'bl', 'mb', 'ac', 'ms'
# 'sw', 'cct']
# ['off', 0, 4, 0, [[0, 3], [0, 2], [0, 1]], 1, 1, 1, 1, 99]
# {'power': 'off', 'bright': 0, 'snm': 4, 'dv': 0,
# 'cctsw': [[0, 3], [0, 2], [0, 1]], 'bl': 1,
# 'mb': 1, 'ac': 1, 'mssw': 1, 'cct': 99}

# NOTE: Only 8 properties can be requested at the same time
self.data = data

Expand Down Expand Up @@ -47,14 +48,14 @@ def color_temperature(self) -> int:
return self.data["cct"]

@property
def smart_night_light(self) -> int:
def smart_night_light(self) -> bool:
"""Smart night mode state."""
return self.data["bl"]
return self.data["bl"] == 1

@property
def automatic_color_temperature(self) -> int:
def automatic_color_temperature(self) -> bool:
"""Automatic color temperature state."""
return self.data["ac"]
return self.data["ac"] == 1

def __str__(self) -> str:
s = "<CeilStatus power=%s, brightness=%s, " \
Expand Down
79 changes: 76 additions & 3 deletions miio/tests/test_ceil.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,26 @@

class DummyCeil(DummyDevice, Ceil):
def __init__(self, *args, **kwargs):
self.state = {
'power': 'on',
}
self.state = {'power': 'on',
'bright': 50,
'snm': 4,
'dv': 0,
'cctsw': [[0, 3], [0, 2], [0, 1]],
'bl': 1,
'mb': 1,
'ac': 1,
'mssw': 1,
'cct': 99
}
self.return_values = {
'get_prop': self._get_state,
'set_power': lambda x: self._set_state("power", x),
'set_bright': lambda x: self._set_state("bright", x),
'apply_fixed_scene': lambda x: self._set_state("snm", x),
'delay_off': lambda x: self._set_state("dv", x),
'enable_bl': lambda x: self._set_state("bl", x),
'enable_ac': lambda x: self._set_state("ac", x),
'set_cct': lambda x: self._set_state("cct", x),
}
super().__init__(args, kwargs)

Expand Down Expand Up @@ -50,4 +64,63 @@ def test_status(self):
self.device._reset_state()

assert self.is_on() is True
assert self.state().brightness == self.device.start_state["bright"]
assert self.state().color_temperature == self.device.start_state["cct"]
assert self.state().scene == self.device.start_state["snm"]
assert self.state().delay_off_countdown == self.device.start_state["dv"]
assert self.state().smart_night_light == (self.device.start_state["bl"] == 1)
assert self.state().automatic_color_temperature == (self.device.start_state["ac"] == 1)

def test_set_brightness(self):
def brightness():
return self.device.status().brightness

self.device.set_brightness(10)
assert brightness() == 10
self.device.set_brightness(20)
assert brightness() == 20

def test_set_color_temperature(self):
def color_temperature():
return self.device.status().color_temperature

self.device.set_color_temperature(30)
assert color_temperature() == 30
self.device.set_color_temperature(20)
assert color_temperature() == 20

def test_delay_off(self):
def delay_off_countdown():
return self.device.status().delay_off_countdown

self.device.delay_off(100)
assert delay_off_countdown() == 100
self.device.delay_off(200)
assert delay_off_countdown() == 200

def test_set_scene(self):
def scene():
return self.device.status().scene

self.device.set_scene(1)
assert scene() == 1
self.device.set_scene(2)
assert scene() == 2

def test_smart_night_light_on(self):
def smart_night_light():
return self.device.status().smart_night_light

self.device.smart_night_light_off()
assert smart_night_light() == False
self.device.smart_night_light_on()
assert smart_night_light() == True

def test_automatic_color_temperature_on(self):
def automatic_color_temperature():
return self.device.status().automatic_color_temperature

self.device.automatic_color_temperature_on()
assert automatic_color_temperature() == True
self.device.automatic_color_temperature_off()
assert automatic_color_temperature() == False

0 comments on commit 49184f1

Please sign in to comment.