mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
165 lines
6.1 KiB
Python
165 lines
6.1 KiB
Python
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
from argparse import Namespace
|
|
|
|
from argenta.orchestrator.argparser.entity import ArgParser, ArgSpace
|
|
from argenta.orchestrator.argparser.arguments.models import (
|
|
ValueArgument,
|
|
BooleanArgument,
|
|
InputArgument,
|
|
BaseArgument
|
|
)
|
|
|
|
|
|
class TestArgumentClasses(unittest.TestCase):
|
|
def test_value_argument_creation(self):
|
|
arg = ValueArgument(
|
|
name="test_arg",
|
|
prefix="--",
|
|
help="A test argument.",
|
|
possible_values=["one", "two"],
|
|
default="one",
|
|
is_required=True,
|
|
is_deprecated=False
|
|
)
|
|
self.assertEqual(arg.name, "test_arg")
|
|
self.assertEqual(arg.prefix, "--")
|
|
self.assertEqual(arg.help, "A test argument.")
|
|
self.assertEqual(arg.possible_values, ["one", "two"])
|
|
self.assertEqual(arg.default, "one")
|
|
self.assertTrue(arg.is_required)
|
|
self.assertFalse(arg.is_deprecated)
|
|
self.assertEqual(arg.action, "store")
|
|
self.assertEqual(arg.string_entity, "--test_arg")
|
|
|
|
def test_boolean_argument_creation(self):
|
|
arg = BooleanArgument(
|
|
name="verbose",
|
|
prefix="-",
|
|
help="Enable verbose mode.",
|
|
is_deprecated=True
|
|
)
|
|
self.assertEqual(arg.name, "verbose")
|
|
self.assertEqual(arg.prefix, "-")
|
|
self.assertEqual(arg.help, "Enable verbose mode.")
|
|
self.assertTrue(arg.is_deprecated)
|
|
self.assertEqual(arg.action, "store_true")
|
|
self.assertEqual(arg.string_entity, "-verbose")
|
|
|
|
def test_input_argument_creation(self):
|
|
arg = InputArgument(
|
|
name="file",
|
|
value="/path/to/file",
|
|
founder_class=ValueArgument
|
|
)
|
|
self.assertEqual(arg.name, "file")
|
|
self.assertEqual(arg.value, "/path/to/file")
|
|
self.assertEqual(arg.founder_class, ValueArgument)
|
|
|
|
|
|
class TestArgParser(unittest.TestCase):
|
|
def setUp(self):
|
|
self.value_arg = ValueArgument(name="config", help="Path to config file")
|
|
self.bool_arg = BooleanArgument(name="debug", help="Enable debug mode")
|
|
self.processed_args = [self.value_arg, self.bool_arg]
|
|
|
|
def test_argparser_initialization(self):
|
|
parser = ArgParser(
|
|
processed_args=self.processed_args,
|
|
name="TestApp",
|
|
description="A test application.",
|
|
epilog="Test epilog."
|
|
)
|
|
self.assertEqual(parser.name, "TestApp")
|
|
self.assertEqual(parser.description, "A test application.")
|
|
self.assertEqual(parser.epilog, "Test epilog.")
|
|
self.assertEqual(parser.processed_args, self.processed_args)
|
|
|
|
@patch('argenta.orchestrator.argparser.entity.ArgumentParser.parse_args')
|
|
def test_parse_args(self, mock_parse_args: MagicMock):
|
|
mock_namespace = Namespace(config='config.json', debug=True)
|
|
mock_parse_args.return_value = mock_namespace
|
|
|
|
parser = ArgParser(processed_args=self.processed_args)
|
|
arg_space = parser.parse_args()
|
|
|
|
self.assertIsInstance(arg_space, ArgSpace)
|
|
self.assertEqual(len(arg_space.all_arguments), 2)
|
|
|
|
config_arg = arg_space.get_by_name('config')
|
|
debug_arg = arg_space.get_by_name('debug')
|
|
|
|
self.assertIsNotNone(config_arg)
|
|
if config_arg:
|
|
self.assertEqual(config_arg.value, 'config.json')
|
|
self.assertEqual(config_arg.founder_class, ValueArgument)
|
|
|
|
self.assertIsNotNone(debug_arg)
|
|
if debug_arg:
|
|
self.assertTrue(debug_arg.value)
|
|
self.assertEqual(debug_arg.founder_class, BooleanArgument)
|
|
|
|
|
|
class TestArgSpace(unittest.TestCase):
|
|
def setUp(self):
|
|
self.input_arg1 = InputArgument(name="arg1", value="val1", founder_class=ValueArgument)
|
|
self.input_arg2 = InputArgument(name="arg2", value="val2", founder_class=BooleanArgument)
|
|
self.input_arg3 = InputArgument(name="arg3", value="val3", founder_class=ValueArgument)
|
|
self.arg_space = ArgSpace(all_arguments=[self.input_arg1, self.input_arg2, self.input_arg3])
|
|
|
|
def test_argspace_initialization(self):
|
|
self.assertEqual(len(self.arg_space.all_arguments), 3)
|
|
self.assertIn(self.input_arg1, self.arg_space.all_arguments)
|
|
self.assertIn(self.input_arg2, self.arg_space.all_arguments)
|
|
self.assertIn(self.input_arg3, self.arg_space.all_arguments)
|
|
|
|
def test_get_by_name(self):
|
|
found_arg = self.arg_space.get_by_name("arg1")
|
|
self.assertIsNotNone(found_arg)
|
|
if found_arg:
|
|
self.assertEqual(found_arg, self.input_arg1)
|
|
|
|
def test_get_by_name_not_found(self):
|
|
found_arg = self.arg_space.get_by_name("non_existent_arg")
|
|
self.assertIsNone(found_arg)
|
|
|
|
def test_get_by_type(self):
|
|
value_args = self.arg_space.get_by_type(ValueArgument)
|
|
self.assertEqual(len(value_args), 2)
|
|
self.assertIn(self.input_arg1, value_args)
|
|
self.assertIn(self.input_arg3, value_args)
|
|
|
|
bool_args = self.arg_space.get_by_type(BooleanArgument)
|
|
self.assertEqual(len(bool_args), 1)
|
|
self.assertIn(self.input_arg2, bool_args)
|
|
|
|
def test_get_by_type_not_found(self):
|
|
class OtherArgument(BaseArgument):
|
|
pass
|
|
|
|
other_args = self.arg_space.get_by_type(OtherArgument)
|
|
self.assertEqual(len(other_args), 0)
|
|
|
|
def test_from_namespace(self):
|
|
namespace = Namespace(arg1="val1", debug=True)
|
|
processed_args = [
|
|
ValueArgument(name="arg1", prefix="--"),
|
|
BooleanArgument(name="debug", prefix="-")
|
|
]
|
|
|
|
arg_space = ArgSpace.from_namespace(namespace, processed_args)
|
|
self.assertEqual(len(arg_space.all_arguments), 2)
|
|
|
|
arg1 = arg_space.get_by_name('arg1')
|
|
debug_arg = arg_space.get_by_name('debug')
|
|
|
|
self.assertIsNotNone(arg1)
|
|
if arg1:
|
|
self.assertEqual(arg1.value, "val1")
|
|
self.assertEqual(arg1.founder_class, ValueArgument)
|
|
|
|
self.assertIsNotNone(debug_arg)
|
|
if debug_arg:
|
|
self.assertTrue(debug_arg.value)
|
|
self.assertEqual(debug_arg.founder_class, BooleanArgument)
|