feat: Submission-Pydantic-Modell mit Validierung
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 10m18s
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 10m18s
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
"""Submission-Datenmodell für Community-Einreichungen."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Submission(BaseModel):
|
||||
"""Eine Community-Einreichung (WhatsApp/Telegram).
|
||||
|
||||
Attributes:
|
||||
message_id: Eindeutige Nachrichten-ID.
|
||||
plattform: whatsapp oder telegram.
|
||||
absender: Absender-ID oder Telefonnummer.
|
||||
text: Nachrichtentext.
|
||||
zeitstempel: Eingangszeitpunkt.
|
||||
status: neu, in_bearbeitung, erledigt, fehler.
|
||||
"""
|
||||
|
||||
message_id: str = Field(..., description="Eindeutige Nachrichten-ID")
|
||||
plattform: str = Field(..., description="whatsapp oder telegram")
|
||||
absender: str = Field(..., description="Absender-ID oder Telefonnummer")
|
||||
text: str = Field(..., min_length=1, max_length=5000, description="Nachrichtentext")
|
||||
zeitstempel: datetime = Field(default_factory=datetime.now, description="Eingangszeitpunkt")
|
||||
status: str = Field(default="neu", description="neu, in_bearbeitung, erledigt, fehler")
|
||||
@@ -0,0 +1,60 @@
|
||||
"""Tests für das Submission-Pydantic-Modell."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from src.models.submission import Submission
|
||||
|
||||
|
||||
def test_gueltige_submission_alle_felder_korrekt() -> None:
|
||||
"""Gültige Submission erstellen — alle Felder korrekt."""
|
||||
sub = Submission(
|
||||
message_id="msg_001",
|
||||
plattform="whatsapp",
|
||||
absender="+491234567890",
|
||||
text="Hallo, kennt jemand ein gutes Kartenspiele?",
|
||||
)
|
||||
assert sub.message_id == "msg_001"
|
||||
assert sub.plattform == "whatsapp"
|
||||
assert sub.absender == "+491234567890"
|
||||
assert sub.text == "Hallo, kennt jemand ein gutes Kartenspiele?"
|
||||
assert sub.status == "neu"
|
||||
assert isinstance(sub.zeitstempel, datetime)
|
||||
|
||||
|
||||
def test_leerer_text_wirft_validation_error() -> None:
|
||||
"""Leerer Text wirft ValidationError."""
|
||||
with pytest.raises(ValidationError):
|
||||
Submission(
|
||||
message_id="msg_002",
|
||||
plattform="telegram",
|
||||
absender="chat_12345",
|
||||
text="",
|
||||
)
|
||||
|
||||
|
||||
def test_text_ueber_5000_zeichen_wirft_validation_error() -> None:
|
||||
"""Text > 5000 Zeichen wirft ValidationError."""
|
||||
with pytest.raises(ValidationError):
|
||||
Submission(
|
||||
message_id="msg_003",
|
||||
plattform="telegram",
|
||||
absender="chat_12345",
|
||||
text="a" * 5001,
|
||||
)
|
||||
|
||||
|
||||
def test_zeitstempel_wird_auto_gesetzt() -> None:
|
||||
"""zeitstempel wird automatisch gesetzt (nicht None)."""
|
||||
before = datetime.now()
|
||||
sub = Submission(
|
||||
message_id="msg_004",
|
||||
plattform="whatsapp",
|
||||
absender="+4999999999",
|
||||
text="Test",
|
||||
)
|
||||
after = datetime.now()
|
||||
assert sub.zeitstempel is not None
|
||||
assert before <= sub.zeitstempel <= after
|
||||
Reference in New Issue
Block a user