def test_get_notification_recipients_tag_without_build( self, readPackageList, get_user): ### with tag without build makes no sense build = None tag_id = 123 state = koji.BUILD_STATES['CANCELED'] self.queries = [] with self.assertRaises(koji.GenericError): kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(self.queries, []) readPackageList.assert_not_called()
def test_get_notification_recipients_watchers(self, readPackageList, get_user): # without build / tag_id build = None tag_id = None state = koji.BUILD_STATES['CANCELED'] emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, []) # only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ['email', 'user_id']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id IS NULL', 'usertype IN %(users_usertypes)s' ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) ''' q = self.queries[1] self.assertEqual(q.columns, ['user_id']) self.assertEqual(q.tables, ['build_notifications_block']) self.assertEqual(q.clauses, ['user_id IN %(user_ids)s']) self.assertEqual(q.joins, []) self.assertEqual(q.values['user_ids'], None) ''' readPackageList.assert_not_called()
def test_get_notification_recipients_optout(self, readPackageList, get_user): # blocked package owner build = { 'package_id': 12345, 'owner_name': 'owner_name', 'owner_id': 5 } tag_id = 123 state = koji.BUILD_STATES['CANCELED'] get_user.return_value = { 'id': 342, 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['NORMAL'] } self.set_queries([[{ 'user_id': 5, 'email': 'owner_name@%s' % self.context.opts['EmailDomain'] }], [{ 'user_id': 5 }]]) emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, [])
def test_get_notification_recipients_build_without_tag( self, readPackageList, get_user): ### with build without tag tag_id = None state = koji.BUILD_STATES['CANCELED'] build = { 'package_id': 12345, 'owner_name': 'owner_name', 'owner_id': 5 } self.queries = [] self.set_queries([[{ 'user_id': 5, 'email': 'owner_name@%s' % self.context.opts['EmailDomain'] }], []]) emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 2) q = self.queries[0] self.assertEqual(q.columns, ['email', 'user_id']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'package_id = %(package_id)i OR package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id IS NULL', 'usertype IN %(users_usertypes)s' ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) q = self.queries[1] self.assertEqual(q.columns, ['user_id']) self.assertEqual(q.tables, ['build_notifications_block']) self.assertEqual(q.clauses, [ 'package_id = %(package_id)i OR package_id IS NULL', 'tag_id IS NULL', 'user_id IN %(user_ids)s', ]) self.assertEqual(q.joins, None) self.assertEqual(q.values['user_ids'], [5]) readPackageList.assert_not_called()
def test_get_notification_recipients_tag_with_build( self, readPackageList, get_user): ### with tag and build build = { 'package_id': 12345, 'owner_name': 'owner_name', 'owner_id': 5 } tag_id = 123 state = koji.BUILD_STATES['CANCELED'] readPackageList.return_value = { 12345: { 'blocked': False, 'owner_id': 'owner_id' } } get_user.return_value = { 'id': 342, 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['NORMAL'] } self.set_queries([[{ 'user_id': 5, 'email': 'owner_name@%s' % self.context.opts['EmailDomain'] }], []]) emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual( sorted(emails), ['*****@*****.**', '*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 2) q = self.queries[0] self.assertEqual(q.columns, ['email', 'user_id']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'package_id = %(package_id)i OR package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id = %(tag_id)i OR tag_id IS NULL', 'usertype IN %(users_usertypes)s', ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) q = self.queries[1] self.assertEqual(q.columns, ['user_id']) self.assertEqual(q.tables, ['build_notifications_block']) self.assertEqual(q.clauses, [ 'package_id = %(package_id)i OR package_id IS NULL', 'tag_id = %(tag_id)i OR tag_id IS NULL', 'user_id IN %(user_ids)s', ]) self.assertEqual(q.joins, None) self.assertEqual(sorted(q.values['user_ids']), [5, 342]) readPackageList.assert_called_once_with(pkgID=build['package_id'], tagID=tag_id, inherit=True) get_user.asssert_called_once_with(342, strict=True)
def test_get_notification_recipients(self, readPackageList, get_user): # without build / tag_id build = None tag_id = None state = koji.BUILD_STATES['CANCELED'] emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, []) # only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ('email', )) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'status = %(users_status)i', 'usertype IN %(users_usertypes)s', 'package_id IS NULL', 'tag_id IS NULL', 'success_only = FALSE' ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_not_called() ### with build without tag build = {'package_id': 12345, 'owner_name': 'owner_name'} self.queries = [] emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ('email', )) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'status = %(users_status)i', 'usertype IN %(users_usertypes)s', 'package_id = %(package_id)i OR package_id IS NULL', 'tag_id IS NULL', 'success_only = FALSE' ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_not_called() ### with tag without build makes no sense build = None tag_id = 123 self.queries = [] with self.assertRaises(koji.GenericError): kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(self.queries, []) readPackageList.assert_not_called() ### with tag and build build = {'package_id': 12345, 'owner_name': 'owner_name'} tag_id = 123 self.queries = [] readPackageList.return_value = { 12345: { 'blocked': False, 'owner_id': 'owner_id' } } get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['NORMAL'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual( emails, ['*****@*****.**', '*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ('email', )) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, [ 'status = %(users_status)i', 'usertype IN %(users_usertypes)s', 'package_id = %(package_id)i OR package_id IS NULL', 'tag_id = %(tag_id)i OR tag_id IS NULL', 'success_only = FALSE' ]) self.assertEqual( q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_called_once_with(pkgID=build['package_id'], tagID=tag_id, inherit=True) get_user.asssert_called_once_with('owner_id', strict=True) # blocked package owner get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['BLOCKED'], 'usertype': koji.USERTYPES['NORMAL'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**']) # package owner is machine get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['HOST'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**'])
def test_get_notification_recipients(self, readPackageList, get_user): # without build / tag_id build = None tag_id = None state = koji.BUILD_STATES['CANCELED'] emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, []) # only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ['email']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, ['package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id IS NULL', 'usertype IN %(users_usertypes)s']) self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_not_called() ### with build without tag build = {'package_id': 12345, 'owner_name': 'owner_name'} self.queries = [] emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ['email']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, ['package_id = %(package_id)i OR package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id IS NULL', 'usertype IN %(users_usertypes)s']) self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_not_called() ### with tag without build makes no sense build = None tag_id = 123 self.queries = [] with self.assertRaises(koji.GenericError): kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(self.queries, []) readPackageList.assert_not_called() ### with tag and build build = {'package_id': 12345, 'owner_name': 'owner_name'} tag_id = 123 self.queries = [] readPackageList.return_value = {12345: {'blocked': False, 'owner_id': 'owner_id'}} get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['NORMAL'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(sorted(emails), ['*****@*****.**', '*****@*****.**']) # there should be only query to watchers self.assertEqual(len(self.queries), 1) q = self.queries[0] self.assertEqual(q.columns, ['email']) self.assertEqual(q.tables, ['build_notifications']) self.assertEqual(q.clauses, ['package_id = %(package_id)i OR package_id IS NULL', 'status = %(users_status)i', 'success_only = FALSE', 'tag_id = %(tag_id)i OR tag_id IS NULL', 'usertype IN %(users_usertypes)s']) self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id']) self.assertEqual(q.values['package_id'], build['package_id']) self.assertEqual(q.values['state'], state) self.assertEqual(q.values['build'], build) self.assertEqual(q.values['tag_id'], tag_id) readPackageList.assert_called_once_with(pkgID=build['package_id'], tagID=tag_id, inherit=True) get_user.asssert_called_once_with('owner_id', strict=True) # blocked package owner get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['BLOCKED'], 'usertype': koji.USERTYPES['NORMAL'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**']) # package owner is machine get_user.return_value = { 'id': 'owner_id', 'name': 'pkg_owner_name', 'status': koji.USER_STATUS['NORMAL'], 'usertype': koji.USERTYPES['HOST'] } emails = kojihub.get_notification_recipients(build, tag_id, state) self.assertEqual(emails, ['*****@*****.**'])