teampulse/tests/test_monitor_triggers.py

77 lines
2.4 KiB
Python

from datetime import datetime
from teampulse.models import ChatMessage
from teampulse.monitor import parse_trigger
def msg(sender: str, text: str) -> ChatMessage:
return ChatMessage(sender=sender, text=text, timestamp=datetime(2026, 5, 16, 10, 0, 0))
CURRENT_USER = "Oliver Hofmann"
def test_start_with_quoted_name():
result = parse_trigger(msg(CURRENT_USER, '!start "Anna Bauer"'), CURRENT_USER)
assert result == ("start", "Anna Bauer")
def test_start_with_single_word_name():
result = parse_trigger(msg(CURRENT_USER, '!start "Bauer"'), CURRENT_USER)
assert result == ("start", "Bauer")
def test_start_without_quotes():
result = parse_trigger(msg(CURRENT_USER, "!start Stephan Rehfeld"), CURRENT_USER)
assert result == ("start", "Stephan Rehfeld")
def test_start_with_typographic_quotes():
result = parse_trigger(msg(CURRENT_USER, "“start” is not this, but: !start “Anna Bauer”"), CURRENT_USER)
assert result is None # not a trigger — just a regular message
def test_start_with_smart_quotes_around_name():
result = parse_trigger(msg(CURRENT_USER, '!start “Anna Bauer”'), CURRENT_USER)
assert result == ("start", "Anna Bauer")
def test_start_without_name_returns_placeholder():
result = parse_trigger(msg(CURRENT_USER, "!start"), CURRENT_USER)
assert result == ("start", "Unbekannter Vortragender")
def test_start_with_empty_quotes_returns_placeholder():
result = parse_trigger(msg(CURRENT_USER, '!start ""'), CURRENT_USER)
assert result == ("start", "Unbekannter Vortragender")
def test_stop_trigger():
result = parse_trigger(msg(CURRENT_USER, "!stop"), CURRENT_USER)
assert result == ("stop", "")
def test_ignored_if_not_current_user():
result = parse_trigger(msg("Klaus Huber", '!start "Anna Bauer"'), CURRENT_USER)
assert result is None
def test_stop_ignored_if_not_current_user():
result = parse_trigger(msg("Klaus Huber", "!stop"), CURRENT_USER)
assert result is None
def test_regular_message_returns_none():
result = parse_trigger(msg(CURRENT_USER, "Gute Frage!"), CURRENT_USER)
assert result is None
def test_case_insensitive_start():
result = parse_trigger(msg(CURRENT_USER, '!START "Anna Bauer"'), CURRENT_USER)
assert result == ("start", "Anna Bauer")
def test_case_insensitive_stop():
result = parse_trigger(msg(CURRENT_USER, "!STOP"), CURRENT_USER)
assert result == ("stop", "")