From 482549b5bb6ad7ec5b5d58fb952599c75fb074e9 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 3 Jun 2026 02:38:56 -0600 Subject: [PATCH] Add hardware-free Pico core tests --- tests/test_pico_core.py | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tests/test_pico_core.py diff --git a/tests/test_pico_core.py b/tests/test_pico_core.py new file mode 100644 index 0000000..bdd1c89 --- /dev/null +++ b/tests/test_pico_core.py @@ -0,0 +1,80 @@ +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"