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