Add hardware-free Pico core tests
This commit is contained in:
@@ -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"
|
||||
Reference in New Issue
Block a user