unit test for cli list-tagged command

This commit is contained in:
Yuming Zhu 2018-05-17 17:51:20 +08:00 committed by Mike McLean
parent 4a89f8a145
commit b3bc4b6e85
2 changed files with 241 additions and 1 deletions

View file

@ -2406,7 +2406,7 @@ def anon_handle_list_tagged(goptions, session, args):
package = args[1]
tag = args[0]
opts = {}
for key in ('latest','inherit'):
for key in ('latest', 'inherit'):
opts[key] = getattr(options, key)
if options.latest_n is not None:
opts['latest'] = options.latest_n

View file

@ -0,0 +1,240 @@
import sys
import mock
from koji_cli.commands import anon_handle_list_tagged
from . import utils
class TestCliListTagged(utils.CliTestCase):
# Show long diffs in error output...
maxDiff = None
def setUp(self):
self.error_format = """Usage: %s list-tagged [options] tag [package]
(Specify the --help global option for a list of other help options)
%s: error: {message}
""" % (self.progname, self.progname)
self.session = mock.MagicMock()
self.options = mock.MagicMock(quiet=False)
self.session.getTag.return_value = {'id': 1}
self.session.listTaggedRPMS.return_value = [[{'id': 100,
'build_id': 1,
'name': 'rpmA',
'version': '0.0.1',
'release': '1.el6',
'arch': 'noarch',
'sigkey': 'sigkey'},
{'id': 101,
'build_id': 1,
'name': 'rpmA',
'version': '0.0.1',
'release': '1.el6',
'arch': 'x86_64',
'sigkey': 'sigkey'}
], [{'id': 1,
'name': 'packagename',
'version': 'version',
'release': '1.el6',
'nvr': 'n-v-r',
'tag_name': 'tag',
'owner_name': 'owner'}]]
self.session.listTagged.return_value = [{'id': 1,
'name': 'packagename',
'version': 'version',
'release': '1.el6',
'nvr': 'n-v-r',
'tag_name': 'tag',
'owner_name': 'owner'}]
@mock.patch('koji.util.eventFromOpts', return_value={'id': 1000,
'ts': 1000000.11})
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_builds(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest', '--inherit', '--event=1000']
anon_handle_list_tagged(self.options, self.session, args)
activate_session_mock.assert_called_once_with(self.session,
self.options)
self.session.getTag.assert_called_once_with('tag', event=1000)
self.session.listTagged.assert_called_once_with('tag',
event=1000,
inherit=True,
latest=True,
package='pkg')
self.session.listTaggedRPMS.assert_not_called()
self.assert_console_message(sys.stdout,
'Querying at event 1000 (Mon Jan 12 13:46:40 1970)\n'
'Build Tag Built by\n'
'---------------------------------------- -------------------- ----------------\n'
'n-v-r tag owner\n')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_builds_paths(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest', '--inherit', '--paths']
anon_handle_list_tagged(self.options, self.session, args)
self.assert_console_message(sys.stdout,
'Build Tag Built by\n'
'---------------------------------------- -------------------- ----------------\n'
'/mnt/koji/packages/packagename/version/1.el6 tag owner\n')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_rpms(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest-n=3', '--rpms', '--sigs',
'--arch=x86_64']
anon_handle_list_tagged(self.options, self.session, args)
activate_session_mock.assert_called_once_with(self.session,
self.options)
self.session.getTag.assert_called_once_with('tag', event=None)
self.session.listTaggedRPMS.assert_called_once_with('tag',
package='pkg',
inherit=None,
latest=3,
rpmsigs=True,
arch='x86_64')
self.session.listTagged.assert_not_called()
self.assert_console_message(sys.stdout,
'sigkey rpmA-0.0.1-1.el6.noarch\n'
'sigkey rpmA-0.0.1-1.el6.x86_64\n')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_rpms_paths(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest-n=3', '--rpms',
'--arch=x86_64', '--paths']
anon_handle_list_tagged(self.options, self.session, args)
self.assert_console_message(sys.stdout,
'/mnt/koji/packages/packagename/version/1.el6/noarch/rpmA-0.0.1-1.el6.noarch.rpm\n'
'/mnt/koji/packages/packagename/version/1.el6/x86_64/rpmA-0.0.1-1.el6.x86_64.rpm\n')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_sigs_paths(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest-n=3', '--rpms', '--sigs',
'--arch=x86_64', '--paths']
anon_handle_list_tagged(self.options, self.session, args)
self.assert_console_message(sys.stdout, '')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_type(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest-n=3', '--type=maven']
self.session.listTagged.return_value = [{'id': 1,
'name': 'packagename',
'version': 'version',
'release': '1.el6',
'nvr': 'n-v-r',
'tag_name': 'tag',
'owner_name': 'owner',
'maven_group_id': 'group',
'maven_artifact_id': 'artifact'}]
anon_handle_list_tagged(self.options, self.session, args)
activate_session_mock.assert_called_once_with(self.session,
self.options)
self.session.getTag.assert_called_once_with('tag', event=None)
self.session.listTagged.assert_called_once_with('tag',
package='pkg',
inherit=None,
latest=3,
type='maven')
self.session.listTaggedRPMS.assert_not_called()
self.assert_console_message(sys.stdout,
'Build Tag Group Id Artifact Id Built by\n'
'---------------------------------------- -------------------- -------------------- -------------------- ----------------\n'
'n-v-r tag group artifact owner\n')
@mock.patch('koji.util.eventFromOpts', return_value=None)
@mock.patch('koji_cli.commands.activate_session')
def test_list_tagged_type_paths(self, activate_session_mock,
event_from_opts_mock):
args = ['tag', 'pkg', '--latest-n=3', '--type=maven', '--paths']
self.session.listTagged.return_value = [{'id': 1,
'name': 'packagename',
'version': 'version',
'release': '1.el6',
'nvr': 'n-v-r',
'tag_name': 'tag',
'owner_name': 'owner',
'maven_group_id': 'group',
'maven_artifact_id': 'artifact'}]
anon_handle_list_tagged(self.options, self.session, args)
self.assert_console_message(sys.stdout,
'Build Tag Group Id Artifact Id Built by\n'
'---------------------------------------- -------------------- -------------------- -------------------- ----------------\n'
'/mnt/koji/packages/packagename/version/1.el6/maven tag group artifact owner\n')
@mock.patch('koji.util.eventFromOpts', return_value={'id': 1000,
'ts': 1000000.11})
def test_list_tagged_args(self, event_from_opts_mock):
# Case 1, no argument
expected = self.format_error_message(
"A tag name must be specified")
self.assert_system_exit(
anon_handle_list_tagged,
self.options,
self.session,
[],
stderr=expected,
activate_session=None)
# Case 2, arguments > 2
expected = self.format_error_message(
"Only one package name may be specified")
self.assert_system_exit(
anon_handle_list_tagged,
self.options,
self.session,
['tag', 'pkg1', 'pkg2'],
stderr=expected,
activate_session=None)
# Case 3, no tag found
expected = self.format_error_message(
"No such tag: tag")
self.session.getTag.return_value = None
self.assert_system_exit(
anon_handle_list_tagged,
self.options,
self.session,
['tag', 'pkg1'],
stderr=expected)
def test_handle_list_tagged_help(self):
self.assert_help(
anon_handle_list_tagged,
"""Usage: %s list-tagged [options] tag [package]
(Specify the --help global option for a list of other help options)
Options:
-h, --help show this help message and exit
--arch=ARCH List rpms for this arch
--rpms Show rpms instead of builds
--inherit Follow inheritance
--latest Only show the latest builds/rpms
--latest-n=N Only show the latest N builds/rpms
--quiet Do not print the header information
--paths Show the file paths
--sigs Show signatures
--type=TYPE Show builds of the given type only. Currently supported
types: maven, win, image
--event=EVENT# query at event
--ts=TIMESTAMP query at timestamp
--repo=REPO# query at event for a repo
""" % self.progname)