import unittest from pathlib import Path from couchd.discovery import DiscoveryConfig, SlippiDiscovery from couchd.status import CommandError, CommandRunner, StatusCollector, probe_display, probe_slippi_version class StatusCollectorTests(unittest.TestCase): def test_status_degrades_gracefully_when_probes_fail(self) -> None: collector = StatusCollector( display_probe=lambda: (_ for _ in ()).throw(CommandError("xrandr missing")), slippi_probe=lambda: (_ for _ in ()).throw(TimeoutError("slow launcher")), dolphin_probe=lambda: (_ for _ in ()).throw(TimeoutError("slow dolphin")), controller_probe=lambda: (_ for _ in ()).throw(CommandError("bluetoothctl missing")), ) status = collector.collect(state="idle", pid=None) self.assertEqual(status["state"], "idle") self.assertEqual(status["display"]["mode"], "unknown") self.assertIn("xrandr missing", status["display"]["error"]) self.assertEqual(status["slippi_version"], "unknown") self.assertIn("slow launcher", status["slippi_error"]) self.assertEqual(status["controller"]["connected"], "unknown") def test_probe_display_reports_active_starred_mode_refresh(self) -> None: class Runner(CommandRunner): def run(self, argv: list[str], timeout: int = 5): # type: ignore[override] del argv, timeout return type( "Completed", (), { "returncode": 0, "stdout": "\n".join( [ "HDMI-1 connected primary 1920x1080+0+0", " 1920x1080 60.00*+ 59.94", "eDP-1 connected 1920x1080+1920+0", " 1920x1080 120.00*+ 60.00", ] ), "stderr": "", }, )() display = probe_display(Runner()) self.assertEqual(display["name"], "HDMI-1") self.assertEqual(display["mode"], "1920x1080@60.00") self.assertEqual(display["connected_outputs"]["eDP-1"], "1920x1080@120.00") def test_probe_slippi_version_prefers_binary_version_output(self) -> None: class Runner(CommandRunner): def run(self, argv: list[str], timeout: int = 5): # type: ignore[override] del timeout if argv[-1] == "--version": return type( "Completed", (), {"returncode": 0, "stdout": "Slippi Launcher 3.2.1\n", "stderr": ""}, )() raise AssertionError(argv) discovery = SlippiDiscovery( DiscoveryConfig( couch_home=Path("/home/couch"), applications_dir=Path("/home/couch/Applications"), ) ) discovery.find_launcher = lambda: Path("/home/couch/Applications/SlippiLauncher.AppImage") # type: ignore[method-assign] self.assertEqual(probe_slippi_version(discovery, Runner()), "Slippi Launcher 3.2.1")