Increase coverage of CLI unit tests
This commit is contained in:
parent
53e3b885f9
commit
88b4f7fa2d
11 changed files with 497 additions and 54 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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, [])
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
196
tests/test_cli/test_set_pkg_owner_global.py
Normal file
196
tests/test_cli/test_set_pkg_owner_global.py
Normal 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')
|
||||
|
|
@ -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"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue