| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- """The "Check printer firmware" setting is enforced by the API, not only the UI.
- The printers page asked before its settings had loaded, so with the check
- switched off Bambuddy still went out to bambulab.com once per printer on every
- page load. Off has to mean no request at all.
- """
- from unittest.mock import AsyncMock, MagicMock, patch
- import pytest
- from httpx import AsyncClient
- from backend.app.models.settings import Settings
- UPDATE = {
- "update_available": True,
- "latest_version": "01.09.00.00",
- "download_url": "https://example.com/fw.bin",
- "release_notes": None,
- "available_versions": [],
- }
- def _service() -> MagicMock:
- service = MagicMock()
- service.check_for_update = AsyncMock(return_value=UPDATE)
- return service
- async def _switch_off(db) -> None:
- db.add(Settings(key="check_printer_firmware", value="false"))
- await db.commit()
- @pytest.mark.integration
- class TestFirmwareCheckSetting:
- @pytest.mark.asyncio
- async def test_on_by_default(self, async_client: AsyncClient, printer_factory):
- printer = await printer_factory()
- service = _service()
- with patch("backend.app.api.routes.firmware.get_firmware_service", return_value=service):
- r = await async_client.get(f"/api/v1/firmware/updates/{printer.id}")
- assert r.status_code == 200, r.text
- assert r.json()["update_available"] is True
- service.check_for_update.assert_awaited_once()
- @pytest.mark.asyncio
- async def test_off_asks_nobody(self, async_client: AsyncClient, db_session, printer_factory):
- printer = await printer_factory(name="Garage")
- await _switch_off(db_session)
- service = _service()
- with patch("backend.app.api.routes.firmware.get_firmware_service", return_value=service):
- r = await async_client.get(f"/api/v1/firmware/updates/{printer.id}")
- assert r.status_code == 200, r.text
- body = r.json()
- assert body["printer_id"] == printer.id and body["printer_name"] == "Garage"
- assert body["update_available"] is False and body["latest_version"] is None
- service.check_for_update.assert_not_called()
- @pytest.mark.asyncio
- async def test_off_still_404s_an_unknown_printer(self, async_client: AsyncClient, db_session):
- await _switch_off(db_session)
- assert (await async_client.get("/api/v1/firmware/updates/9999")).status_code == 404
- @pytest.mark.asyncio
- async def test_off_covers_the_all_printers_check(self, async_client: AsyncClient, db_session, printer_factory):
- await printer_factory()
- await printer_factory()
- await _switch_off(db_session)
- service = _service()
- with patch("backend.app.api.routes.firmware.get_firmware_service", return_value=service):
- r = await async_client.get("/api/v1/firmware/updates")
- assert r.status_code == 200, r.text
- body = r.json()
- assert body["updates_available"] == 0
- assert len(body["updates"]) == 2
- assert all(u["update_available"] is False for u in body["updates"])
- service.check_for_update.assert_not_called()
|