feat: unify CAD workflows on DesignIR 3.0
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import json
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from build123d import Box, export_step
|
||||
|
||||
|
||||
ADAPTER_PATH = (
|
||||
Path(__file__).resolve().parents[4]
|
||||
/ "skills"
|
||||
/ "cad-router"
|
||||
/ "scripts"
|
||||
/ "reconstruct_step.py"
|
||||
)
|
||||
SPEC = importlib.util.spec_from_file_location(
|
||||
"cad_router_reconstruct_step", ADAPTER_PATH
|
||||
)
|
||||
assert SPEC is not None and SPEC.loader is not None
|
||||
adapter = importlib.util.module_from_spec(SPEC)
|
||||
sys.modules[SPEC.name] = adapter
|
||||
SPEC.loader.exec_module(adapter)
|
||||
|
||||
|
||||
class UploadedStepRuntimeTests(unittest.TestCase):
|
||||
def test_uploaded_step_reconstructs_and_publishes_validated_parameter(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temporary:
|
||||
root = Path(temporary)
|
||||
upload_dir = root / "upload"
|
||||
task_dir = root / "task"
|
||||
upload_dir.mkdir()
|
||||
source = upload_dir / "box.step"
|
||||
export_step(Box(10, 20, 30), source)
|
||||
|
||||
result = adapter.reconstruct_uploaded_step(
|
||||
source,
|
||||
task_dir,
|
||||
request="重建上传的 STEP",
|
||||
maximum_parameters=0,
|
||||
timeout_seconds=60,
|
||||
)
|
||||
|
||||
self.assertEqual("accepted", result["status"])
|
||||
self.assertTrue(result["geometry_accepted"])
|
||||
self.assertFalse(
|
||||
result["source_independence"][
|
||||
"rebuild_command_received_teacher_path"
|
||||
]
|
||||
)
|
||||
self.assertTrue(
|
||||
result["source_independence"]["anti_cheat_pass"]
|
||||
)
|
||||
self.assertIn(
|
||||
"failure_repair.surface_topology.bind_face_pcurves_and_group_shells",
|
||||
result["experience"]["methods_applied"],
|
||||
)
|
||||
self.assertTrue(Path(result["rebuilt_step"]).is_file())
|
||||
self.assertTrue(Path(result["designir"]).is_file())
|
||||
self.assertFalse(
|
||||
(task_dir / "validation" / ".geometry-work").exists()
|
||||
)
|
||||
|
||||
parameters = json.loads(
|
||||
Path(result["parameters"]).read_text(encoding="utf-8")
|
||||
)
|
||||
self.assertEqual(1, parameters["parameter_count"])
|
||||
self.assertEqual(
|
||||
"overall_scale", parameters["parameters"][0]["name"]
|
||||
)
|
||||
geometry = json.loads(
|
||||
Path(result["geometry_report"]).read_text(encoding="utf-8")
|
||||
)
|
||||
self.assertEqual(1, geometry["geometry_pass_count"])
|
||||
self.assertEqual(0, geometry["geometry_fail_count"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user