import pytest from app.commands import parse def test_telegram_basic(): cmd = parse("telegram", "/status") assert (cmd.name, cmd.args, cmd.rest) == ("status", (), "") def test_matrix_prefix(): assert parse("matrix", "!problems").name == "problems" assert parse("matrix", "/problems") is None assert parse("telegram", "!problems") is None def test_botname_suffix(): assert parse("telegram", "/host@checkbot web01").args == ("web01",) assert parse("telegram", "/host@checkbot web01", bot_name="checkbot").name == "host" assert parse("telegram", "/host@other web01", bot_name="checkbot") is None assert parse("matrix", "!host@x web01") is None def test_quoting(): cmd = parse("telegram", '/explain web01 "CPU load"') assert cmd.args == ("web01", "CPU load") assert parse("telegram", "/explain web01 „CPU load“").args == ("web01", "CPU load") def test_unbalanced_quote_takes_rest(): assert parse("telegram", '/explain web01 "CPU load').args == ("web01", "CPU load") def test_case_insensitive_name(): assert parse("telegram", "/STATUS").name == "status" def test_rest_preserved_for_ask(): cmd = parse("telegram", "/ask was ist los? ") assert cmd.rest == "was ist los?" @pytest.mark.parametrize("text", ["hallo", "", " ", "/", "//x", "/ status", "!!!", "/1abc", "text /status"]) def test_non_commands(text): assert parse("telegram", text) is None assert parse("matrix", text) is None def test_unknown_backend(): assert parse("irc", "/status") is None def test_empty_quoted_arg(): assert parse("telegram", '/x ""').args == ("",)