ThePirateRay/tests/test_rayforge_windows_gui_preflight.py

44 lines
1.7 KiB
Python

import json
import unittest
from pathlib import Path
import tempfile
from scripts.check_rayforge_windows_gui import inspect
ROOT = Path(__file__).parents[1]
RESULT = ROOT / "tests" / "fixtures" / "rayforge-windows-gui-preflight.json"
class RayforgeWindowsGuiPreflightTests(unittest.TestCase):
def setUp(self):
self.result = json.loads(RESULT.read_text(encoding="utf-8"))
def test_preflight_is_transport_free(self):
self.assertIsNone(self.result["transport"])
self.assertFalse(self.result["controller_backend_reachable"])
def test_missing_runtime_blocks_gui_claim(self):
self.assertEqual("blocked", self.result["status"])
self.assertFalse(self.result["ready_for_manual_gui_test"])
self.assertFalse(self.result["installation_performed"])
self.assertIn("pygobject_gi_available", self.result["missing_requirements"])
def test_source_and_no_device_addon_are_present(self):
checks = self.result["checks"]
self.assertTrue(checks["pinned_source_present"])
self.assertTrue(checks["application_entry_present"])
self.assertTrue(checks["no_device_addon_present"])
def test_result_records_the_requested_runtime_probe(self):
self.assertIn("No module named 'gi'", self.result["observed_launch_error"])
def test_missing_runtime_path_fails_closed(self):
with tempfile.TemporaryDirectory() as temporary:
result = inspect(Path(temporary), Path(temporary) / "missing-python.exe")
self.assertFalse(result["ready_for_manual_gui_test"])
self.assertEqual("python runtime not found", result["observed_launch_error"])
if __name__ == "__main__":
unittest.main()