debian-koji/tests/test_www/test_hostinfo.py
Yuming Zhu ca05418fb5 unittest: use unittest.mock instead of mock
because the absence of unittest.mock on python2.7, we still fallback to
mock
2024-10-23 16:35:30 +00:00

93 lines
4.1 KiB
Python

from unittest import mock
import unittest
import koji
from .loadwebindex import webidx
class TestHostInfo(unittest.TestCase):
def setUp(self):
self.get_server = mock.patch.object(webidx, "_getServer").start()
self.gen_html = mock.patch.object(webidx, '_genHTML').start()
self.server = mock.MagicMock()
self.environ = {
'koji.options': {
'SiteName': 'test',
'KojiFilesURL': 'https://server.local/files',
},
'koji.currentUser': None
}
self.host_id = '11'
self.user_id = '111'
def tearDown(self):
mock.patch.stopall()
def test_hostinfo_exception_host_option(self):
"""Test taskinfo function raises exception"""
self.server.getHost.return_value = None
self.get_server.return_value = self.server
with self.assertRaises(koji.GenericError) as cm:
webidx.hostinfo(self.environ, hostID=self.host_id)
self.assertEqual(str(cm.exception), f'No such host ID: {self.host_id}')
def test_hostinfo_exception_user_option(self):
"""Test taskinfo function raises exception"""
self.server.listHosts.return_value = []
self.get_server.return_value = self.server
with self.assertRaises(koji.GenericError) as cm:
webidx.hostinfo(self.environ, userID=self.user_id)
self.assertEqual(str(cm.exception), f'No such host for user ID: {self.user_id}')
def test_hostinfo_exception(self):
"""Test hostinfo function raises exception"""
self.get_server.return_value = self.server
with self.assertRaises(koji.GenericError) as cm:
webidx.hostinfo(self.environ)
self.assertEqual(str(cm.exception), 'hostID or userID must be provided')
def test_hostinfo_valid(self):
"""Test hostinfo function"""
self.get_server.return_value = self.server
self.server.listHosts.return_value = [
{'id': 11, 'name': 'test-host', 'update_ts': 1234567890}]
self.server.listChannels.return_value = [
{'id': 123, 'name': 'test-channel-123', 'enabled': True},
{'id': 456, 'name': 'test-channel-456', 'enabled': False}]
self.server.listBuildroots.return_value = [{'id': 111, 'create_event_time': 11111111},
{'id': 222, 'create_event_time': 22222222}]
webidx.hostinfo(self.environ, userID=self.user_id)
self.server.getHost.assert_not_called()
self.server.listHosts.assert_called_once_with(userID=int(self.user_id))
self.server.listChannels.assert_called_once_with(int(self.host_id))
self.server.listBuildroots.assert_called_once_with(
hostID=int(self.host_id), state=[0, 1, 2])
self.server.getUserPerms.assert_not_called()
def test_hostinfo_valid_2(self):
"""Test hostinfo function"""
environ = {
'koji.options': {
'SiteName': 'test',
'KojiFilesURL': 'https://server.local/files',
},
'koji.currentUser': {'id': 5}
}
self.get_server.return_value = self.server
self.server.getHost.return_value = {'id': 11, 'name': 'test-host', 'update_ts': 1234567890}
self.server.listChannels.return_value = [
{'id': 123, 'name': 'test-channel-123', 'enabled': True},
{'id': 456, 'name': 'test-channel-456', 'enabled': False}]
self.server.listBuildroots.return_value = [{'id': 111, 'create_event_time': 11111111},
{'id': 222, 'create_event_time': 22222222}]
self.server.getUserPerms.return_value = ['perm-1', 'perm-2']
webidx.hostinfo(environ, hostID=self.host_id)
self.server.getHost.assert_called_once_with(int(self.host_id))
self.server.listHosts.assert_not_called()
self.server.listChannels.assert_called_once_with(int(self.host_id))
self.server.listBuildroots.assert_called_once_with(
hostID=int(self.host_id), state=[0, 1, 2])
self.server.getUserPerms.assert_called_once_with(5)