netx/tests/test_ne_session_interactive.py
hansjone b8fa2c6725 fix(webcrt): skip Netmiko terminal-length on interactive login.
Keep disable_paging for collection/MCP; WebCRT opens sessions with interactive=True so the device CLI is not pre-seeded.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-30 02:34:25 +00:00

53 lines
1.7 KiB
Python

from __future__ import annotations
import unittest
from unittest.mock import MagicMock, patch
from netx_api.ne_session_factory import (
_build_netmiko_connection,
_interactive_driver_class,
_netmiko_driver_class,
open_netmiko_connection,
)
class InteractiveNetmikoTests(unittest.TestCase):
def test_interactive_driver_skips_paging_commands(self) -> None:
base = _netmiko_driver_class("cisco_ios")
cls = _interactive_driver_class(base)
self.assertEqual(cls.disable_paging(None), "")
self.assertEqual(cls.set_terminal_width(None), "")
def test_build_non_interactive_uses_connect_handler(self) -> None:
fake = MagicMock(name="conn")
with patch("netx_api.ne_session_factory.ConnectHandler", return_value=fake) as ch:
out = _build_netmiko_connection(
{
"device_type": "cisco_ios",
"host": "1.1.1.1",
"username": "u",
"password": "p",
},
interactive=False,
)
self.assertIs(out, fake)
ch.assert_called_once()
def test_open_webcrt_passes_interactive_flag(self) -> None:
creds = {
"device_type": "cisco_ios",
"protocol": "ssh",
"ip_address": "10.0.0.1",
"port": 22,
"username": "u",
"password": "p",
}
with patch("netx_api.ne_session_factory._connect_direct") as direct:
direct.return_value = MagicMock()
open_netmiko_connection(creds, interactive=True)
direct.assert_called_once()
self.assertTrue(direct.call_args.kwargs.get("interactive"))
if __name__ == "__main__":
unittest.main()