test_scheduler_power_plug_pick_2629.py 1.6 KB

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