Spaces:
Sleeping
Sleeping
| """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" | |