feat: Merge Konflikt lösen - pyproject.toml mit Dependencies und Konfigurationen
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
"""Tests für den Queue-Handler."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from src.models.submission import Submission
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def queue_handler():
|
||||
"""Erstellt einen Queue-Handler mit gemocktem Redis."""
|
||||
import fakeredis
|
||||
|
||||
fake_redis = fakeredis.FakeRedis(decode_responses=True)
|
||||
|
||||
with patch("src.queue.handler.redis.Redis", return_value=fake_redis):
|
||||
from src.queue.handler import QueueHandler
|
||||
|
||||
handler = QueueHandler()
|
||||
|
||||
# Override stream keys für Tests
|
||||
handler.stream_key = "test:submissions"
|
||||
handler.processed_key = "test:processed"
|
||||
handler.consumer_group = "test-workers"
|
||||
|
||||
# Consumer-Group initialisieren
|
||||
try:
|
||||
handler.redis.xgroup_create(handler.stream_key, handler.consumer_group, id="0")
|
||||
except:
|
||||
pass
|
||||
|
||||
handler._fake_redis = fake_redis # Für queue_size Referenz
|
||||
|
||||
return handler
|
||||
|
||||
|
||||
def test_enqueue_neue_submission_gibt_stream_id(queue_handler):
|
||||
"""Testet dass enqueue einer neuen Submission eine stream_id zurückgibt."""
|
||||
submission = Submission(
|
||||
message_id="msg_001",
|
||||
plattform="whatsapp",
|
||||
absender="+491****7890",
|
||||
text="Testnachricht",
|
||||
)
|
||||
|
||||
stream_id = queue_handler.enqueue(submission)
|
||||
|
||||
assert stream_id is not None
|
||||
assert isinstance(stream_id, str)
|
||||
|
||||
|
||||
def test_enqueue_duplikat_gibt_none(queue_handler):
|
||||
"""Testet dass enqueue eines Duplikats None zurückgibt."""
|
||||
submission = Submission(
|
||||
message_id="msg_002",
|
||||
plattform="telegram",
|
||||
absender="@user123",
|
||||
text="Duplikat-Test",
|
||||
)
|
||||
|
||||
# Erstmal enqueueen
|
||||
queue_handler.enqueue(submission)
|
||||
|
||||
# Zweites Mal mit gleicher message_id → sollte None zurückgeben
|
||||
stream_id = queue_handler.enqueue(submission)
|
||||
|
||||
assert stream_id is None
|
||||
|
||||
|
||||
def test_dequeue_holt_submission_zurueck(queue_handler):
|
||||
"""Testet dass dequeue eingereihte Submissions zurückgibt."""
|
||||
submission = Submission(
|
||||
message_id="msg_003",
|
||||
plattform="whatsapp",
|
||||
absender="+499****3210",
|
||||
text="Dequeue-Test",
|
||||
)
|
||||
|
||||
queue_handler.enqueue(submission)
|
||||
|
||||
submissions = queue_handler.dequeue(count=5)
|
||||
|
||||
assert len(submissions) == 1
|
||||
assert submissions[0].message_id == "msg_003"
|
||||
assert submissions[0].text == "Dequeue-Test"
|
||||
|
||||
|
||||
def test_mark_done_entfernt_aus_queue(queue_handler):
|
||||
"""Testet dass mark_done die Nachricht ackt."""
|
||||
submission = Submission(
|
||||
message_id="msg_004",
|
||||
plattform="telegram",
|
||||
absender="@user456",
|
||||
text="Mark-done-Test",
|
||||
)
|
||||
|
||||
queue_handler.enqueue(submission)
|
||||
queue_handler.dequeue(count=1) # Nachricht holen
|
||||
queue_handler.mark_done(submission) # Als erledigt marken
|
||||
|
||||
# XAck sollte erfolgreich gewesen sein - keine Exception
|
||||
# Wir prüfen indem wir erneut dequeue versuchen
|
||||
submissions = queue_handler.dequeue(count=5)
|
||||
assert len(submissions) == 0 # Sollte leer sein
|
||||
|
||||
|
||||
def test_queue_size_gibt_korrekte_anzahl(queue_handler):
|
||||
"""Testet dass queue_size die korrekte Anzahl zurückgibt."""
|
||||
# Queue sollte anfangs leer sein
|
||||
assert queue_handler.queue_size() == 0
|
||||
|
||||
# 3 Submissions enqueueen
|
||||
for i in range(3):
|
||||
submission = Submission(
|
||||
message_id=f"msg_size_{i}",
|
||||
plattform="whatsapp",
|
||||
absender=f"+491****{i:04d}",
|
||||
text=f"Nachricht {i}",
|
||||
)
|
||||
queue_handler.enqueue(submission)
|
||||
|
||||
size = queue_handler.queue_size()
|
||||
assert size == 3
|
||||
Reference in New Issue
Block a user