better perf

This commit is contained in:
2025-12-09 12:02:26 +03:00
parent 725a1f2e40
commit 56189be6ab
7 changed files with 138 additions and 115 deletions
+4 -21
View File
@@ -7,13 +7,12 @@ from pytest_mock import MockerFixture
from argenta.app.autocompleter.entity import (
AutoCompleter,
_get_history_items,
_is_command_exist,
_get_history_items
)
HISTORY_FILE: str = "test_history.txt"
COMMANDS: list[str] = ["start", "stop", "status"]
COMMANDS: set[str] = {"start", "stop", "status"}
# ============================================================================
@@ -119,7 +118,7 @@ def test_exit_setup_writes_and_filters_duplicate_commands(fs: FakeFilesystem, mo
fs.create_file(HISTORY_FILE, contents=raw_history_content) # pyright: ignore[reportUnknownMemberType]
completer: AutoCompleter = AutoCompleter(history_filename=HISTORY_FILE)
completer.exit_setup(all_commands=["start", "stop"], ignore_command_register=False)
completer.exit_setup(all_commands={"start", "stop"})
mock_readline.write_history_file.assert_called_once_with(HISTORY_FILE)
@@ -131,7 +130,7 @@ def test_exit_setup_writes_and_filters_duplicate_commands(fs: FakeFilesystem, mo
def test_exit_setup_skips_writing_when_no_history_filename(mock_readline: Any) -> None:
completer: AutoCompleter = AutoCompleter(history_filename=None)
completer.exit_setup(all_commands=COMMANDS, ignore_command_register=False)
completer.exit_setup(all_commands=COMMANDS)
mock_readline.write_history_file.assert_not_called()
@@ -182,22 +181,6 @@ def test_complete_inserts_common_prefix_for_multiple_matches(mock_readline: Any)
# ============================================================================
def test_is_command_exist_checks_case_sensitive_when_enabled() -> None:
existing: list[str] = ["start", "stop", "status"]
assert _is_command_exist("start", existing, ignore_command_register=False) is True
assert _is_command_exist("START", existing, ignore_command_register=False) is False
assert _is_command_exist("unknown", existing, ignore_command_register=False) is False
def test_is_command_exist_checks_case_insensitive_when_enabled() -> None:
existing: list[str] = ["start", "stop", "status"]
assert _is_command_exist("start", existing, ignore_command_register=True) is True
assert _is_command_exist("START", existing, ignore_command_register=True) is True
assert _is_command_exist("unknown", existing, ignore_command_register=True) is False
def test_get_history_items_returns_empty_list_initially(mock_readline: Any) -> None:
assert _get_history_items() == []
+94 -2
View File
@@ -208,7 +208,7 @@ def test_finds_appropriate_handler_executes_handler_by_alias(capsys: CaptureFixt
assert "Hello World!" in output.out
def test_finds_appropriate_handler_executes_handler_by_alias_with_differrent_register(capsys: CaptureFixture[str]) -> None:
def test_finds_appropriate_handler_executes_handler_by_alias_case_insensitive(capsys: CaptureFixture[str]) -> None:
router = Router()
@router.command(Command('hello', aliases={'hI'}))
@@ -222,7 +222,7 @@ def test_finds_appropriate_handler_executes_handler_by_alias_with_differrent_reg
assert "Hello World!" in output.out
def test_finds_appropriate_handler_executes_handler_by_trigger_with_differrent_register(capsys: CaptureFixture[str]) -> None:
def test_finds_appropriate_handler_executes_handler_by_trigger_case_insensitive(capsys: CaptureFixture[str]) -> None:
router = Router()
@router.command(Command('heLLo'))
@@ -305,3 +305,95 @@ def test_validate_command_raises_error_for_alias_collision_case_insensitive() ->
@router.command(Command('world', aliases={'hI'}))
def handler2(_res: Response) -> None:
pass
# ============================================================================
# Tests for RegisteredRouters
# ============================================================================
def test_registered_routers_get_router_by_trigger() -> None:
from argenta.app.registered_routers.entity import RegisteredRouters
registered_routers = RegisteredRouters()
router = Router()
@router.command('hello')
def handler(_res: Response) -> None:
pass
registered_routers.add_registered_router(router)
assert registered_routers.get_router_by_trigger('hello') == router
def test_registered_routers_get_router_by_alias() -> None:
from argenta.app.registered_routers.entity import RegisteredRouters
registered_routers = RegisteredRouters()
router = Router()
@router.command(Command('hello', aliases={'hi'}))
def handler(_res: Response) -> None:
pass
registered_routers.add_registered_router(router)
assert registered_routers.get_router_by_trigger('hi') == router
def test_registered_routers_get_router_case_insensitive() -> None:
from argenta.app.registered_routers.entity import RegisteredRouters
registered_routers = RegisteredRouters()
router = Router()
@router.command(Command('HeLLo'))
def handler(_res: Response) -> None:
pass
registered_routers.add_registered_router(router)
# Trigger stored in lowercase, should match regardless of case
assert registered_routers.get_router_by_trigger('hello') == router
assert registered_routers.get_router_by_trigger('HELLO') is None # Exact match required in dict
def test_registered_routers_get_triggers_returns_all_triggers_and_aliases() -> None:
from argenta.app.registered_routers.entity import RegisteredRouters
registered_routers = RegisteredRouters()
router1 = Router()
router2 = Router()
@router1.command(Command('hello', aliases={'hi'}))
def handler1(_res: Response) -> None:
pass
@router2.command(Command('world', aliases={'w'}))
def handler2(_res: Response) -> None:
pass
registered_routers.add_registered_router(router1)
registered_routers.add_registered_router(router2)
triggers = registered_routers.get_triggers()
assert 'hello' in triggers
assert 'hi' in triggers
assert 'world' in triggers
assert 'w' in triggers
def test_registered_routers_returns_none_for_unknown_trigger() -> None:
from argenta.app.registered_routers.entity import RegisteredRouters
registered_routers = RegisteredRouters()
router = Router()
@router.command('hello')
def handler(_res: Response) -> None:
pass
registered_routers.add_registered_router(router)
assert registered_routers.get_router_by_trigger('unknown') is None