204 lines
7.5 KiB
Python
204 lines
7.5 KiB
Python
|
import logging
|
||
|
import xmlrpc.client
|
||
|
from unittest.mock import Mock, patch
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
import toddlers.utils.bugzilla_system
|
||
|
|
||
|
|
||
|
class TestBugzillaSystem:
|
||
|
def test_set_bz_no_bugzilla_url(self):
|
||
|
with pytest.raises(
|
||
|
ValueError, match=r"No bugzilla_url found in the configuration file"
|
||
|
):
|
||
|
toddlers.utils.bugzilla_system.set_bz({})
|
||
|
|
||
|
def test_set_bz_no_bugzilla_username(self):
|
||
|
with pytest.raises(
|
||
|
ValueError, match=r"No bugzilla_username found in the configuration file"
|
||
|
):
|
||
|
config = {
|
||
|
"bugzilla_url": "https:bz.example.com",
|
||
|
}
|
||
|
toddlers.utils.bugzilla_system.set_bz(config)
|
||
|
|
||
|
def test_set_bz_no_bugzilla_password(self):
|
||
|
with pytest.raises(
|
||
|
ValueError, match=r"No bugzilla_password found in the configuration file"
|
||
|
):
|
||
|
config = {
|
||
|
"bugzilla_url": "https:bz.example.com",
|
||
|
"bugzilla_username": "bz_username",
|
||
|
}
|
||
|
toddlers.utils.bugzilla_system.set_bz(config)
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.Bugzilla")
|
||
|
def test_set_bz(self, mock_bz):
|
||
|
mock_bz.return_value = "bugzilla_object"
|
||
|
config = {
|
||
|
"bugzilla_url": "https:bz.example.com",
|
||
|
"bugzilla_username": "bz_username",
|
||
|
"bugzilla_password": "bz_password",
|
||
|
}
|
||
|
output = toddlers.utils.bugzilla_system.set_bz(config)
|
||
|
mock_bz.assert_called_with(
|
||
|
url="https:bz.example.com/xmlrpc.cgi",
|
||
|
user="bz_username",
|
||
|
password="bz_password",
|
||
|
cookiefile=None,
|
||
|
tokenfile=None,
|
||
|
)
|
||
|
assert output == "bugzilla_object"
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system._BUGZILLA", new=None)
|
||
|
def test_get_bz_not_set(self):
|
||
|
with pytest.raises(
|
||
|
ValueError, match=r"No bugzilla connection set, call set_bz first"
|
||
|
):
|
||
|
toddlers.utils.bugzilla_system.get_bz()
|
||
|
|
||
|
def test_get_bz(self):
|
||
|
output = toddlers.utils.bugzilla_system.get_bz()
|
||
|
assert output == "bugzilla_object"
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_get_group_member(self, mock_bz):
|
||
|
groups = Mock()
|
||
|
groups.member_emails = ["foo@bar.com", "foo@baz.com"]
|
||
|
server = Mock()
|
||
|
server.getgroup.return_value = groups
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.get_group_member("test")
|
||
|
mock_bz.assert_called_with()
|
||
|
server.getgroup.assert_called_with("test", membership=True)
|
||
|
assert output == ["foo@bar.com", "foo@baz.com"]
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_remove_user_from_group(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.updateperms.return_value = True
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
toddlers.utils.bugzilla_system.remove_user_from_group(
|
||
|
"test@foo.com", "groupname"
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_called_with("test@foo.com", "rem", "groupname")
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_remove_user_from_group_failed(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.updateperms.side_effect = xmlrpc.client.Fault(55, "error string")
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
with pytest.raises(xmlrpc.client.Fault, match=r"<Fault 55: 'error string'>"):
|
||
|
toddlers.utils.bugzilla_system.remove_user_from_group(
|
||
|
"test@foo.com", "groupname"
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_called_with("test@foo.com", "rem", "groupname")
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_remove_user_from_group_no_user(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.updateperms.side_effect = xmlrpc.client.Fault(51, "No such user")
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
toddlers.utils.bugzilla_system.remove_user_from_group(
|
||
|
"test@foo.com", "groupname"
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_called_with("test@foo.com", "rem", "groupname")
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_user_exists(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.getuser.return_value = True
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.user_exists("test@foo.com")
|
||
|
mock_bz.assert_called_with()
|
||
|
server.getuser.assert_called_with("test@foo.com")
|
||
|
assert output
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_user_exists_no_user(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.getuser.side_effect = xmlrpc.client.Fault(51, "No such user")
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.user_exists("test@foo.com")
|
||
|
mock_bz.assert_called_with()
|
||
|
server.getuser.assert_called_with("test@foo.com")
|
||
|
assert output is False
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_user_exists_failed(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.getuser.side_effect = xmlrpc.client.Fault(55, "error string")
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
with pytest.raises(xmlrpc.client.Fault, match=r"<Fault 55: 'error string'>"):
|
||
|
toddlers.utils.bugzilla_system.user_exists("test@foo.com")
|
||
|
mock_bz.assert_called_with()
|
||
|
server.getuser.assert_called_with("test@foo.com")
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.user_exists", new=Mock(return_value=False))
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_add_user_to_group_no_user(self, mock_bz):
|
||
|
server = Mock()
|
||
|
server.updateperms.return_value = True
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.add_user_to_group(
|
||
|
user_email="test@foo.com",
|
||
|
bz_group="groupname",
|
||
|
no_bz_account=[],
|
||
|
dry_run=False,
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_not_called()
|
||
|
assert output == ["test@foo.com"]
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.user_exists", new=Mock(return_value=True))
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_add_user_to_group_dry_run(self, mock_bz, caplog):
|
||
|
caplog.set_level(logging.INFO)
|
||
|
server = Mock()
|
||
|
server.updateperms.return_value = True
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.add_user_to_group(
|
||
|
user_email="test@foo.com",
|
||
|
bz_group="groupname",
|
||
|
no_bz_account=[],
|
||
|
dry_run=True,
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_not_called()
|
||
|
assert output == []
|
||
|
assert (
|
||
|
caplog.records[-1].message
|
||
|
== " Would add test@foo.com to the group groupname"
|
||
|
)
|
||
|
|
||
|
@patch("toddlers.utils.bugzilla_system.user_exists", new=Mock(return_value=True))
|
||
|
@patch("toddlers.utils.bugzilla_system.get_bz")
|
||
|
def test_add_user_to_group(self, mock_bz, caplog):
|
||
|
caplog.set_level(logging.INFO)
|
||
|
server = Mock()
|
||
|
server.updateperms.return_value = True
|
||
|
mock_bz.return_value = server
|
||
|
|
||
|
output = toddlers.utils.bugzilla_system.add_user_to_group(
|
||
|
user_email="test@foo.com",
|
||
|
bz_group="groupname",
|
||
|
no_bz_account=[],
|
||
|
dry_run=False,
|
||
|
)
|
||
|
mock_bz.assert_called_with()
|
||
|
server.updateperms.assert_called_with("test@foo.com", "add", "groupname")
|
||
|
assert output == []
|