From 8217d7b3603b753b1654e06b8b012c372fd538ca Mon Sep 17 00:00:00 2001 From: Jiri Podivin Date: Tue, 15 Jun 2021 13:38:12 +0200 Subject: [PATCH] Changing group show commmand into a lister. The CLI group info command now uses preset path to the validation groups file if no other is supplied. The default value is set in both CLI and the 'group_information' method of the ValidationActions class. Tests adjusted. Resolves: rhbz#1972155 Signed-off-by: Jiri Podivin Change-Id: Iff12dff9a870e3e3b89e8070bc251401498ea623 --- setup.cfg | 2 +- validations_libs/cli/lister.py | 26 +++++++++++++++ validations_libs/cli/show.py | 26 --------------- validations_libs/tests/cli/test_list.py | 42 ++++++++++++++++++++++++- validations_libs/tests/cli/test_show.py | 29 ----------------- validations_libs/tests/fakes.py | 29 +++++++++++------ validations_libs/validation_actions.py | 16 +++++----- 7 files changed, 96 insertions(+), 74 deletions(-) diff --git a/setup.cfg b/setup.cfg index 75e6a0aa..357c6d58 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,8 +42,8 @@ console_scripts: validation.cli: list = validations_libs.cli.lister:ValidationList + list_groups = validations_libs.cli.lister:GroupsList show = validations_libs.cli.show:Show - show_group = validations_libs.cli.show:ShowGroup show_parameter = validations_libs.cli.show:ShowParameter run = validations_libs.cli.run:Run history_list = validations_libs.cli.history:ListHistory diff --git a/validations_libs/cli/lister.py b/validations_libs/cli/lister.py index a95dd639..017ea662 100644 --- a/validations_libs/cli/lister.py +++ b/validations_libs/cli/lister.py @@ -50,3 +50,29 @@ class ValidationList(Lister): v_actions = ValidationActions(validation_path=validation_dir) return (v_actions.list_validations(group)) + + +class GroupsList(Lister): + """Validation List group client implementation class""" + + def get_parser(self, parser): + """Argument parser for validation show group""" + parser = super(GroupsList, self).get_parser(parser) + parser.add_argument('--validation-dir', dest='validation_dir', + default=constants.ANSIBLE_VALIDATION_DIR, + help=("Path where the validation playbooks " + "are located.")) + parser.add_argument('--groups-file', '-g', + dest="groups_file", + default=constants.VALIDATION_GROUPS_INFO, + help=("Path to the group definition file.")) + return parser + + def take_action(self, parsed_args): + """Take validation action""" + # Get parameters: + validation_dir = parsed_args.validation_dir + groups_file = parsed_args.groups_file + + v_actions = ValidationActions(validation_path=validation_dir) + return v_actions.group_information(groups_file) diff --git a/validations_libs/cli/show.py b/validations_libs/cli/show.py index 163f8fe1..a54ce11c 100644 --- a/validations_libs/cli/show.py +++ b/validations_libs/cli/show.py @@ -50,32 +50,6 @@ class Show(ShowOne): return data.keys(), data.values() -class ShowGroup(ShowOne): - """Validation Show group client implementation class""" - - def get_parser(self, parser): - """Argument parser for validation show group""" - parser = super(ShowGroup, self).get_parser(parser) - parser.add_argument('--validation-dir', dest='validation_dir', - default=constants.ANSIBLE_VALIDATION_DIR, - help=("Path where the validation playbooks " - "are located.")) - parser.add_argument('--group', '-g', - metavar='', - dest="group", - help=("Show a specific group.")) - return parser - - def take_action(self, parsed_args): - """Take validation action""" - # Get parameters: - validation_dir = parsed_args.validation_dir - group = parsed_args.group - - v_actions = ValidationActions(validation_path=validation_dir) - return v_actions.group_information(group) - - class ShowParameter(ShowOne): """Display Validations Parameters""" diff --git a/validations_libs/tests/cli/test_list.py b/validations_libs/tests/cli/test_list.py index 6540c172..8b7c723e 100644 --- a/validations_libs/tests/cli/test_list.py +++ b/validations_libs/tests/cli/test_list.py @@ -65,7 +65,7 @@ class TestList(BaseCommand): self.assertEqual(result, []) @mock.patch('validations_libs.utils.parse_all_validations_on_disk', - return_value=fakes.VALIDATIONS_LIST_GROUP) + return_value=fakes.VALIDATIONS_LIST) def test_list_validations_group(self, mock_list): arglist = ['--validation-dir', 'foo', '--group', 'prep'] verifylist = [('validation_dir', 'foo'), @@ -76,3 +76,43 @@ class TestList(BaseCommand): parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.assertEqual(result, list) + + +class TestListGroup(BaseCommand): + + def setUp(self): + super(TestListGroup, self).setUp() + self.cmd = lister.GroupsList(self.app, None) + + @mock.patch('validations_libs.utils.glob.glob', return_value=['foo_valiation.yaml']) + @mock.patch('validations_libs.cli.lister.ValidationActions', autospec=True) + @mock.patch( + 'validations_libs.validation.yaml.safe_load', + side_effect=[ + fakes.GROUP, + fakes.VALIDATIONS_LIST_GROUP, + fakes.VALIDATIONS_LIST_GROUP, + fakes.VALIDATIONS_LIST_GROUP]) + @mock.patch('six.moves.builtins.open', autospec=True) + def test_show_validations_group_info(self, mock_open, + mock_yaml, + mock_actions, + mock_glob): + + arglist = ['--groups-file', 'group.yaml'] + verifylist = [('groups_file', 'group.yaml')] + + mock_info = mock.MagicMock() + mock_info.group_information = mock.MagicMock(return_value='foo') + mock_actions.return_value = mock_info + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + group_info = self.cmd.take_action(parsed_args) + + mock_actions.assert_called_once_with( + validation_path=fakes.FAKE_VALIDATIONS_PATH) + + mock_info.group_information.assert_called_once_with('group.yaml') + + self.assertEqual('foo', group_info) diff --git a/validations_libs/tests/cli/test_show.py b/validations_libs/tests/cli/test_show.py index 5730901d..1af9e4df 100644 --- a/validations_libs/tests/cli/test_show.py +++ b/validations_libs/tests/cli/test_show.py @@ -38,35 +38,6 @@ class TestShow(BaseCommand): self.cmd.take_action(parsed_args) -class TestShowGroup(BaseCommand): - - def setUp(self): - super(TestShowGroup, self).setUp() - self.cmd = show.ShowGroup(self.app, None) - - @mock.patch('validations_libs.cli.show.ValidationActions', autospec=True) - @mock.patch('yaml.safe_load', return_value=fakes.GROUP) - @mock.patch('six.moves.builtins.open') - def test_show_validations_group_info(self, mock_open, mock_yaml, mock_actions): - arglist = ['--group', 'group.yaml'] - verifylist = [('group', 'group.yaml')] - - mock_info = mock.MagicMock() - mock_info.group_information = mock.MagicMock(return_value='foo') - mock_actions.return_value = mock_info - - parsed_args = self.check_parser(self.cmd, arglist, verifylist) - - group_info = self.cmd.take_action(parsed_args) - - mock_actions.assert_called_once_with( - validation_path=fakes.FAKE_VALIDATIONS_PATH) - - mock_info.group_information.assert_called_once_with('group.yaml') - - self.assertEqual('foo', group_info) - - class TestShowParameter(BaseCommand): def setUp(self): diff --git a/validations_libs/tests/fakes.py b/validations_libs/tests/fakes.py index 325c8457..9846e6f5 100644 --- a/validations_libs/tests/fakes.py +++ b/validations_libs/tests/fakes.py @@ -30,17 +30,28 @@ VALIDATIONS_LIST = [{ }] VALIDATIONS_LIST_GROUP = [{ - 'description': 'My Validation Two Description', - 'groups': ['prep', 'pre-introspection'], - 'id': 'my_val2', - 'name': 'My Validation Two Name', - 'parameters': {'min_value': 8} -}] + 'vars': { + 'metadata': { + 'description': 'My Validation Two Description', + 'groups': ['prep', 'pre-introspection'], + 'id': 'my_val2', + 'name': 'My Validation Two Name', + 'parameters': {'min_value': 8} + }}}] -VALIDATION_LIST_RESULT = (('ID', 'Name', 'Groups'), - [('my_val2', 'My Validation Two Name', - ['prep', 'pre-introspection'])]) +VALIDATION_LIST_RESULT = ( + ('ID', 'Name', 'Groups'), + [ + ( + 'my_val1', + 'My Validation One Name', + ['prep', 'pre-deployment'] + ), + ( + 'my_val2', + 'My Validation Two Name', + ['prep', 'pre-introspection'])]) GROUPS_LIST = [ ('group1', 'Group1 description'), diff --git a/validations_libs/validation_actions.py b/validations_libs/validation_actions.py index c13e70ee..43297467 100644 --- a/validations_libs/validation_actions.py +++ b/validations_libs/validation_actions.py @@ -410,7 +410,7 @@ class ValidationActions(object): vlog = ValidationLogs(log_path) return vlog.get_results(uuid) - def group_information(self, groups): + def group_information(self, groups=constants.VALIDATION_GROUPS_INFO): """Get Information about Validation Groups This is used to print table from python ``Tuple`` with ``PrettyTable``. @@ -444,16 +444,16 @@ class ValidationActions(object): ('group3', 'Description of group3', 1)]) """ val_gp = Group(groups) - group = val_gp.get_formated_group + groups = val_gp.get_formated_group - group_info = [] + groups_info = [] # Get validations number by groups - for gp in group: + for group in groups: validations = v_utils.parse_all_validations_on_disk( - self.validation_path, gp[0]) - group_info.append((gp[0], gp[1], len(validations))) - column_name = ("Groups", "Description", "Number of Validations") - return (column_name, group_info) + self.validation_path, group[0]) + groups_info.append((group[0], group[1], len(validations))) + column_names = ("Groups", "Description", "Number of Validations") + return (column_names, groups_info) def show_validations_parameters(self, validation=None, group=None, output_format='json', download_file=None):