feat: add spindle direction selection contract

This commit is contained in:
Nick Hermes
2026-06-02 15:40:16 +00:00
parent 02d9323c43
commit beeb521ca7
21 changed files with 689 additions and 133 deletions

View File

@@ -0,0 +1,33 @@
import json
from pathlib import Path
from polisher_control.contracts import SpindleDirection, normalize_spindle_direction
from polisher_control.telemetry_channels import RECOMMENDED_CHANNELS
ROOT = Path(__file__).resolve().parents[1]
def test_spindle_direction_enum_uses_stable_wire_values():
assert SpindleDirection.CLOCKWISE.value == "cw"
assert SpindleDirection.COUNTER_CLOCKWISE.value == "ccw"
assert SpindleDirection.allowed_values() == ["cw", "ccw"]
def test_normalize_spindle_direction_accepts_operator_aliases():
assert normalize_spindle_direction("cw") == SpindleDirection.CLOCKWISE
assert normalize_spindle_direction("clockwise") == SpindleDirection.CLOCKWISE
assert normalize_spindle_direction("ccw") == SpindleDirection.COUNTER_CLOCKWISE
assert normalize_spindle_direction("counter-clockwise") == SpindleDirection.COUNTER_CLOCKWISE
def test_spindle_direction_is_in_controller_job_segment_schema():
schema = json.loads((ROOT / "shared/schemas/controller-job.schema.json").read_text())
segment = schema["$defs"]["segment"]
assert "commanded_spindle_direction" in segment["required"]
assert segment["properties"]["commanded_spindle_direction"]["enum"] == ["cw", "ccw"]
def test_spindle_direction_is_logged_as_telemetry_context():
assert "spindle_direction_setpoint" in RECOMMENDED_CHANNELS
assert "spindle_direction_actual" in RECOMMENDED_CHANNELS