Files
cadSet/text-to-cad/tests/python/skills/cad-router/test_reconstruct_step.py

108 lines
3.7 KiB
Python

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.assertEqual("passed", result["brep_comparison"]["status"])
self.assertTrue(
result["brep_comparison"]["hard_gate_passed"]
)
self.assertEqual("brep_exact", result["quality_tier"])
self.assertTrue(Path(result["brep_report"]).is_file())
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()
)
self.assertFalse(
(task_dir / "validation" / ".strategy-work").exists()
)
strategy_report = json.loads(
(task_dir / "validation" / "strategies.json").read_text(
encoding="utf-8"
)
)
self.assertEqual(
"exact_3d_pcurve", strategy_report["selected_strategy"]
)
self.assertGreaterEqual(len(strategy_report["attempts"]), 2)
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"])
task_manifest = json.loads(
Path(result["task_manifest"]).read_text(encoding="utf-8")
)
self.assertIn(
"simplecadapi_brep_compare",
task_manifest["route"]["validation_adapters"],
)
if __name__ == "__main__":
unittest.main()