debian-koji/tests/test_cli/test_list_groups.py
Yuming Zhu ca05418fb5 unittest: use unittest.mock instead of mock
because the absence of unittest.mock on python2.7, we still fallback to
mock
2024-10-23 16:35:30 +00:00

206 lines
7.2 KiB
Python

from __future__ import absolute_import
try:
from unittest import mock
except ImportError:
import mock
import six
import time
import unittest
from koji_cli.commands import anon_handle_list_groups
from . import utils
class TestListGroups(utils.CliTestCase):
def setUp(self):
self.maxDiff = None
self.session = mock.MagicMock()
self.options = mock.MagicMock()
self.ensure_connection_mock = mock.patch('koji_cli.commands.ensure_connection').start()
self.event_from_opts = mock.patch('koji.util.eventFromOpts').start()
self.error_format = """Usage: %s list-groups [options] <tag> [<group>]
(Specify the --help global option for a list of other help options)
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_anon_handle_list_groups_argument_error(self):
"""Test anon_handle_list_groups function"""
for arg in [[], ['tag', 'grp', 'etc']]:
self.assert_system_exit(
anon_handle_list_groups,
self.options, self.session, arg,
stderr=self.format_error_message("Incorrect number of arguments"),
activate_session=None)
self.ensure_connection_mock.assert_not_called()
def test_anon_handle_list_groups_list_all(self):
self.event_from_opts.return_value = {}
self.__list_groups('', [], '')
def test_anon_handle_list_groups_list_show_blocked(self):
self.event_from_opts.return_value = {}
self.__list_groups('', ['--show-blocked'], '')
def test_anon_handle_list_groups_list_other_tag(self):
self.event_from_opts.return_value = {}
self.__list_groups('srpm-build', [], '')
def test_anon_handle_list_groups_list_with_group(self):
self.event_from_opts.return_value = {}
self.__list_groups('build', [], '')
# output should be blank
self.__list_groups('wrong-grp', [], '')
def test_anon_handle_list_groups_list_with_event(self):
self.event_from_opts.return_value = {
'id': 4,
'ts': 1234567
}
event = {'id': 4, 'timestr': time.asctime(time.localtime(1234567))}
expected = "Querying at event %(id)i (%(timestr)s)" % event + "\n"
self.__list_groups('build', ['--ts', '1234567'], expected)
@mock.patch('koji_cli.commands.ensure_connection')
def __list_groups(self, query_group, options, expected, ensure_connection_mock, tag=True):
_list_tags = [
{
'maven_support': False,
'locked': False,
'name': 'fedora',
'perm': None,
'id': 1,
'arches': None,
'maven_include_all': False,
'perm_id': None
}, {
'maven_support': False,
'locked': False,
'name': 'fedora-build',
'perm': None,
'id': 2,
'arches': 'x86_64, i386, ppc, ppc64',
'maven_include_all': False,
'perm_id': None
}
]
_get_tag_groups = [
{
"grouplist": [],
"packagelist": [
{
"package": "bash",
"requires": None,
"tag_id": 2,
"group_id": 1,
"type": "mandatory",
"basearchonly": None,
"blocked": False
},
],
"display_name": "build",
"name": "build",
"uservisible": True,
"description": None,
"tag_id": 2,
"is_default": None,
"biarchonly": False,
"exported": True,
"langonly": None,
"group_id": 1,
"blocked": False
},
{
"grouplist": [
{
'is_metapkg': False,
'name': 'build-base',
'tag_id': 2,
'req_id': 4,
'group_id': 2,
'type': 'mandatory',
'blocked': False
}
],
"packagelist": [
{
"package": "bash",
"requires": None,
"tag_id": 3,
"group_id": 2,
"type": "mandatory",
"basearchonly": None,
"blocked": False
}
],
"display_name": "srpm-build",
"name": "srpm-build",
"uservisible": True,
"description": None,
"tag_id": 3,
"is_default": None,
"biarchonly": False,
"exported": True,
"langonly": None,
"group_id": 2,
"blocked": True
},
]
tags = dict([(x['id'], x['name']) for x in _list_tags])
_group_list = [(x['name'], x) for x in _get_tag_groups]
_group_list.sort()
groups = [x[1] for x in _group_list]
for group in groups:
if query_group != '' and group['name'] != query_group:
continue
expected += "%s [%s]" % (group['name'], tags.get(group['tag_id'],
group['tag_id'])) + "\n"
for grp in group["grouplist"]:
grp['tag_name'] = tags.get(grp['tag_id'], grp['tag_id'])
expected += " @%(name)s [%(tag_name)s]" % grp + "\n"
for pkg in group["packagelist"]:
pkg['tag_name'] = tags.get(pkg['tag_id'], pkg['tag_id'])
expected += " %(package)s: %(basearchonly)s, %(type)s [%(tag_name)s]"\
% pkg + "\n"
def get_tag(tag_id, strict=False):
self.assertFalse(strict)
for tag in _list_tags:
if tag['id'] == tag_id:
return tag
return None
self.session.getTag.side_effect = get_tag
self.session.getTagGroups.return_value = _get_tag_groups
args = ['fedora26-build']
args += [query_group] if query_group != '' else []
args += options if options else []
with mock.patch('sys.stdout', new_callable=six.StringIO) as stdout:
anon_handle_list_groups(self.options, self.session, args)
self.assert_console_message(stdout, expected)
def test_anon_handle_list_groups_help(self):
self.assert_help(
anon_handle_list_groups,
"""Usage: %s list-groups [options] <tag> [<group>]
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
--event=EVENT# query at event
--ts=TIMESTAMP query at last event before timestamp
--repo=REPO# query at event for a repo
--show-blocked Show blocked packages and groups
""" % self.progname)
if __name__ == '__main__':
unittest.main()