107 lines
5.1 KiB
Python
107 lines
5.1 KiB
Python
import unittest
|
|
|
|
from unittest import mock
|
|
|
|
import koji
|
|
import kojihub
|
|
|
|
QP = kojihub.QueryProcessor
|
|
|
|
|
|
class TestEditBuildTarget(unittest.TestCase):
|
|
|
|
def getQuery(self, *args, **kwargs):
|
|
query = QP(*args, **kwargs)
|
|
query.execute = mock.MagicMock()
|
|
query.executeOne = mock.MagicMock()
|
|
query.singleValue = self.query_singleValue
|
|
self.queries.append(query)
|
|
return query
|
|
|
|
def setUp(self):
|
|
self.lookup_build_target = mock.patch('kojihub.kojihub.lookup_build_target').start()
|
|
self.verify_name_internal = mock.patch('kojihub.kojihub.verify_name_internal').start()
|
|
self.get_tag = mock.patch('kojihub.kojihub.get_tag').start()
|
|
self.exports = kojihub.RootExports()
|
|
self.target_name = 'build-target'
|
|
self.name = 'build-target-rename'
|
|
self.build_tag = 'tag'
|
|
self.dest_tag = 'dest-tag'
|
|
self.target_info = {'id': 123, 'name': self.target_name}
|
|
self.build_tag_info = {'id': 111, 'name': self.build_tag}
|
|
self.dest_tag_info = {'id': 112, 'name': self.dest_tag}
|
|
self.context = mock.patch('kojihub.kojihub.context').start()
|
|
self.session = self.context.session
|
|
self.session.assertPerm = mock.MagicMock()
|
|
self.QueryProcessor = mock.patch('kojihub.kojihub.QueryProcessor',
|
|
side_effect=self.getQuery).start()
|
|
self.queries = []
|
|
self.query_singleValue = mock.MagicMock()
|
|
|
|
def tearDown(self):
|
|
mock.patch.stopall()
|
|
|
|
def test_non_exist_build_target(self):
|
|
self.verify_name_internal.return_value = None
|
|
self.lookup_build_target.return_value = None
|
|
with self.assertRaises(koji.GenericError) as cm:
|
|
self.exports.editBuildTarget(self.target_name, self.name, self.build_tag,
|
|
self.dest_tag)
|
|
self.assertEqual(f"No such build target: {self.target_name}", str(cm.exception))
|
|
self.session.assertPerm.assert_called_once_with('target')
|
|
self.verify_name_internal.assert_called_once_with(self.name)
|
|
self.lookup_build_target.assert_called_once_with(self.target_name)
|
|
|
|
def test_target_wrong_format(self):
|
|
name = 'build-target-rename+'
|
|
|
|
# name is longer as expected
|
|
self.verify_name_internal.side_effect = koji.GenericError
|
|
with self.assertRaises(koji.GenericError):
|
|
self.exports.editBuildTarget(self.target_name, name, self.build_tag, self.dest_tag)
|
|
|
|
# not except regex rules
|
|
self.verify_name_internal.side_effect = koji.GenericError
|
|
with self.assertRaises(koji.GenericError):
|
|
self.exports.editBuildTarget(self.target_name, name, self.build_tag, self.dest_tag)
|
|
|
|
def test_target_non_exist_build_tag(self):
|
|
self.verify_name_internal.return_value = None
|
|
self.lookup_build_target.return_value = self.target_info
|
|
self.get_tag.return_value = None
|
|
with self.assertRaises(koji.GenericError) as cm:
|
|
self.exports.editBuildTarget(self.target_name, self.name, self.build_tag,
|
|
self.dest_tag)
|
|
self.assertEqual(f"build tag '{self.build_tag}' does not exist", str(cm.exception))
|
|
self.session.assertPerm.assert_called_once_with('target')
|
|
self.verify_name_internal.assert_called_once_with(self.name)
|
|
self.lookup_build_target.assert_called_once_with(self.target_name)
|
|
self.get_tag.assert_called_once_with(self.build_tag)
|
|
|
|
def test_target_non_exist_dest_tag(self):
|
|
self.verify_name_internal.return_value = None
|
|
self.lookup_build_target.return_value = self.target_info
|
|
self.get_tag.side_effect = [self.build_tag_info, None]
|
|
with self.assertRaises(koji.GenericError) as cm:
|
|
self.exports.editBuildTarget(self.target_name, self.name, self.build_tag,
|
|
self.dest_tag)
|
|
self.assertEqual(f"destination tag '{self.dest_tag}' does not exist", str(cm.exception))
|
|
self.session.assertPerm.assert_called_once_with('target')
|
|
self.verify_name_internal.assert_called_once_with(self.name)
|
|
self.lookup_build_target.assert_called_once_with(self.target_name)
|
|
self.get_tag.assert_has_calls([mock.call(self.build_tag), mock.call(self.dest_tag)])
|
|
|
|
def test_target_exists(self):
|
|
self.verify_name_internal.return_value = None
|
|
self.lookup_build_target.return_value = self.target_info
|
|
self.get_tag.side_effect = [self.build_tag_info, self.dest_tag_info]
|
|
self.query_singleValue.return_value = 2
|
|
with self.assertRaises(koji.GenericError) as cm:
|
|
self.exports.editBuildTarget(self.target_name, self.name, self.build_tag,
|
|
self.dest_tag)
|
|
self.assertEqual(f'name "{self.name}" is already taken by build target 2',
|
|
str(cm.exception))
|
|
self.session.assertPerm.assert_called_once_with('target')
|
|
self.verify_name_internal.assert_called_once_with(self.name)
|
|
self.lookup_build_target.assert_called_once_with(self.target_name)
|
|
self.get_tag.assert_has_calls([mock.call(self.build_tag), mock.call(self.dest_tag)])
|