From b3bc4b6e85e0205a81aa8cabac5b1631bbaa4f2c Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Oct 18 2018 12:37:35 +0000 Subject: unit test for cli list-tagged command --- diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index 60f644a..51668d1 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -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 diff --git a/tests/test_cli/test_list_tagged.py b/tests/test_cli/test_list_tagged.py new file mode 100644 index 0000000..3e178f7 --- /dev/null +++ b/tests/test_cli/test_list_tagged.py @@ -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)