hub: new addArchiveType RPC

Add a new hub method for inserting new archivetype records.

This closely matches addBType.

The purpose of this change is to make it easier to permit content
generators to import files with extensions that we have not defined in
the upstream packaged koji SQL file.
This commit is contained in:
Ken Dreyer 2018-11-05 17:25:56 -07:00 committed by Tomas Kopecek
parent a0711397cc
commit e800b1d5a6
2 changed files with 86 additions and 0 deletions

View file

@ -0,0 +1,53 @@
from __future__ import absolute_import
try:
import unittest2 as unittest
except ImportError:
import unittest
import mock
import koji
import kojihub
IP = kojihub.InsertProcessor
class TestAddArchiveType(unittest.TestCase):
@mock.patch('kojihub._multiRow')
@mock.patch('kojihub.get_archive_type')
@mock.patch('kojihub.InsertProcessor')
def test_add_archive_type(self, InsertProcessor, get_archive_type,
_multiRow):
# Not sure why mock can't patch kojihub.context, so we do this
session = kojihub.context.session = mock.MagicMock()
mocks = [InsertProcessor, get_archive_type, session]
# It seems MagicMock will not automatically handle attributes that
# start with "assert"
session.assertPerm = mock.MagicMock()
# expected case
get_archive_type.return_value = None
insert = InsertProcessor.return_value
kojihub.add_archive_type('deb', 'Debian package', 'deb')
InsertProcessor.assert_called_once()
insert.execute.assert_called_once()
args, kwargs = InsertProcessor.call_args
ip = IP(*args, **kwargs)
self.assertEquals(ip.table, 'archivetypes')
self.assertEquals(ip.data, {'name': 'deb',
'description': 'Debian package',
'extensions': 'deb'})
self.assertEquals(ip.rawdata, {})
session.assertPerm.assert_called_with('admin')
for m in mocks:
m.reset_mock()
session.assertPerm = mock.MagicMock()
# already exists
get_archive_type.return_value = True
with self.assertRaises(koji.GenericError):
kojihub.add_archive_type('deb', 'Debian package', 'deb')
InsertProcessor.assert_not_called()
session.assertPerm.assert_called_with('admin')