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()