from __future__ import absolute_import try: from unittest import mock except ImportError: import mock from six.moves import StringIO import koji from koji_cli.commands import handle_unblock_notification from . import utils class TestUnblockNotification(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') @mock.patch('sys.stderr', new_callable=StringIO) def test_handle_unblock_notification_without_args(self, stderr, activate_session): expected = "Usage: %s unblock-notification [options] " \ "[ ...]\n" \ "(Specify the --help global option for a list of other help options)\n\n" \ "%s: error: At least one notification block id has to be specified\n" \ % (self.progname, self.progname) with self.assertRaises(SystemExit) as ex: handle_unblock_notification(self.options, self.session, []) self.assertExitCode(ex, 2) self.assert_console_message(stderr, expected) activate_session.assert_called_once_with(self.session, self.options) @mock.patch('koji_cli.commands.activate_session') @mock.patch('sys.stderr', new_callable=StringIO) def test_handle_unblock_notification_not_all_integers(self, stderr, activate_session): expected = "Usage: %s unblock-notification [options] " \ "[ ...]\n" \ "(Specify the --help global option for a list of other help options)\n\n" \ "%s: error: All notification block ids has to be integers\n" \ % (self.progname, self.progname) with self.assertRaises(SystemExit) as ex: handle_unblock_notification(self.options, self.session, ['0', 'abcd']) self.assertExitCode(ex, 2) self.assert_console_message(stderr, expected) activate_session.assert_called_once_with(self.session, self.options) @mock.patch('koji_cli.commands.activate_session') @mock.patch('sys.stdout', new_callable=StringIO) def test_handle_unblock_notification(self, stdout, activate_session): self.options.quiet = False expected = "Notification block 0 successfully removed.\n" \ "Notification block 1234 successfully removed.\n" self.session.deleteNotificationBlock.side_effect = [None, None] handle_unblock_notification(self.options, self.session, ['0', '1234']) activate_session.assert_called_once_with(self.session, self.options) actual = stdout.getvalue() print(actual) self.assertMultiLineEqual(actual, expected) @mock.patch('koji_cli.commands.activate_session') @mock.patch('sys.stdout', new_callable=StringIO) def test_handle_unblock_notification_quiet(self, stdout, activate_session): expected = "" self.options.quiet = True self.session.deleteNotificationBlock.side_effect = [None, None] handle_unblock_notification(self.options, self.session, ['0', '1234']) activate_session.assert_called_once_with(self.session, self.options) actual = stdout.getvalue() print(actual) self.assertMultiLineEqual(actual, expected) def test_unblock_notification_help(self): self.assert_help( handle_unblock_notification, """Usage: %s unblock-notification [options] [ ...] (Specify the --help global option for a list of other help options) Options: -h, --help show this help message and exit """ % self.progname)