ThePirateRay/tests/test_lightburn_import_preflight.py

75 lines
3 KiB
Python

import sys
import unittest
from pathlib import Path
from types import SimpleNamespace
ROOT = Path(__file__).parents[1]
ADDON = ROOT / "spikes" / "rayforge-jcz-no-device-addon"
sys.path.insert(0, str(ADDON))
from pirate_ray_jcz.import_preflight import (
ImportPreflightError, assert_no_unresolved_imports, inspect_imported_workflow,
)
from pirate_ray_jcz.workflow_import import METADATA_KEY
def document(*steps):
return SimpleNamespace(children=[SimpleNamespace(children=list(steps))])
def imported_step(*, visible=False, record=None):
if record is None:
record = {
"status": "staged-review-required",
"source_layer_id": "3",
"blockers": ["machine identity unverified", "unit contract unresolved"],
"encoding_allowed": False,
"hardware_use_allowed": False,
}
return SimpleNamespace(name="Imported contour", visible=visible,
extra={METADATA_KEY: record}, children=[])
class ImportPreflightTests(unittest.TestCase):
def test_plain_document_is_ready(self):
report = inspect_imported_workflow(document(
SimpleNamespace(name="ordinary", visible=True, extra={}, children=[])))
self.assertEqual(report, {"ready": True, "issues": []})
assert_no_unresolved_imports(document())
def test_staged_import_is_presented_and_execution_is_rejected(self):
doc = document(imported_step())
report = inspect_imported_workflow(doc)
self.assertFalse(report["ready"])
self.assertEqual(["IMPORT_REVIEW_REQUIRED"],
[issue["code"] for issue in report["issues"]])
self.assertIn("unit contract unresolved", report["issues"][0]["message"])
with self.assertRaisesRegex(ImportPreflightError, "IMPORT_REVIEW_REQUIRED"):
assert_no_unresolved_imports(doc)
def test_manual_reenable_adds_a_distinct_error(self):
report = inspect_imported_workflow(document(imported_step(visible=True)))
self.assertEqual(
["IMPORT_OUTPUT_REENABLED", "IMPORT_REVIEW_REQUIRED"],
[issue["code"] for issue in report["issues"]],
)
def test_malformed_metadata_and_document_fail_closed(self):
for doc in (
object(),
document(imported_step(record="bad")),
document(imported_step(record={"source_layer_id": "3", "blockers": []})),
):
with self.subTest(doc=doc):
report = inspect_imported_workflow(doc)
self.assertFalse(report["ready"])
self.assertTrue(any("INVALID" in issue["code"] for issue in report["issues"]))
def test_offline_driver_runs_preflight_before_session_prepare(self):
source = (ADDON / "pirate_ray_jcz" / "worker.py").read_text(encoding="utf-8")
preflight = source.index("assert_no_unresolved_imports(doc)")
prepare = source.index("self.offline_session.prepare(encoded)")
self.assertLess(preflight, prepare)
if __name__ == "__main__":
unittest.main()