toddlers/tests/plugins/test_packager_bugzilla_sync.py
Pierre-Yves Chibon 03810630ce Introduce the packager_bugzilla_sync toddler
This toddler is meant to be triggered by playtime at regular intervals
and will sync the packager accounts to bugzilla so they can edit flags
on Fedora bugs (for example).

Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
2020-07-02 11:18:36 +02:00

142 lines
5.5 KiB
Python

from unittest.mock import patch, Mock
import pytest
import toddlers.plugins.packager_bugzilla_sync
class TestPackagerBugzillaSyncToddler:
def test_accepts_topic_invalid(self):
assert (
toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.accepts_topic(
"foo.bar"
)
is False
)
@pytest.mark.parametrize(
"topic",
[
"org.fedoraproject.*.toddlers.trigger.packager_bugzilla_sync",
"org.fedoraproject.prod.toddlers.trigger.packager_bugzilla_sync",
"org.fedoraproject.stg.toddlers.trigger.packager_bugzilla_sync",
],
)
def test_accepts_topic_valid(self, topic):
assert toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.accepts_topic(
topic
)
def test_process_no_email_override(self, capsys):
with pytest.raises(KeyError, match=r"'email_overrides_file'"):
toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.process(
config={}, message=None, username=False, dry_run=True
)
out, err = capsys.readouterr()
assert out == "Failed to load the file containing the email-overrides\n"
assert err == ""
def test_process_no_email_override_file(self, capsys):
with pytest.raises(
FileNotFoundError, match=r"No such file or directory: 'test'"
):
toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.process(
config={"email_overrides_file": "test"},
message=None,
username=False,
dry_run=True,
)
out, err = capsys.readouterr()
assert out == "Failed to load the file containing the email-overrides\n"
assert err == ""
@patch("toddlers.utils.fedora_account.set_fas", new=Mock(return_value=True))
@patch("toddlers.utils.bugzilla_system.set_bz", new=Mock(return_value=True))
@patch("toddlers.utils.fedora_account.get_group_member")
@patch("toddlers.utils.fedora_account.get_bz_email_user")
@patch("toddlers.utils.bugzilla_system.get_group_member")
@patch("toddlers.utils.bugzilla_system.add_user_to_group")
@patch("toml.load")
def test_process(
self, toml_load, bz_user_grp, get_bz_grp_mbr, get_bz_email, get_fas_grp_mbr
):
toml_load.return_value = {}
get_fas_grp_mbr.return_value = ["pingou", "nils"]
get_bz_email.side_effect = ["pingou@fp.o", "nils@fp.o"]
get_bz_grp_mbr.return_value = ["pingou@fp.o", "nphilipp@fp.o"]
toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.process(
config={"email_overrides_file": "test", "bugzilla_group": "fedora_contrib"},
message=None,
username=False,
dry_run=False,
)
toml_load.assert_called_with("test")
get_fas_grp_mbr.assert_called_with("packager")
get_bz_email.assert_called_with("pingou", {})
get_bz_grp_mbr.assert_called_with("fedora_contrib")
bz_user_grp.assert_called_with(
user_email="nils@fp.o",
bz_group="fedora_contrib",
no_bz_account=[],
dry_run=False,
)
@patch("toddlers.utils.fedora_account.set_fas", new=Mock(return_value=True))
@patch("toddlers.utils.bugzilla_system.set_bz", new=Mock(return_value=True))
@patch("toddlers.utils.fedora_account.get_bz_email_user")
@patch("toddlers.utils.bugzilla_system.get_group_member")
@patch("toddlers.utils.bugzilla_system.add_user_to_group")
@patch("toml.load")
def test_process_username(
self, toml_load, bz_user_grp, get_bz_grp_mbr, get_bz_email
):
toml_load.return_value = {}
get_bz_email.side_effect = ["nils@fp.o"]
get_bz_grp_mbr.return_value = ["pingou@fp.o"]
toddlers.plugins.packager_bugzilla_sync.PackagerBugzillaSync.process(
config={"email_overrides_file": "test", "bugzilla_group": "fedora_contrib"},
message=None,
username="nils",
dry_run=False,
)
toml_load.assert_called_with("test")
get_bz_email.assert_called_with("nils", {})
get_bz_grp_mbr.assert_called_with("fedora_contrib")
bz_user_grp.assert_called_with(
user_email="nils@fp.o",
bz_group="fedora_contrib",
no_bz_account=[],
dry_run=False,
)
def test_main_no_args(self, capsys):
with pytest.raises(SystemExit):
toddlers.plugins.packager_bugzilla_sync.main([])
out, err = capsys.readouterr()
exp = """usage: pytest [-h] [--dry-run] [-q | --debug] conf [username]
pytest: error: the following arguments are required: conf
"""
assert out == ""
assert err == exp
@patch("toml.load", new=Mock(return_value={}))
def test_main_debug(self, capsys):
with pytest.raises(KeyError, match=r"'email_overrides_file'"):
toddlers.plugins.packager_bugzilla_sync.main(["test.cfg", "--debug"])
out, err = capsys.readouterr()
assert out == "Failed to load the file containing the email-overrides\n"
assert err == ""
@patch("toml.load", new=Mock(return_value={}))
def test_main(self, capsys):
with pytest.raises(KeyError, match=r"'email_overrides_file'"):
toddlers.plugins.packager_bugzilla_sync.main(["test.cfg"])
out, err = capsys.readouterr()
assert out == "Failed to load the file containing the email-overrides\n"
assert err == ""