"""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