"""Tests del cliente Runtime (Sprint 6).""" from __future__ import annotations import pytest pytest.importorskip("PySide6") def test_client_window_builds(qtbot): from vmssailor.runtime.client.main_window import RuntimeClientWindow w = RuntimeClientWindow() qtbot.addWidget(w) assert w._stack.count() == 7 # Overview, Mimicos, Alarmas, Trends, Trim, Logbook, Conexion assert "VMS-Sailor Runtime" in w.windowTitle() def test_overview_handles_tag_update(qtbot): from vmssailor.runtime.client.views.overview_view import OverviewView ov = OverviewView() qtbot.addWidget(ov) ov.handle_event( { "type": "tag_update", "tag_id": "ME_PORT.OIL_PRESS", "value": 4.8, "quality": "good", "timestamp": "2026-05-17T03:42:00", } ) assert "ME_PORT.OIL_PRESS" in ov._tiles def test_alarms_view_handles_alarm_event(qtbot): from vmssailor.runtime.client.views.alarms_view import AlarmsView av = AlarmsView() qtbot.addWidget(av) av.handle_event( { "type": "alarm_event", "alarm_id": "alm_1", "tag_id": "ME_PORT.OIL_PRESS", "priority": "emergency", "state": "active", "message": "Oil press low", } ) assert av._table.rowCount() == 1 def test_alarms_view_clears(qtbot): from vmssailor.runtime.client.views.alarms_view import AlarmsView av = AlarmsView() qtbot.addWidget(av) av.handle_event( { "type": "alarm_event", "alarm_id": "alm_1", "tag_id": "X", "priority": "low", "state": "active", "message": "low msg", } ) assert av._table.rowCount() == 1 av.handle_event( { "type": "alarm_event", "alarm_id": "alm_1", "tag_id": "X", "priority": "low", "state": "cleared", "message": "low msg", } ) assert av._table.rowCount() == 0 def test_connection_view_initial_state(qtbot): from vmssailor.runtime.client.views.connection_view import ConnectionView cv = ConnectionView() qtbot.addWidget(cv) assert cv._connect_btn.isEnabled() assert not cv._disconnect_btn.isEnabled() assert cv._host_input.text() == "127.0.0.1" assert cv._port_input.value() == 8765