import unittest from pathlib import Path from windfree_poller.config import Config, Field from windfree_poller.events import extract, status_event def config(*fields): return Config("pi", "device", 300, 10, "https://example/v1", "", "", "", "token", Path("token.json"), "http://localhost", 10, fields) class EventTests(unittest.TestCase): def setUp(self): self.status = {"components": {"main": { "temperatureMeasurement": {"temperature": {"value": 23.5, "unit": "C", "timestamp": "2026-01-01T00:00:00Z"}}, "airConditionerFanMode": {"fanMode": {"value": "windFree"}}, }}} def test_extract_and_equals_conversion(self): found, value, _, _ = extract(self.status, Field("windfree", "main", "airConditionerFanMode", "fanMode", "windFree")) self.assertTrue(found) self.assertIs(value, True) def test_missing_field_is_warning(self): event = status_event(config(Field("temperature", "main", "temperatureMeasurement", "temperature"), Field("humidity", "main", "relativeHumidityMeasurement", "humidity")), self.status) self.assertEqual(event["status"], "no_data") self.assertEqual(event["level"], "warning") self.assertEqual(event["missing_fields"], ["humidity"]) def test_all_fields_is_ok(self): event = status_event(config(Field("temperature", "main", "temperatureMeasurement", "temperature")), self.status) self.assertEqual((event["level"], event["status"]), ("info", "ok")) if __name__ == "__main__": unittest.main()