| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- """Tests for _pick_power_plug() in the print scheduler (#2629).
- A printer can have several plugs linked to it: the one feeding the printer and
- accessories that merely follow the print cycle (filter fan, chamber light). Only
- the former can bring an offline printer back, so the queue's power-on step must
- pick it rather than whichever row came back first.
- """
- from types import SimpleNamespace
- from backend.app.services.print_scheduler import PrintScheduler
- def _plug(plug_id: int, name: str, controls_printer_power: bool) -> SimpleNamespace:
- return SimpleNamespace(id=plug_id, name=name, controls_printer_power=controls_printer_power)
- class TestPickPowerPlug:
- def test_prefers_power_plug_over_earlier_accessory(self):
- fan = _plug(1, "BentoBox Filter", False)
- printer_plug = _plug(2, "P1S Power", True)
- assert PrintScheduler._pick_power_plug([fan, printer_plug]) is printer_plug
- def test_keeps_first_power_plug_when_several_qualify(self):
- first = _plug(1, "P1S Power", True)
- second = _plug(2, "Bench Power", True)
- assert PrintScheduler._pick_power_plug([first, second]) is first
- def test_falls_back_to_first_when_none_flagged(self):
- """Pre-#2629 behaviour for setups where no plug is marked as the power
- source — powering on may not work, but nothing gets worse."""
- fan = _plug(1, "BentoBox Filter", False)
- light = _plug(2, "Chamber Light", False)
- assert PrintScheduler._pick_power_plug([fan, light]) is fan
- def test_single_plug_is_returned_regardless(self):
- only = _plug(1, "P1S Power", True)
- assert PrintScheduler._pick_power_plug([only]) is only
|