test_print_speed.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """Unit tests for the print speed control endpoint.
  2. Tests POST /api/v1/printers/{printer_id}/print-speed?mode=N
  3. where mode is 1=silent, 2=standard, 3=sport, 4=ludicrous.
  4. """
  5. from unittest.mock import MagicMock, patch
  6. import pytest
  7. from httpx import AsyncClient
  8. class TestPrintSpeedAPI:
  9. """Tests for the print speed control endpoint."""
  10. @pytest.mark.asyncio
  11. async def test_print_speed_not_found(self, async_client: AsyncClient):
  12. """Verify 404 for non-existent printer."""
  13. response = await async_client.post("/api/v1/printers/99999/print-speed?mode=2")
  14. assert response.status_code == 404
  15. @pytest.mark.asyncio
  16. async def test_print_speed_not_connected(self, async_client: AsyncClient, printer_factory):
  17. """Verify error when printer is not connected."""
  18. printer = await printer_factory(name="Disconnected Printer")
  19. with patch("backend.app.api.routes.printers.printer_manager") as mock_pm:
  20. mock_pm.get_client.return_value = None
  21. response = await async_client.post(f"/api/v1/printers/{printer.id}/print-speed?mode=2")
  22. assert response.status_code == 400
  23. assert "not connected" in response.json()["detail"].lower()
  24. @pytest.mark.asyncio
  25. async def test_print_speed_failure(self, async_client: AsyncClient, printer_factory):
  26. """Verify 500 when client fails to set speed."""
  27. printer = await printer_factory(name="Test Printer")
  28. mock_client = MagicMock()
  29. mock_client.set_print_speed.return_value = False
  30. with patch("backend.app.api.routes.printers.printer_manager") as mock_pm:
  31. mock_pm.get_client.return_value = mock_client
  32. response = await async_client.post(f"/api/v1/printers/{printer.id}/print-speed?mode=2")
  33. assert response.status_code == 500
  34. assert "failed" in response.json()["detail"].lower()
  35. @pytest.mark.asyncio
  36. @pytest.mark.parametrize(
  37. "mode, expected_name",
  38. [
  39. (1, "Silent"),
  40. (2, "Standard"),
  41. (3, "Sport"),
  42. (4, "Ludicrous"),
  43. ],
  44. )
  45. async def test_print_speed_success(self, async_client: AsyncClient, printer_factory, mode, expected_name):
  46. """Verify successful speed change for each mode (1-4)."""
  47. printer = await printer_factory(name="Test Printer")
  48. mock_client = MagicMock()
  49. mock_client.set_print_speed.return_value = True
  50. with patch("backend.app.api.routes.printers.printer_manager") as mock_pm:
  51. mock_pm.get_client.return_value = mock_client
  52. response = await async_client.post(f"/api/v1/printers/{printer.id}/print-speed?mode={mode}")
  53. assert response.status_code == 200
  54. result = response.json()
  55. assert result["success"] is True
  56. assert expected_name in result["message"]
  57. mock_client.set_print_speed.assert_called_once_with(mode)