test_wled_startup.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. """Startup WLED initialization keeps inactive printers offline."""
  2. from unittest.mock import AsyncMock, MagicMock, patch
  3. import pytest
  4. from backend.app.main import initialize_wled_printers
  5. from backend.app.services.wled import WLEDManager
  6. @pytest.mark.asyncio
  7. async def test_startup_sets_only_inactive_printers_offline():
  8. db = MagicMock()
  9. db.execute = AsyncMock(return_value=MagicMock())
  10. inactive_config = {"enabled": True, "base_url": "http://wled.local", "presets": {"offline": 9}}
  11. active_config = {"enabled": True, "base_url": "http://wled.local", "presets": {"offline": 10}}
  12. db.execute.return_value.all.return_value = [
  13. (1, inactive_config, False),
  14. (2, active_config, True),
  15. ]
  16. with (
  17. patch("backend.app.api.routes.settings.get_setting", new=AsyncMock(return_value=False)),
  18. patch("backend.app.main.wled_manager") as manager,
  19. ):
  20. await initialize_wled_printers(db)
  21. assert manager.configure_printer.call_count == 2
  22. manager.configure_printer.assert_any_call(1, inactive_config)
  23. manager.configure_printer.assert_any_call(2, active_config)
  24. manager.handle_offline.assert_called_once_with(1)
  25. @pytest.mark.asyncio
  26. async def test_startup_skips_missing_disabled_and_unmapped_wled_configs():
  27. db = MagicMock()
  28. db.execute = AsyncMock(return_value=MagicMock())
  29. db.execute.return_value.all.return_value = [
  30. (1, None, False),
  31. (2, {"enabled": False, "base_url": "http://wled.local", "presets": {"offline": 9}}, False),
  32. (3, {"enabled": True, "base_url": "http://wled.local", "presets": {}}, False),
  33. ]
  34. manager = WLEDManager()
  35. with (
  36. patch("backend.app.api.routes.settings.get_setting", new=AsyncMock(return_value=False)),
  37. patch("backend.app.main.wled_manager", manager),
  38. ):
  39. await initialize_wled_printers(db)
  40. assert all(runtime.send_task is None for runtime in manager._runtime.values())
  41. assert manager._client is None