From 6ad632bf9bfabda2d4bed2606f953654e81e3859 Mon Sep 17 00:00:00 2001 From: kshitijk4poor <82637225+kshitijk4poor@users.noreply.github.com> Date: Fri, 24 Jul 2026 23:01:01 +0500 Subject: [PATCH] test(telegram): cover smart_deny 2-button row structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up for salvaged PR #70615 — the 2-button smart_deny case (Allow Once + Deny only) was exercised by an existing test but only at the flat-label level, not asserting the row pairing. Adds the missing row-structure assertion using the same capture pattern as the 4-button and 3-button tests. --- .../gateway/test_telegram_approval_buttons.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/gateway/test_telegram_approval_buttons.py b/tests/gateway/test_telegram_approval_buttons.py index c01e2cf7fc5..da9297e562c 100644 --- a/tests/gateway/test_telegram_approval_buttons.py +++ b/tests/gateway/test_telegram_approval_buttons.py @@ -196,6 +196,30 @@ class TestTelegramExecApproval: ["❌ Deny"], ] + @pytest.mark.asyncio + async def test_smart_deny_two_buttons_share_one_row(self, monkeypatch): + """smart_deny yields 2 buttons — they pair into a single readable row.""" + adapter = _make_adapter() + adapter._bot.send_message = AsyncMock(return_value=SimpleNamespace(message_id=42)) + captured_rows = [] + monkeypatch.setattr( + "plugins.platforms.telegram.adapter.InlineKeyboardButton", + lambda text, callback_data: text, + ) + monkeypatch.setattr( + "plugins.platforms.telegram.adapter.InlineKeyboardMarkup", + lambda rows: captured_rows.extend(rows) or rows, + ) + + await adapter.send_exec_approval( + chat_id="12345", command="curl example.test", session_key="s", + allow_permanent=False, smart_denied=True, + ) + + assert captured_rows == [ + ["✅ Allow Once", "❌ Deny"], + ] + @pytest.mark.asyncio async def test_stores_approval_state(self): adapter = _make_adapter()