mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-03 12:46:49 +02:00
@@ -0,0 +1,77 @@
|
||||
"""Unit tests for spool assignment notification service."""
|
||||
|
||||
import logging
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from backend.app.services.spool_assignment_notifications import notify_missing_spool_assignments_on_print_start
|
||||
|
||||
|
||||
class _FakeAssignmentsResult:
|
||||
def __init__(self, rows):
|
||||
self._rows = rows
|
||||
|
||||
def fetchall(self):
|
||||
return self._rows
|
||||
|
||||
|
||||
class _FakeSession:
|
||||
def __init__(self, printer_name: str, assignments: list[SimpleNamespace]):
|
||||
self._printer = SimpleNamespace(name=printer_name)
|
||||
self._assignments = assignments
|
||||
|
||||
async def __aenter__(self):
|
||||
return self
|
||||
|
||||
async def __aexit__(self, exc_type, exc, tb):
|
||||
return False
|
||||
|
||||
async def get(self, model, key):
|
||||
return self._printer
|
||||
|
||||
async def execute(self, statement):
|
||||
return _FakeAssignmentsResult(self._assignments)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_missing_assignment_broadcasts_websocket_event_and_push_notification():
|
||||
"""When a mapped tray is unassigned, service emits websocket and notification events."""
|
||||
logger = logging.getLogger(__name__)
|
||||
data = {
|
||||
"ams_mapping": [1],
|
||||
"raw_data": {},
|
||||
}
|
||||
|
||||
# Assignment exists for A1 (global tray 0), but print uses A2 (global tray 1).
|
||||
assignments = [SimpleNamespace(ams_id=0, tray_id=0)]
|
||||
|
||||
with (
|
||||
patch(
|
||||
"backend.app.services.spool_assignment_notifications.async_session",
|
||||
return_value=_FakeSession("Printer A", assignments),
|
||||
),
|
||||
patch("backend.app.services.spool_assignment_notifications.printer_manager.get_status", return_value=None),
|
||||
patch(
|
||||
"backend.app.services.spool_assignment_notifications.ws_manager.send_missing_spool_assignment",
|
||||
new_callable=AsyncMock,
|
||||
) as mock_ws,
|
||||
patch(
|
||||
"backend.app.services.spool_assignment_notifications.notification_service.on_print_missing_spool_assignment",
|
||||
new_callable=AsyncMock,
|
||||
) as mock_notify,
|
||||
):
|
||||
await notify_missing_spool_assignments_on_print_start(1, data, logger)
|
||||
|
||||
mock_ws.assert_awaited_once()
|
||||
ws_kwargs = mock_ws.await_args.kwargs
|
||||
assert ws_kwargs["printer_id"] == 1
|
||||
assert ws_kwargs["printer_name"] == "Printer A"
|
||||
assert ws_kwargs["missing_slots"] == [{"slot": "A2", "profile": "Unknown", "color": "Unknown"}]
|
||||
|
||||
mock_notify.assert_awaited_once()
|
||||
notify_kwargs = mock_notify.await_args.kwargs
|
||||
assert notify_kwargs["printer_id"] == 1
|
||||
assert notify_kwargs["printer_name"] == "Printer A"
|
||||
assert notify_kwargs["missing_slots"] == [{"slot": "A2", "profile": "Unknown", "color": "Unknown"}]
|
||||
Reference in New Issue
Block a user