from tamq import control import pytest from tamq.control import ControlModeClient, ControlModeError, shell_quote from tamq.tmux import shell_join def test_shell_quote(): quoted = shell_quote("hello 'world'") assert quoted.startswith("'") and quoted.endswith("'") assert "\\'" in quoted def test_tmux_shell_join_quotes_arguments(): assert shell_join(["tamq", "tap", "--repo", "net-kingdom", "--", "codex"]) == "tamq tap --repo net-kingdom -- codex" def test_pane_tty_is_resolved_through_tmux(monkeypatch): calls = [] def run(command, **kwargs): calls.append(command) return type("Result", (), {"returncode": 0, "stdout": "/dev/pts/7|12|8|24|0\n", "stderr": ""})() monkeypatch.setattr(control.subprocess, "run", run) client = ControlModeClient("tamq", tmux_command=("tmux", "-L", "test")) assert client.pane_tty("tamq:audit-core") == "/dev/pts/7" assert calls == [[ "tmux", "-L", "test", "display-message", "-p", "-t", "tamq:audit-core", "#{pane_tty}|#{cursor_x}|#{cursor_y}|#{pane_height}|#{alternate_on}", ]] def test_submit_sends_literal_input_then_one_enter(monkeypatch): calls = [] def run(command, **kwargs): calls.append(command) return type("Result", (), {"returncode": 0, "stderr": ""})() monkeypatch.setattr(control.subprocess, "run", run) client = ControlModeClient("tamq", tmux_command=("tmux", "-L", "test")) client.submit("tamq:audit-core", "#flex-auth: What's up? [m-1]") assert calls == [ [ "tmux", "-L", "test", "send-keys", "-t", "tamq:audit-core", "-l", "--", "#flex-auth: What's up? [m-1]", ";", "send-keys", "-t", "tamq:audit-core", "Enter", ] ] def test_submit_surfaces_tmux_rejection(monkeypatch): monkeypatch.setattr( control.subprocess, "run", lambda *args, **kwargs: type( "Result", (), {"returncode": 1, "stderr": "missing pane"} )(), ) client = ControlModeClient("tamq") with pytest.raises(ControlModeError, match="missing pane"): client.submit("tamq:missing", "message")