File size: 2,480 Bytes
2330e12
e660ef7
 
2330e12
b9e909b
 
2330e12
b9e909b
e660ef7
 
 
 
2330e12
b9e909b
 
 
 
2330e12
 
 
 
b9e909b
 
e660ef7
2330e12
b9e909b
 
 
2330e12
 
 
 
 
b9e909b
2330e12
 
b9e909b
e660ef7
 
 
 
 
2330e12
b9e909b
 
 
 
2330e12
 
 
 
 
b9e909b
 
e660ef7
2330e12
b9e909b
2330e12
e660ef7
 
2330e12
 
e660ef7
2330e12
e660ef7
 
2330e12
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""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"