import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[1] PICO = ROOT / "pico-dashboard" sys.path.insert(0, str(PICO)) from comms.protocol import make_status_request, make_set_relay from state.app_state import AppState from alarms.alarm_manager import AlarmManager from ui.screen_manager import ScreenManager def test_protocol_messages(): assert make_status_request() == {"type": "status_request"} assert make_set_relay("starlink", True) == { "type": "set_relay", "relay": "starlink", "enabled": True, } def test_app_state_status_update(): state = AppState() state.update_from_status({ "timestamp": 123, "battery": {"soc": 82, "voltage": 13.2}, "temps": {"fridge_zone_1": 34.5}, "sensor_health": {"fridge_zone_1": True}, "relays": {"starlink": True}, "vehicle": {"ignition_on": False}, "network": {"uart_connected": True}, }) assert state.last_status_timestamp == 123 assert state.battery["soc"] == 82 assert state.temps["fridge_zone_1"] == 34.5 assert state.sensor_health["fridge_zone_1"] is True assert state.relays["starlink"] is True assert state.network["uart_connected"] is True def test_alarm_manager(): state = AppState() state.update_from_status({ "battery": {"soc": 10, "voltage": 11.8}, "temps": {"fridge_zone_1": 45.0, "fridge_zone_2": 35.0}, "sensor_health": { "fridge_zone_1": True, "fridge_zone_2": True, "rear_seat": False, "outside": True, }, "network": {"uart_connected": False}, }) alarms = AlarmManager().evaluate(state) assert "battery_soc_low" in alarms assert "battery_voltage_low" in alarms assert "fridge_zone_1_high" in alarms assert "communication_lost" in alarms assert "sensor_failure:rear_seat" in alarms def test_screen_manager(): screens = ScreenManager() assert screens.current_screen == "dashboard" screens.go_to("battery") assert screens.current_screen == "battery" screens.next_screen() assert screens.current_screen == "temps" screens.previous_screen() assert screens.current_screen == "battery"