Files
service_hue_collector/tests/test_collector.py
T

50 lines
2.4 KiB
Python
Raw Normal View History

2026-08-30 14:26:11 +02:00
import unittest
from hue_collector.collector import Collector
class FakeClient:
data = {
"device": [
{"id": "d1", "metadata": {"name": "Motion"}},
{"id": "d2", "metadata": {"name": "Lamp"}},
{"id": "d3", "metadata": {"name": "Offline lamp"}},
],
"room": [{"id": "r1", "metadata": {"name": "Office"}, "children": [{"rid": "d1"}, {"rid": "d2"}, {"rid": "d3"}]}],
"zone": [{"id": "z1", "metadata": {"name": "Downstairs"}, "children": [{"rid": "d2"}]}],
"light": [
{"id": "l1", "owner": {"rid": "d2"}, "on": {"on": True}, "dimming": {"brightness": 60}},
{"id": "l2", "owner": {"rid": "d3"}, "on": {"on": True}, "dimming": {"brightness": 100}},
],
"temperature": [{"id": "t1", "owner": {"rid": "d1"}, "temperature": {"temperature": 21.5}}],
"light_level": [{"id": "s1", "owner": {"rid": "d1"}, "light_level": {"light_level": 123.4}}],
"zigbee_connectivity": [
{"owner": {"rid": "d1"}, "status": "connected"},
{"owner": {"rid": "d2"}, "status": "connected"},
{"owner": {"rid": "d3"}, "status": "disconnected"},
],
}
def get(self, resource):
return self.data[resource]
class CollectorTests(unittest.TestCase):
def setUp(self):
self.metrics = Collector(FakeClient()).collect()
def test_group_counts_only_connected_lights(self):
self.assertIn('hue_group_lights_available{group="Office",group_id="r1",group_type="room"} 1', self.metrics)
self.assertIn('hue_group_lights_shining_percent{group="Office",group_id="r1",group_type="room"} 100.0', self.metrics)
self.assertIn('hue_group_lights_off_percent{group="Office",group_id="r1",group_type="room"} 0.0', self.metrics)
self.assertIn('hue_group_lights_unavailable_percent{group="Office",group_id="r1",group_type="room"} 50.0', self.metrics)
self.assertIn('hue_group_average_brightness_percent{group="Office",group_id="r1",group_type="room"} 60.0', self.metrics)
def test_sensor_values_have_location(self):
self.assertIn('hue_temperature_celsius{room="Office",sensor="Motion",sensor_id="t1",sensor_type="temperature",zones=""} 21.5', self.metrics)
self.assertIn('hue_light_level_lux{room="Office",sensor="Motion",sensor_id="s1",sensor_type="light_level",zones=""} 123.4', self.metrics)
if __name__ == "__main__":
unittest.main()