PR#2942: Increase coverage of CLI unit tests

Merges #2942
https://pagure.io/koji/pull-request/2942
This commit is contained in:
Tomas Kopecek 2021-07-19 14:04:20 +02:00
commit a844de42ff
11 changed files with 497 additions and 54 deletions

View file

@ -83,3 +83,56 @@ class TestAddTarget(utils.CliTestCase):
handle_add_target(self.options, self.session, [target, tag, dest_tag])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
@mock.patch('sys.stderr', new_callable=StringIO)
def test_add_target_more_option(self, stderr):
args = ['test-target', 'tag', 'test-dest-tag', 'tag-2']
expected = "Usage: %s add-target <name> <build tag> <dest tag>\n" \
"(Specify the --help global option for a list of other help options)\n\n" \
"%s: error: Incorrect number of arguments\n" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_add_target(self.options, self.session, args)
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
def test_add_target_valid(self):
side_effect_result = [{'arches': 'x86_64',
'extra': {},
'id': 1,
'locked': False,
'maven_include_all': False,
'maven_support': False,
'name': 'test-tag',
'perm': None,
'perm_id': None
},
{'arches': 'x86_64',
'extra': {},
'id': 2,
'locked': False,
'maven_include_all': False,
'maven_support': False,
'name': 'test-target',
'perm': None,
'perm_id': None
},
]
target = 'test-target'
tag = 'test-tag'
self.session.getTag.side_effect = side_effect_result
self.session.createBuildTarget.return_value = None
rv = handle_add_target(self.options, self.session, [target, tag])
self.assertEqual(rv, None)
self.session.createBuildTarget.assert_called_once_with(target, tag, target)
self.session.getTag.assert_called_with(target)
def test_add_target_help(self):
self.assert_help(
handle_add_target,
"""Usage: %s add-target <name> <build tag> <dest tag>
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
""" % self.progname)

View file

@ -1,11 +1,13 @@
from __future__ import absolute_import
import mock
import unittest
from six.moves import StringIO
import koji
from koji_cli.commands import handle_cancel
from . import utils
class TestCancel(utils.CliTestCase):
maxDiff = None
@ -21,7 +23,6 @@ class TestCancel(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
@mock.patch('koji_cli.commands.activate_session')
def test_anon_cancel(self, activate_session_mock):
args = ['123']
@ -116,3 +117,19 @@ class TestCancel(utils.CliTestCase):
activate_session_mock.assert_called_once_with(self.session, self.options)
self.session.cancelTaskFull.assert_called_once_with(123, strict=False)
self.session.cancelBuild.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_cancel_without_arguments(self, stderr):
expected = """Usage: %s cancel [options] <task_id|build> [<task_id|build> ...]
(Specify the --help global option for a list of other help options)
%s: error: You must specify at least one task id or build
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_cancel(self.options, self.session, [])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.cancelTask.assert_not_called()
self.session.cancelTaskFull.assert_not_called()
self.session.cancelBuild.assert_not_called()

View file

@ -1,9 +1,11 @@
from __future__ import absolute_import
import mock
import os
import six
import sys
import unittest
import os
import sys
import six
import mock
from koji_cli.commands import handle_edit_user
@ -109,6 +111,36 @@ Options:
(Specify the --help global option for a list of other help options)
%(progname)s: error: You must specify the username of the user to edit
""" % {'progname': progname}
self.assertMultiLineEqual(actual_stdout, expected_stdout)
self.assertMultiLineEqual(actual_stderr, expected_stderr)
# Finally, assert that things were called as we expected.
activate_session_mock.assert_not_called()
session.editUser.assert_not_called()
@mock.patch('sys.stdout', new_callable=six.StringIO)
@mock.patch('sys.stderr', new_callable=six.StringIO)
@mock.patch('koji_cli.commands.activate_session')
def test_handle_edit_user_more_arg(self, activate_session_mock, stderr, stdout):
args = ['user', 'user2']
options = mock.MagicMock()
# Mock out the xmlrpc server
session = mock.MagicMock()
# Run it and check immediate output
# args: --help
# expected: failed, help info shows
with self.assertRaises(SystemExit) as ex:
handle_edit_user(options, session, args)
self.assertExitCode(ex, 2)
actual_stdout = stdout.getvalue()
actual_stderr = stderr.getvalue()
expected_stdout = ''
expected_stderr = """Usage: %(progname)s edit-user <username> [options]
(Specify the --help global option for a list of other help options)
%(progname)s: error: This command only accepts one argument (username)
""" % {'progname': progname}
self.assertMultiLineEqual(actual_stdout, expected_stdout)
self.assertMultiLineEqual(actual_stderr, expected_stderr)

View file

@ -1,11 +1,13 @@
from __future__ import absolute_import
import mock
import time
import unittest
from datetime import datetime
import koji
from six.moves import StringIO
import time
from datetime import datetime
import unittest
from six.moves import StringIO
import mock
import koji
from koji_cli.commands import anon_handle_list_history
from . import utils
@ -209,7 +211,7 @@ class TestListHistory(utils.CliTestCase):
"(Specify the --help global option for a list of other " \
"help options)\n\n" \
"%s: error: Please specify an option to limit " \
"the query\n" %(self.progname, self.progname)
"the query\n" % (self.progname, self.progname)
self.session.getChannel.return_value = None
with self.assertRaises(SystemExit) as ex:
anon_handle_list_history(self.options, self.session, [])
@ -1086,6 +1088,19 @@ class TestListHistory(utils.CliTestCase):
anon_handle_list_history(self.options, self.session, ['--xkey', xkey])
self.assert_console_message(stdout, expected)
@mock.patch('sys.stderr', new_callable=StringIO)
@mock.patch('koji_cli.commands.ensure_connection')
def test_list_history_without_arguments(self, ensure_connection_mock, stderr):
expected = """Usage: %s list-history [options]
(Specify the --help global option for a list of other help options)
%s: error: Please specify an option to limit the query
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
anon_handle_list_history(self.options, self.session, [])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
def test_handle_list_history_help(self):
self.assert_help(
anon_handle_list_history,

View file

@ -1,15 +1,14 @@
from __future__ import absolute_import
import unittest
import mock
from six.moves import StringIO
import koji
from koji_cli.commands import anon_handle_list_notifications
from . import utils
class TestListNotifications(unittest.TestCase):
class TestListNotifications(utils.CliTestCase):
def setUp(self):
self.options = mock.MagicMock()
self.options.debug = False
@ -20,9 +19,12 @@ class TestListNotifications(unittest.TestCase):
@mock.patch('koji_cli.commands.activate_session')
def test_list_notifications(self, activate_session_mock, stdout):
self.session.getBuildNotifications.return_value = [
{'id': 1, 'tag_id': 1, 'package_id': 11, 'email': 'email@test.com', 'success_only': True},
{'id': 2, 'tag_id': None, 'package_id': 11, 'email': 'email@test.com', 'success_only': False},
{'id': 3, 'tag_id': 1, 'package_id': None, 'email': 'email@test.com', 'success_only': True},
{'id': 1, 'tag_id': 1, 'package_id': 11, 'email': 'email@test.com',
'success_only': True},
{'id': 2, 'tag_id': None, 'package_id': 11, 'email': 'email@test.com',
'success_only': False},
{'id': 3, 'tag_id': 1, 'package_id': None, 'email': 'email@test.com',
'success_only': True},
]
self.session.getBuildNotificationBlocks.return_value = []
self.session.getTag.return_value = {'id': 1, 'name': 'tag'}
@ -54,9 +56,12 @@ No notification blocks
@mock.patch('koji_cli.commands.ensure_connection')
def test_list_notifications_user(self, ensure_connection_mock, stdout):
self.session.getBuildNotifications.return_value = [
{'id': 1, 'tag_id': 1, 'package_id': 11, 'email': 'email@test.com', 'success_only': True},
{'id': 2, 'tag_id': None, 'package_id': 11, 'email': 'email@test.com', 'success_only': False},
{'id': 3, 'tag_id': 1, 'package_id': None, 'email': 'email@test.com', 'success_only': True},
{'id': 1, 'tag_id': 1, 'package_id': 11, 'email': 'email@test.com',
'success_only': True},
{'id': 2, 'tag_id': None, 'package_id': 11, 'email': 'email@test.com',
'success_only': False},
{'id': 3, 'tag_id': 1, 'package_id': None, 'email': 'email@test.com',
'success_only': True},
]
self.session.getBuildNotificationBlocks.return_value = [
{'id': 11, 'tag_id': None, 'package_id': 22},
@ -99,28 +104,37 @@ Notification blocks
self.session.getUser.assert_called_once_with('random_name')
self.session.getBuildNotifications.assert_called_once_with(321)
@mock.patch('sys.exit')
@mock.patch('sys.stderr', new_callable=StringIO)
def test_list_notifications_missing_params(self, sys_stderr, sys_exit):
sys_exit.side_effect = SystemExit()
def test_handle_list_notifications_without_option(self, stderr):
expected = """Usage: %s list-notifications [options]
(Specify the --help global option for a list of other help options)
with self.assertRaises(SystemExit):
%s: error: Use --user or --mine.
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
anon_handle_list_notifications(self.options, self.session, [])
self.session.getUser.assert_not_called()
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.getBuildNotifications.assert_not_called()
self.session.getTag.assert_not_called()
self.session.getPackage.assert_not_called()
self.session.getUser.assert_not_called()
@mock.patch('sys.exit')
@mock.patch('sys.stderr', new_callable=StringIO)
def test_handle_list_notifications_no_args(self, sys_stderr, sys_exit):
sys_exit.side_effect = SystemExit()
with self.assertRaises(SystemExit):
anon_handle_list_notifications(self.options, self.session, [])
def test_handle_list_notifications_with_args(self, stderr):
expected = """Usage: %s list-notifications [options]
(Specify the --help global option for a list of other help options)
%s: error: This command takes no arguments
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
anon_handle_list_notifications(self.options, self.session, ['test-argument'])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.getBuildNotifications.assert_not_called()
self.session.getTag.assert_not_called()
self.session.getPackage.assert_not_called()
self.session.getUser.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_list_notifications_user_non_exist_user(self, stderr):
@ -136,3 +150,29 @@ Notification blocks
self.session.getBuildNotifications.assert_not_called()
self.session.getTag.assert_not_called()
self.session.getPackage.assert_not_called()
@mock.patch('sys.stdout', new_callable=StringIO)
@mock.patch('koji_cli.commands.ensure_connection')
def test_list_notifications_without_notification(self, ensure_connection_mock, stdout):
username = 'random_name'
self.session.getUser.return_value = {'id': 321}
self.session.getBuildNotifications.return_value = []
self.session.getBuildNotificationBlocks.return_value = [
{'id': 11, 'tag_id': 22, 'package_id': None}
]
self.session.getTag.return_value = {'id': 22, 'name': 'tag'}
anon_handle_list_notifications(self.options, self.session, ['--user', username])
expected = """No notifications
Notification blocks
ID Tag Package
----------------------------------------------------------
11 tag *
"""
actual = stdout.getvalue()
self.assertMultiLineEqual(actual, expected)
ensure_connection_mock.assert_called_once_with(self.session, self.options)
self.session.getTag.assert_called_once_with(22)
self.session.getPackage.assert_not_called()
self.session.getUser.assert_called_once_with('random_name')
self.session.getBuildNotifications.assert_called_once_with(321)

View file

@ -1,7 +1,9 @@
from __future__ import absolute_import
import unittest
import mock
import six
import unittest
import koji
from koji_cli.lib import _list_tasks
@ -154,7 +156,7 @@ class TestListTasks(unittest.TestCase):
'id': 3,
'parent': 2,
'sub': True}
])
])
class TestCliListTasks(utils.CliTestCase):
@ -250,6 +252,17 @@ class TestCliListTasks(utils.CliTestCase):
handle_list_tasks(options, session, ['--quiet'])
self.assert_console_message(stdout, task_output)
# Case 5, argument error test.
expected = self.format_error_message(
"--all must be used with --after")
self.assert_system_exit(
handle_list_tasks,
options,
session,
['--all'],
stderr=expected,
activate_session=None)
def test_handle_list_tasks_help(self):
self.assert_help(
handle_list_tasks,

View file

@ -1,42 +1,52 @@
from __future__ import absolute_import
import koji
import mock
import unittest
import mock
from six.moves import StringIO
import koji
from koji_cli.commands import handle_remove_notification
from . import utils
class TestAddHost(unittest.TestCase):
class TestAddHost(utils.CliTestCase):
def setUp(self):
self.options = mock.MagicMock()
self.options.debug = False
self.session = mock.MagicMock()
self.session.getAPIVersion.return_value = koji.API_VERSION
@mock.patch('koji_cli.commands.activate_session')
def test_handle_remove_notification(self, activate_session_mock):
handle_remove_notification(self.options, self.session, ['1', '3', '5'])
self.session.deleteNotification.assert_has_calls([mock.call(1), mock.call(3), mock.call(5)])
self.session.deleteNotification.assert_has_calls([mock.call(1), mock.call(3),
mock.call(5)])
@mock.patch('sys.exit')
@mock.patch('sys.stderr', new_callable=StringIO)
def test_handle_remove_notification_bogus(self, sys_stderr, sys_exit):
sys_exit.side_effect = SystemExit()
def test_handle_remove_notification_bogus(self, stderr):
expected = """Usage: %s remove-notification [options] <notification_id> [<notification_id> ...]
(Specify the --help global option for a list of other help options)
with self.assertRaises(SystemExit):
%s: error: All notification ids has to be integers
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_remove_notification(self.options, self.session, ['bogus'])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.deleteNotification.assert_not_called()
@mock.patch('sys.exit')
@mock.patch('sys.stderr', new_callable=StringIO)
def test_handle_remove_notifications_no_args(self, sys_stderr, sys_exit):
sys_exit.side_effect = SystemExit()
def test_handle_remove_notifications_no_args(self, stderr):
expected = """Usage: %s remove-notification [options] <notification_id> [<notification_id> ...]
(Specify the --help global option for a list of other help options)
%s: error: At least one notification id has to be specified
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_remove_notification(self.options, self.session, [])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.deleteNotification.assert_not_called()
with self.assertRaises(SystemExit):
handle_remove_notification(self.options, self.session, [])

View file

@ -34,3 +34,30 @@ class TestRemoveTag(utils.CliTestCase):
handle_remove_tag(self.options, self.session, [tag])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
def test_remove_tag_valid(self):
tag_info = {'arches': 'x86_64',
'extra': {},
'id': 1,
'locked': False,
'maven_include_all': False,
'maven_support': False,
'name': 'test-tag',
'perm': None,
'perm_id': None}
self.session.getTag.return_value = tag_info
rv = handle_remove_tag(self.options, self.session, [tag_info['name']])
self.assertEqual(rv, None)
self.session.deleteTag.assert_called_once_with(tag_info['id'])
self.session.getTag.assert_called_with(tag_info['name'])
def test_remove_tag_help(self):
self.assert_help(
handle_remove_tag,
"""Usage: %s remove-tag [options] <name>
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
""" % self.progname)

View file

@ -35,3 +35,28 @@ class TestRemoveTarget(utils.CliTestCase):
handle_remove_target(self.options, self.session, [target])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
def test_remove_target_valid(self):
build_target = {'build_tag': 2,
'build_tag_name': 'test-tag',
'dest_tag': 1,
'dest_tag_name': 'test-dest-tag',
'id': 1,
'name': 'test-target'}
self.session.getBuildTarget.return_value = build_target
self.session.deleteBuildTarget.return_value = None
rv = handle_remove_target(self.options, self.session, [build_target['name']])
self.assertEqual(rv, None)
self.session.deleteBuildTarget.assert_called_once_with(build_target['id'])
self.session.getBuildTarget.assert_called_with(build_target['name'])
def test_remove_target_help(self):
self.assert_help(
handle_remove_target,
"""Usage: %s remove-target [options] <name>
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
""" % self.progname)

View file

@ -0,0 +1,196 @@
from __future__ import absolute_import
import mock
from six.moves import StringIO
import koji
from koji_cli.commands import handle_set_pkg_owner_global
from . import utils
class TestSetPkgOwnerGlobal(utils.CliTestCase):
# Show long diffs in error output...
maxDiff = None
def setUp(self):
self.options = mock.MagicMock()
self.options.debug = False
self.session = mock.MagicMock()
self.session.getAPIVersion.return_value = koji.API_VERSION
def test_set_pkg_owner_global_help(self):
self.assert_help(
handle_set_pkg_owner_global,
"""Usage: %s set-pkg-owner-global [options] <owner> <package> [<package> ...]
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
--verbose List changes
--test Test mode
--old-user=OLD_USER, --from=OLD_USER
Only change ownership for packages belonging to this
user
""" % self.progname)
@mock.patch('sys.stderr', new_callable=StringIO)
def test_set_pkg_owner_global_without_arguments(self, stderr):
expected = """Usage: %s set-pkg-owner-global [options] <owner> <package> [<package> ...]
(Specify the --help global option for a list of other help options)
%s: error: Please specify an owner and at least one package
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_set_pkg_owner_global(self.options, self.session, [])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.listPackages.assert_not_called()
self.session.getUser.assert_not_called()
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_set_pkg_owner_global_old_user_spefify_owner(self, stderr):
expected = """Usage: %s set-pkg-owner-global [options] <owner> <package> [<package> ...]
(Specify the --help global option for a list of other help options)
%s: error: Please specify an owner
""" % (self.progname, self.progname)
with self.assertRaises(SystemExit) as ex:
handle_set_pkg_owner_global(self.options, self.session, ['--old-user', 'test-user'])
self.assertExitCode(ex, 2)
self.assert_console_message(stderr, expected)
self.session.listPackages.assert_not_called()
self.session.getUser.assert_not_called()
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_set_pkg_owner_global_non_exist_owner(self, stderr):
expected = "No such user: user\n"
self.session.getUser.return_value = None
with self.assertRaises(SystemExit) as ex:
handle_set_pkg_owner_global(self.options, self.session, ['user', 'test-package'])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
self.session.listPackages.assert_not_called()
self.session.getUser.assert_called_once_with('user')
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_set_pkg_owner_global_old_user_non_exist_user(self, stderr):
expected = "No such user: test-user\n"
user_info = [{'id': 1, 'krb_principals': [], 'name': 'user', 'status': 0,
'usertype': 0},
None]
self.session.getUser.side_effect = user_info
with self.assertRaises(SystemExit) as ex:
handle_set_pkg_owner_global(self.options, self.session, ['--old-user', 'test-user',
'user', 'test-package'])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
self.session.listPackages.assert_not_called()
expected_calls = [mock.call('user'), mock.call('test-user')]
self.session.getUser.assert_has_calls(expected_calls)
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stdout', new_callable=StringIO)
def test_set_pkg_owner_global_without_pkgs(self, stdout):
expected = "No data for package test-package\n"
user_info = [{'id': 1, 'krb_principals': [], 'name': 'user', 'status': 0,
'usertype': 0}]
self.session.getUser.return_value = user_info
self.session.listPackages.return_value = []
handle_set_pkg_owner_global(self.options, self.session, ['user', 'test-package'])
self.assert_console_message(stdout, expected)
self.session.listPackages.assert_called_once_with(pkgID='test-package', with_dups=True)
self.session.getUser.assert_called_once_with('user')
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stderr', new_callable=StringIO)
def test_set_pkg_owner_global_user_without_pkgs(self, stderr):
expected = "No data for user test-user\n"
user_info = [{'id': 1, 'krb_principals': [], 'name': 'user', 'status': 0,
'usertype': 0},
{'id': 2, 'krb_principals': [], 'name': 'test-user',
'status': 0, 'usertype': 0}]
self.session.getUser.side_effect = user_info
self.session.listPackages.return_value = []
with self.assertRaises(SystemExit) as ex:
handle_set_pkg_owner_global(self.options, self.session, ['--old-user', 'test-user',
'user'])
self.assertExitCode(ex, 1)
self.assert_console_message(stderr, expected)
self.session.listPackages.assert_called_once_with(userID=2, with_dups=True)
expected_calls = [mock.call('user'), mock.call('test-user')]
self.session.getUser.assert_has_calls(expected_calls)
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stdout', new_callable=StringIO)
def test_set_pkg_owner_global_test(self, stdout):
expected = "Would have changed owner for test-package-123 in tag test-tag: kojiadmin" \
" -> user\n"
user_info = [{'id': 2, 'krb_principals': [], 'name': 'user', 'status': 0,
'usertype': 0},
{'id': 1, 'krb_principals': [], 'name': 'kojiadmin', 'status': 0,
'usertype': 0},
]
self.session.getUser.side_effect = user_info
self.session.listPackages.return_value = [
{'blocked': False,
'extra_arches': '',
'owner_id': 1,
'owner_name': 'kojiadmin',
'package_id': 1,
'package_name': 'test-package-123',
'tag_id': 18,
'tag_name': 'test-tag'}]
handle_set_pkg_owner_global(self.options, self.session, ['user', '--test',
'--old-user', 'kojiadmin'])
self.assert_console_message(stdout, expected)
self.session.listPackages.assert_called_once_with(userID=1, with_dups=True)
expected_calls = [mock.call('user'), mock.call('kojiadmin')]
self.session.getUser.assert_has_calls(expected_calls)
self.session.packageListSetOwner.assert_not_called()
@mock.patch('sys.stdout', new_callable=StringIO)
def test_set_pkg_owner_global_verbose_preserving_owner(self, stdout):
expected = "Preserving owner=user for package test-package in tag test-tag\n"
user_info = {'id': 1, 'krb_principals': [], 'name': 'user', 'status': 0, 'usertype': 0}
self.session.getUser.return_value = user_info
self.session.listPackages.return_value = [
{'blocked': False,
'extra_arches': '',
'owner_id': 1,
'owner_name': 'user',
'package_id': 1,
'package_name': 'test-package-123',
'tag_id': 18,
'tag_name': 'test-tag'}]
handle_set_pkg_owner_global(self.options, self.session, ['user', 'test-package',
'--verbose'])
self.assert_console_message(stdout, expected)
self.session.listPackages.assert_called_once_with(pkgID='test-package', with_dups=True)
self.session.getUser.assert_called_once_with('user')
self.session.packageListSetOwner.assert_not_called()
def test_set_pkg_owner_global_verbose_valid(self, ):
user_info = {'id': 1, 'krb_principals': [], 'name': 'user', 'status': 0,
'usertype': 0}
self.session.getUser.return_value = user_info
self.session.listPackages.return_value = [
{'blocked': False,
'extra_arches': '',
'owner_id': 2,
'owner_name': 'kojiadmin',
'package_id': 1,
'package_name': 'test-package-123',
'tag_id': 18,
'tag_name': 'test-tag'}]
self.session.packageListSetOwner.return_value = None
handle_set_pkg_owner_global(self.options, self.session, ['user', 'test-package',
'--verbose'])
self.session.packageListSetOwner.assert_called_once_with(18, 'test-package-123', 1)
self.session.listPackages.assert_called_once_with(pkgID='test-package', with_dups=True)
self.session.getUser.assert_called_once_with('user')

View file

@ -1,9 +1,10 @@
from __future__ import absolute_import
import mock
import six
import unittest
import six
import mock
import koji
from koji_cli.commands import handle_spin_livecd, handle_spin_livemedia, handle_spin_appliance, \
_build_image
@ -359,6 +360,20 @@ class TestSpinLiveMedia(utils.CliTestCase):
self.assertDictEqual(empty_opts, args[1].__dict__)
self.assertEqual(args[-1], 'livemedia')
def test_handle_spin_livemedia_longer_volid(self):
"""Test handle_spin_livemedia function"""
volid = 'extra-long-volid-in-spin-livemedia-cli-command'
expected = self.format_error_message(
'Volume ID has a maximum length of 32 characters')
args = ['name', 'version', 'target', 'arch', 'file.ks', '--volid', volid]
self.assert_system_exit(
handle_spin_livemedia,
self.options,
self.session,
args,
stderr=expected,
activate_session=None)
@mock.patch('koji_cli.commands._build_image')
def test_handle_spin_livemedia_argument_error(self, build_image_mock):
"""Test handle_spin_livemedia function argument error"""