104 lines
4.2 KiB
Python
104 lines
4.2 KiB
Python
from unittest import mock
|
|
|
|
import koji
|
|
import unittest
|
|
import kojihub
|
|
import kojihub.kojihub
|
|
from .utils import DBQueryTestCase
|
|
|
|
|
|
class TestBuildNotification(unittest.TestCase):
|
|
def setUp(self):
|
|
self.context = mock.patch('kojihub.kojihub.context').start()
|
|
self.context.session.assertPerm = mock.MagicMock()
|
|
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
|
|
self._get_build_target = mock.patch('kojihub.kojihub._get_build_target').start()
|
|
self.get_notification_recipients = mock.patch(
|
|
'kojihub.kojihub.get_notification_recipients').start()
|
|
self.make_task = mock.patch('kojihub.kojihub.make_task').start()
|
|
|
|
def tearDown(self):
|
|
mock.patch.stopall()
|
|
|
|
def test_disabled_notification(self):
|
|
self.context.opts = {'DisableNotifications': True}
|
|
rv = kojihub.build_notification(10, 1)
|
|
self.assertEqual(rv, None)
|
|
self.get_build.assert_not_called()
|
|
self._get_build_target.assert_not_called()
|
|
self.get_notification_recipients.assert_not_called()
|
|
self.make_task.assert_not_called()
|
|
|
|
def test_not_complete_build(self):
|
|
build_id = 1
|
|
task_id = 10
|
|
self.context.opts = {'DisableNotifications': False}
|
|
buildinfo = {'state': 0, 'id': build_id}
|
|
target_info = {'dest_tag': 'test_dest_tag'}
|
|
self.get_build.return_value = buildinfo
|
|
self._get_build_target.return_value = target_info
|
|
|
|
with self.assertRaises(koji.GenericError) as ex:
|
|
kojihub.build_notification(task_id, build_id)
|
|
self.assertEqual('never send notifications for incomplete builds', str(ex.exception))
|
|
self.get_build.assert_called_once_with(build_id)
|
|
self._get_build_target.assert_called_once_with(task_id)
|
|
self.get_notification_recipients.assert_not_called()
|
|
self.make_task.assert_not_called()
|
|
|
|
def test_valid(self):
|
|
build_id = 1
|
|
task_id = 10
|
|
self.context.opts = {'DisableNotifications': False}
|
|
buildinfo = {'state': 1, 'id': build_id}
|
|
target_info = {'dest_tag': 'test_dest_tag'}
|
|
recipients = ['email1@mail.com', 'email2@mail.com']
|
|
weburl = 'http://localhost/koji'
|
|
self.get_build.return_value = buildinfo
|
|
self._get_build_target.return_value = target_info
|
|
self.get_notification_recipients.return_value = recipients
|
|
self.make_task.return_value = 11
|
|
|
|
rv = kojihub.build_notification(task_id, build_id)
|
|
self.assertEqual(rv, None)
|
|
self.get_build.assert_called_once_with(build_id)
|
|
self._get_build_target.assert_called_once_with(task_id)
|
|
self.get_notification_recipients.assert_called_once_with(
|
|
buildinfo, target_info['dest_tag'], buildinfo['state'])
|
|
self.make_task.assert_called_once_with('buildNotification',
|
|
[recipients, buildinfo, target_info, weburl])
|
|
|
|
|
|
class TestGetBuildNotifications(DBQueryTestCase):
|
|
def setUp(self):
|
|
super(TestGetBuildNotifications, self).setUp()
|
|
|
|
def tearDown(self):
|
|
mock.patch.stopall()
|
|
|
|
def test_valid(self):
|
|
user_id = 1
|
|
kojihub.get_build_notifications(user_id)
|
|
self.assertEqual(len(self.queries), 1)
|
|
self.assertLastQueryEqual(tables=['build_notifications'],
|
|
columns=['email', 'id', 'package_id', 'success_only', 'tag_id',
|
|
'user_id'],
|
|
clauses=['user_id = %(user_id)i'],
|
|
values={'user_id': user_id})
|
|
|
|
|
|
class TestGetBuildNotificationBlocks(DBQueryTestCase):
|
|
def setUp(self):
|
|
super(TestGetBuildNotificationBlocks, self).setUp()
|
|
|
|
def tearDown(self):
|
|
mock.patch.stopall()
|
|
|
|
def test_valid(self):
|
|
user_id = 1
|
|
kojihub.get_build_notification_blocks(user_id)
|
|
self.assertEqual(len(self.queries), 1)
|
|
self.assertLastQueryEqual(tables=['build_notifications_block'],
|
|
columns=['id', 'package_id', 'tag_id', 'user_id'],
|
|
clauses=['user_id = %(user_id)i'],
|
|
values={'user_id': user_id})
|