"""Tests for Pydantic model_dump() serialization on result models.""" from core.executor import ExecutionResult from core.validator import CNCValidationResult, CNCIssue from core.cam import CAMResult class TestExecutionResultDump: def test_success(self): r = ExecutionResult( success=True, volume=6000.0, bounding_box=(10.0, 20.0, 30.0), face_count=6, edge_count=12, ) d = r.model_dump(by_alias=True) assert d["success"] is True assert d["volume_mm3"] == 6000.0 assert d["face_count"] == 6 assert d["error"] is None # Excluded fields should not appear assert "result" not in d assert "code" not in d assert "stdout" not in d def test_failure(self): r = ExecutionResult(success=False, error="syntax error") d = r.model_dump(by_alias=True) assert d["success"] is False assert d["error"] == "syntax error" def test_bounding_box_alias(self): r = ExecutionResult(success=True, bounding_box=(10.0, 20.0, 30.0)) d = r.model_dump(by_alias=True) assert "bounding_box_mm" in d assert "bounding_box" not in d class TestValidationResultDump: def test_basic(self): r = CNCValidationResult( part_name="test", machinable=True, issues=[CNCIssue("warning", "Size", "Part is large")], ) d = r.model_dump() assert d["machinable"] is True assert d["axis_recommendation"] == "3-axis" assert len(d["issues"]) == 1 assert d["issues"][0]["severity"] == "warning" # Computed fields included assert d["error_count"] == 0 assert d["warning_count"] == 1 # Excluded fields assert "part_name" not in d def test_empty_issues(self): r = CNCValidationResult(part_name="test") d = r.model_dump() assert d["issues"] == [] assert d["error_count"] == 0 class TestCAMResultDump: def test_success(self): r = CAMResult(success=True, gcode="G21", operations=["pocket"], tool_config={"diameter": 6}) d = r.model_dump() assert d["success"] is True assert d["gcode"] == "G21" assert d["operations"] == ["pocket"] def test_failure(self): r = CAMResult(success=False, error="not installed") d = r.model_dump() assert d["success"] is False assert d["error"] == "not installed"