unit tests
This commit is contained in:
parent
e37e27d7c5
commit
dec25644da
1 changed files with 140 additions and 1 deletions
|
|
@ -2,7 +2,7 @@ from unittest import mock
|
|||
import unittest
|
||||
|
||||
import koji
|
||||
import kojihub
|
||||
from kojihub import kojihub
|
||||
|
||||
IP = kojihub.InsertProcessor
|
||||
|
||||
|
|
@ -27,6 +27,7 @@ class TestNewBuild(unittest.TestCase):
|
|||
self.recycle_build = mock.patch("kojihub.kojihub.recycle_build").start()
|
||||
self.context = mock.patch("kojihub.kojihub.context").start()
|
||||
self.find_build_id = mock.patch("kojihub.kojihub.find_build_id").start()
|
||||
self.get_old_draft_build = mock.patch("kojihub.kojihub._get_old_draft_build").start()
|
||||
|
||||
def tearDown(self):
|
||||
mock.patch.stopall()
|
||||
|
|
@ -197,6 +198,7 @@ class TestNewBuild(unittest.TestCase):
|
|||
self.get_user.return_value = {"id": 123}
|
||||
self.get_build.side_effect = [None, mock.ANY]
|
||||
self.find_build_id.return_value = None
|
||||
self.get_old_draft_build.return_value = None
|
||||
|
||||
kojihub.new_build(data)
|
||||
|
||||
|
|
@ -236,3 +238,140 @@ class TestNewBuild(unittest.TestCase):
|
|||
"release": "test_release,draft_108",
|
||||
}
|
||||
)
|
||||
|
||||
def test_draft_exists(self):
|
||||
data = {
|
||||
"owner": 123456,
|
||||
"name": "test_name",
|
||||
"version": "test_version",
|
||||
"release": "test_release",
|
||||
"epoch": "test_epoch",
|
||||
"draft": True,
|
||||
}
|
||||
self.new_package.return_value = 54
|
||||
self.get_user.return_value = {"id": 123}
|
||||
self.get_build.side_effect = [None, mock.ANY]
|
||||
self.find_build_id.return_value = 101010
|
||||
self.get_old_draft_build.return_value = None
|
||||
self.nextval.return_value = 108
|
||||
|
||||
with self.assertRaises(koji.GenericError) as ex:
|
||||
kojihub.new_build(data)
|
||||
|
||||
assert str(ex.exception).startswith('The build already exists')
|
||||
self.assertEqual(len(self.inserts), 0)
|
||||
self.find_build_id.assert_called_once_with(
|
||||
{
|
||||
"name": "test_name",
|
||||
"version": "test_version",
|
||||
"release": "test_release,draft_108",
|
||||
}
|
||||
)
|
||||
|
||||
def test_recycle(self):
|
||||
self.get_build.return_value = {'id': 456, 'nvr': 'N-V-R'}
|
||||
self.get_user.return_value = {"id": 123}
|
||||
data = {
|
||||
"name": "test_name",
|
||||
"version": "test_version",
|
||||
"release": "test_release",
|
||||
"epoch": "test_epoch",
|
||||
"owner": "test_owner",
|
||||
"extra": {"extra_key": "extra_value"},
|
||||
}
|
||||
|
||||
# shouldn't recycle if strict is True
|
||||
with self.assertRaises(koji.GenericError) as ex:
|
||||
kojihub.new_build(data, strict=True)
|
||||
assert str(ex.exception).startswith('Existing build found')
|
||||
self.assertEqual(len(self.inserts), 0)
|
||||
|
||||
# but should work if not
|
||||
result = kojihub.new_build(data) # strict is off by default
|
||||
self.assertEqual(len(self.inserts), 0)
|
||||
self.assertEqual(result, 456)
|
||||
|
||||
def test_recycle_draft(self):
|
||||
self.get_user.return_value = {"id": 123}
|
||||
data = {
|
||||
"name": "test_name",
|
||||
"version": "test_version",
|
||||
"release": "test_release",
|
||||
"epoch": "test_epoch",
|
||||
"owner": "test_owner",
|
||||
"draft": True,
|
||||
"extra": {"extra_key": "extra_value"},
|
||||
}
|
||||
|
||||
# shouldn't recycle if non-draft build exists
|
||||
self.get_build.return_value = {'id': 456, 'nvr': 'N-V-R'}
|
||||
with self.assertRaises(koji.GenericError) as ex:
|
||||
kojihub.new_build(data, strict=True)
|
||||
assert str(ex.exception).startswith('Target build already exists')
|
||||
self.recycle_build.assert_not_called()
|
||||
self.assertEqual(len(self.inserts), 0)
|
||||
|
||||
# but should work if not
|
||||
self.get_build.return_value = None
|
||||
self.get_old_draft_build.return_value = {'id': 455, 'nvr': 'N-V-R,draft_455'}
|
||||
result = kojihub.new_build(data)
|
||||
self.assertEqual(len(self.inserts), 0)
|
||||
self.recycle_build.assert_called_once()
|
||||
self.assertEqual(result, 455)
|
||||
|
||||
|
||||
class TestGetOldDraft(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.QueryProcessor = mock.patch("kojihub.kojihub.QueryProcessor").start()
|
||||
self.get_build = mock.patch("kojihub.kojihub.get_build").start()
|
||||
|
||||
def tearDown(self):
|
||||
mock.patch.stopall()
|
||||
|
||||
def test_query_skipped(self):
|
||||
# cases where the function doesn't even query
|
||||
|
||||
# not a draft
|
||||
data = {'draft': False, 'task_id': 1234, 'state': koji.BUILD_STATES['BUILDING']}
|
||||
result = kojihub._get_old_draft_build(data)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
# no task id
|
||||
data = {'draft': True, 'task_id': None, 'state': koji.BUILD_STATES['BUILDING']}
|
||||
result = kojihub._get_old_draft_build(data)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
# wrong state
|
||||
data = {'draft': True, 'task_id': 1234, 'state': koji.BUILD_STATES['COMPLETE']}
|
||||
result = kojihub._get_old_draft_build(data)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
# none of these should have resulted in a query
|
||||
self.QueryProcessor.assert_not_called()
|
||||
|
||||
def test_no_match(self):
|
||||
# the function queries and gets no match
|
||||
|
||||
data = {
|
||||
'name': 'foo', 'version': '1.2', 'release': '55',
|
||||
'draft': True, 'task_id': 1234, 'state': koji.BUILD_STATES['BUILDING']}
|
||||
self.QueryProcessor.return_value.execute.return_value = [] # no match
|
||||
result = kojihub._get_old_draft_build(data)
|
||||
self.assertEqual(result, None)
|
||||
|
||||
def test_match(self):
|
||||
# the function queries and gets no match
|
||||
|
||||
data = {
|
||||
'name': 'foo', 'version': '1.2', 'release': '55',
|
||||
'draft': True, 'task_id': 1234, 'state': koji.BUILD_STATES['BUILDING']}
|
||||
row = {'build.id': 5678}
|
||||
self.QueryProcessor.return_value.execute.return_value = [row]
|
||||
self.get_build.return_value = mock.sentinel.binfo
|
||||
result = kojihub._get_old_draft_build(data)
|
||||
self.assertEqual(result, mock.sentinel.binfo)
|
||||
self.get_build.assert_called_with(5678)
|
||||
|
||||
|
||||
# the end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue