104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
"""ACE-Trockner und Platz-Schreiben: Grenzen und Mapping."""
|
|
|
|
import pytest
|
|
|
|
from grotti.moonraker import (
|
|
PrinterError,
|
|
ace_hub_index,
|
|
extract_dryers,
|
|
spool_rgb,
|
|
steuern,
|
|
)
|
|
|
|
|
|
def test_extract_dryers_skips_dummy_unit():
|
|
status = {
|
|
"mmu_machine": {
|
|
"num_units": 1,
|
|
"unit_0": {
|
|
"num_gates": 4,
|
|
"dryer_status": "drying",
|
|
"dryer_temp": 44,
|
|
"dryer_target_temp": 45,
|
|
"dryer_remaining": 120,
|
|
"dryer_humidity": 20,
|
|
},
|
|
"unit_1": {
|
|
"num_gates": 0,
|
|
"dryer_status": "stop",
|
|
},
|
|
}
|
|
}
|
|
dryers = extract_dryers(status)
|
|
assert len(dryers) == 1
|
|
assert dryers[0]["id"] == 0
|
|
assert dryers[0]["status"] == "drying"
|
|
assert dryers[0]["target"] == 45
|
|
assert dryers[0]["remain"] == 120
|
|
|
|
|
|
def test_extract_dryers_empty_without_machine():
|
|
assert extract_dryers({}) == []
|
|
assert extract_dryers({"mmu_machine": {}}) == []
|
|
|
|
|
|
def test_ace_hub_index():
|
|
assert ace_hub_index(1) == (0, 0)
|
|
assert ace_hub_index(4) == (0, 3)
|
|
assert ace_hub_index(5) == (1, 0)
|
|
assert ace_hub_index(8) == (1, 3)
|
|
with pytest.raises(PrinterError):
|
|
ace_hub_index(0)
|
|
with pytest.raises(PrinterError):
|
|
ace_hub_index(9)
|
|
|
|
|
|
def test_spool_rgb_from_colors():
|
|
assert spool_rgb({"colors": [{"name": "Blau", "hex": "#002B49"}]}) == {
|
|
"R": 0, "G": 43, "B": 73,
|
|
}
|
|
assert spool_rgb({"colors": [], "color": "Weiß"}) is None
|
|
assert spool_rgb({"color": "#ff00aa"}) == {"R": 255, "G": 0, "B": 170}
|
|
|
|
|
|
def test_dryer_start_bounds(monkeypatch):
|
|
calls = []
|
|
|
|
def fake_post(host, path, payload, timeout=20):
|
|
calls.append((host, path, payload))
|
|
return {"result": "ok"}
|
|
|
|
monkeypatch.setattr("grotti.moonraker.post_json", fake_post)
|
|
steuern("10.10.1.60", "dryer_start", {"id": 0, "temp": 45, "duration": 240})
|
|
assert calls[0][1] == "/server/filament_hub/start_drying"
|
|
assert calls[0][2]["fan_speed"] == 0
|
|
|
|
with pytest.raises(PrinterError):
|
|
steuern("10.10.1.60", "dryer_start", {"id": 2, "temp": 45, "duration": 60})
|
|
with pytest.raises(PrinterError):
|
|
steuern("10.10.1.60", "dryer_start", {"id": 0, "temp": 20, "duration": 60})
|
|
with pytest.raises(PrinterError):
|
|
steuern("10.10.1.60", "dryer_start", {"id": 0, "temp": 45, "duration": 0})
|
|
|
|
|
|
def test_slot_setzen_payload(monkeypatch):
|
|
calls = []
|
|
|
|
def fake_post(host, path, payload, timeout=20):
|
|
calls.append((host, path, payload))
|
|
return {"result": "ok"}
|
|
|
|
monkeypatch.setattr("grotti.moonraker.post_json", fake_post)
|
|
steuern(
|
|
"10.10.1.60",
|
|
"slot_setzen",
|
|
{"id": 0, "index": 2, "type": "PLA", "color": {"R": 1, "G": 2, "B": 3}},
|
|
)
|
|
assert calls[0][1] == "/printer/filament_hub/set_filament_info"
|
|
assert calls[0][2] == {
|
|
"id": 0,
|
|
"index": 2,
|
|
"type": "PLA",
|
|
"color": {"R": 1, "G": 2, "B": 3},
|
|
}
|