80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
"""Tests für Queue-Worker."""
|
|
|
|
from datetime import datetime
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from src.queue.worker import verarbeite_submission, worker_loop
|
|
|
|
|
|
class TestVerarbeiteSubmission:
|
|
"""Tests für verarbeite_submission."""
|
|
|
|
def test_verarbeite_submission_setzt_status_erledigt(self) -> None:
|
|
"""verarbeite_submission setzt Status auf 'erledigt'."""
|
|
submission = MagicMock()
|
|
submission.message_id = "msg_id"
|
|
submission.zeitstempel = datetime.now()
|
|
submission.absender = "+491****7890"
|
|
submission.text = "Test Message"
|
|
|
|
assert submission.status != "erledigt"
|
|
|
|
result = verarbeite_submission(submission)
|
|
|
|
assert result is True
|
|
assert submission.status == "erledigt"
|
|
|
|
|
|
class TestWorkerLoop:
|
|
"""Tests für worker_loop."""
|
|
|
|
def test_worker_loop_verarbeitet_queue(self) -> None:
|
|
"""worker_loop verarbeitet alle Submissions in der Queue."""
|
|
mock_qh = MagicMock()
|
|
mock_sub = MagicMock()
|
|
mock_sub.zeitstempel = datetime.now()
|
|
mock_sub.absender = "+491****7890"
|
|
mock_sub.text = "Test"
|
|
mock_sub.message_id = "msg1"
|
|
|
|
calls = [False]
|
|
|
|
def dequeue_side_effect(count: int = 5):
|
|
if not calls[0]:
|
|
calls[0] = True
|
|
return [mock_sub]
|
|
return []
|
|
|
|
mock_qh.dequeue.side_effect = dequeue_side_effect
|
|
|
|
with patch("src.queue.worker.verarbeite_submission", return_value=True) as mock_verarb, \
|
|
patch("src.queue.worker.time.sleep", return_value=None):
|
|
worker_loop(mock_qh, poll_interval=0, batch_size=5)
|
|
|
|
assert mock_verarb.call_count >= 1
|
|
assert mock_qh.mark_done.call_count >= 1
|
|
|
|
def test_worker_loop_stopt_nicht_bei_fehler(self) -> None:
|
|
"""worker_loop crasht nicht bei Fehler in einer Submission."""
|
|
mock_qh = MagicMock()
|
|
|
|
def dequeue_side_effect(count: int = 5):
|
|
if not hasattr(dequeue_side_effect, "called"):
|
|
dequeue_side_effect.called = True # type: ignore[attr-defined]
|
|
m = MagicMock()
|
|
m.zeitstempel = datetime.now()
|
|
m.absender = "+491****7890"
|
|
m.text = "Test"
|
|
m.message_id = "msg_err"
|
|
return [m]
|
|
return []
|
|
|
|
mock_qh.dequeue.side_effect = dequeue_side_effect
|
|
|
|
with patch("src.queue.worker.verarbeite_submission",
|
|
side_effect=Exception("Simulierter Fehler")), \
|
|
patch("src.queue.worker.time.sleep", return_value=None):
|
|
worker_loop(mock_qh, poll_interval=0, batch_size=5)
|
|
|
|
assert True
|