From beafdd0afd130583a266ffa0fd9f506d215c4a61 Mon Sep 17 00:00:00 2001 From: kolo Date: Sat, 15 Mar 2025 18:47:26 +0300 Subject: [PATCH] new system tests --- argenta/router/entity.py | 2 +- ...t_system_handling_non_standard_behavior.py | 162 ++++++++++++++++++ ...> test_system_handling_normal_behavior.py} | 2 +- 3 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 tests/system_tests/test_system_handling_non_standard_behavior.py rename tests/system_tests/{test_system_handler_normal_work.py => test_system_handling_normal_behavior.py} (99%) diff --git a/argenta/router/entity.py b/argenta/router/entity.py index c55f756..8569dd6 100644 --- a/argenta/router/entity.py +++ b/argenta/router/entity.py @@ -23,7 +23,7 @@ class Router: self._command_entities: list[dict[str, Callable[[], None] | Command]] = [] self._ignore_command_register: bool = False - self._not_valid_flag_handler: Callable[[Flag], None] = lambda flag: print(f"Undefined or incorrect input flag: {flag.get_string_entity()} {flag.get_value() if flag.get_value() else ''}") + self._not_valid_flag_handler: Callable[[Flag], None] = lambda flag: print(f"Undefined or incorrect input flag: {flag.get_string_entity()}{(' '+flag.get_value()) if flag.get_value() else ''}") def command(self, command: Command) -> Callable[[Any], Any]: diff --git a/tests/system_tests/test_system_handling_non_standard_behavior.py b/tests/system_tests/test_system_handling_non_standard_behavior.py new file mode 100644 index 0000000..0fd5de5 --- /dev/null +++ b/tests/system_tests/test_system_handling_non_standard_behavior.py @@ -0,0 +1,162 @@ +import _io +from unittest.mock import patch, MagicMock +import unittest +import io +import re + +from argenta.app import App +from argenta.command import Command +from argenta.router import Router +from argenta.command.flag import Flag, FlagsGroup +from argenta.command.flag.defaults import DefaultFlags + + + +class TestSystemHandlerNormalWork(unittest.TestCase): + @patch("builtins.input", side_effect=["help", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_incorrect_command(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print('test command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn("\nUnknown command: help\n", output) + + + @patch("builtins.input", side_effect=["TeSt", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_incorrect_command2(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print('test command') + + app = App(ignore_command_register=False) + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn('\nUnknown command: TeSt\n', output) + + + @patch("builtins.input", side_effect=["test --help", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_correct_command_with_unregistered_flag(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print(f'test command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn('\nUndefined or incorrect input flag: --help\n', output) + + + @patch("builtins.input", side_effect=["test --port 22", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_correct_command_with_unregistered_flag2(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print('test command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn('\nUndefined or incorrect input flag: --port 22\n', output) + + + @patch("builtins.input", side_effect=["test --host 192.168.32.1 --port 132", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_correct_command_with_one_correct_flag_an_one_incorrect_flag(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + flags = FlagsGroup(DefaultFlags.host_flag) + + @router.command(Command('test', flags=flags)) + def test(args: dict): + print(f'connecting to host {args["host"]["value"]}') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn('\nUndefined or incorrect input flag: --port 132\n', output) + + + @patch("builtins.input", side_effect=["test", "some", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_one_correct_command_and_one_incorrect_command(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print(f'test command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertRegex(output, re.compile(r'\ntest command\n(.|\n)*\nUnknown command: some\n')) + + + @patch("builtins.input", side_effect=["test", "some", "more", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_two_correct_commands_and_one_incorrect_command(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print(f'test command') + + @router.command(Command('more')) + def test(): + print(f'more command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertRegex(output, re.compile(r'\ntest command\n(.|\n)*\nUnknown command: some\n(.|\n)*\nmore command')) + + + @patch("builtins.input", side_effect=["test 535 --port", "q"]) + @patch("sys.stdout", new_callable=io.StringIO) + def test_input_correct_command_with_incorrect_flag(self, mock_stdout: _io.StringIO, magick_mock: MagicMock): + router = Router() + + @router.command(Command('test')) + def test(): + print(f'test command') + + app = App() + app.include_router(router) + app.start_polling() + + output = mock_stdout.getvalue() + + self.assertIn("Incorrect flag syntax: \"test 535 --port\"", output) diff --git a/tests/system_tests/test_system_handler_normal_work.py b/tests/system_tests/test_system_handling_normal_behavior.py similarity index 99% rename from tests/system_tests/test_system_handler_normal_work.py rename to tests/system_tests/test_system_handling_normal_behavior.py index 516e034..71c579c 100644 --- a/tests/system_tests/test_system_handler_normal_work.py +++ b/tests/system_tests/test_system_handling_normal_behavior.py @@ -28,7 +28,7 @@ class TestSystemHandlerNormalWork(unittest.TestCase): output = mock_stdout.getvalue() - self.assertIn('test command', output) + self.assertIn('\ntest command\n', output) @patch("builtins.input", side_effect=["TeSt", "q"])