toddlers/tests/plugins/test_clean_retired_packages.py
Michal Konečný d9c03e08ce Fix formatting for for black > 23
Signed-off-by: Michal Konečný <mkonecny@redhat.com>
2023-02-03 14:33:39 +01:00

218 lines
8.8 KiB
Python

from unittest.mock import call, MagicMock, patch
import fedora_messaging.api
import pytest
import toddlers.plugins.clean_retired_packages
class TestCleanRetiredPackagesToddler:
toddler_cls = toddlers.plugins.clean_retired_packages.CleanRetiredPackages
def test_accepts_topic_invalid(self, toddler):
assert toddler.accepts_topic("foo.bar") is False
@pytest.mark.parametrize(
"topic",
[
"org.fedoraproject.*.toddlers.trigger.clean_retired_packages",
"org.fedoraproject.prod.toddlers.trigger.clean_retired_packages",
"org.fedoraproject.stg.toddlers.trigger.clean_retired_packages",
],
)
def test_accepts_topic_valid(self, topic, toddler):
assert toddler.accepts_topic(topic)
def test_process_config_missing_pdc_url(self, toddler):
msg = fedora_messaging.api.Message()
msg.id = 123
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
msg.body = {"foo": "bar"}
with pytest.raises(
Exception,
match=r"Invalid toddler configuration, no `pdc_active_branches` defined",
):
assert toddler.process(config={}, message=msg) is None
def test_process_config_missing_distgit_url(self, toddler):
msg = fedora_messaging.api.Message()
msg.id = 123
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
msg.body = {"foo": "bar"}
config = {
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json"
}
with pytest.raises(
Exception,
match=r"Invalid toddler configuration, no `dist_git_url` defined",
):
assert toddler.process(config=config, message=msg) is None
def test_process_config_missing_distgit_token(self, toddler):
msg = fedora_messaging.api.Message()
msg.id = 123
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
msg.body = {"foo": "bar"}
config = {
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json",
"dist_git_url": "https://src.fedoraproject.org/",
}
with pytest.raises(
Exception,
match=r"Invalid toddler configuration, no `dist_git_token` defined",
):
assert toddler.process(config=config, message=msg) is None
@patch("toddlers.utils.notify.send_email")
def test_process(self, send_email, toddler, caplog):
pdc_branches = MagicMock()
pdc_branches.json.return_value = {
"flatpak": {
"bluez-gnome": [["master", False], ["epel8", False], ["epel7", False]],
},
"rpm": {
"trojan": [["master", True], ["f33", True], ["f32", True]],
"pigment": [["master", False], ["epel8", True], ["epel7", True]],
"bluez-gnome": [["master", False], ["epel8", False], ["epel7", False]],
"guake": [["master", False], ["epel8", False], ["epel7", False]],
},
}
distgit_info_bluez_gnome = MagicMock()
distgit_info_bluez_gnome.json.return_value = {
"user": {"name": "pingou"},
"access_groups": {
"admin": [],
"collaborator": [],
"commit": ["infra-sig"],
"ticket": [],
},
"access_users": {
"admin": [],
"collaborator": [],
"commit": ["ohaessler"],
"owner": ["pingou"],
"ticket": [],
},
}
distgit_info_guake = MagicMock()
distgit_info_guake.json.return_value = {
"user": {"name": "orphan"},
"access_groups": {
"admin": [],
"collaborator": [],
"commit": [],
"ticket": [],
},
"access_users": {
"admin": ["orphan"],
"collaborator": [],
"commit": [],
"owner": ["pingou"],
"ticket": [],
},
}
toddler.requests_session.get.side_effect = (
pdc_branches,
distgit_info_bluez_gnome,
distgit_info_guake,
)
toddler.requests_session.post.return_value = MagicMock(ok=False)
msg = fedora_messaging.api.Message()
msg.id = 123
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
msg.body = {"foo": "bar"}
config = {
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json",
"dist_git_url": "https://src.fedoraproject.org/",
"dist_git_token": "foobar",
"admin_email": "admin@fp.o",
"mail_server": "mail_server",
}
assert toddler.process(config=config, message=msg) is None
send_email.assert_called_with(
to_addresses=["admin@fp.o"],
from_address="admin@fp.o",
subject="Toddlers cleaned up some retired packages",
content="Dear Admin,\n\n"
"The clean_retired_packages toddler just ran and adjusted some retired packages\n"
"for recording purposes, here is what it did:\n"
"- Orphaning rpms/bluez-gnome from pingou\n"
"- Removing access on rpms/bluez-gnome to ohaessler\n"
"- Removing access on rpms/bluez-gnome to pingou\n"
"- Removing access on rpms/bluez-gnome to @infra-sig\n"
"- Removing access on rpms/guake to pingou\n\n"
"In case someone asks, you can come back to this email but there isn't really\n"
"anything else to do with it.\n\n"
"Have a wonderful day and see you (maybe?) at the next run!\n\n",
mail_server="mail_server",
)
toddler.requests_session.get.assert_called()
toddler.requests_session.get.assert_has_calls(
calls=[
call("https://pdc.fedoraproject.org/extras/active_branches.json"),
call("https://src.fedoraproject.org/api/0/rpms/bluez-gnome"),
call("https://src.fedoraproject.org/api/0/rpms/guake"),
]
)
toddler.requests_session.post.assert_called()
toddler.requests_session.post.assert_has_calls(
calls=[
call(
"https://src.fedoraproject.org/_dg/orphan/rpms/bluez-gnome",
data={
"orphan_reason": "Other",
"orphan_reason_info": "Package was retired before it was orphaned",
},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/_dg/bzoverrides/rpms/bluez-gnome",
data={"fedora_assignee": None, "epel_assignee": None},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
data={"user_type": "user", "name": "ohaessler"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/watchers/update",
data={"status": -1, "watcher": "ohaessler"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
data={"user_type": "user", "name": "pingou"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/watchers/update",
data={"status": -1, "watcher": "pingou"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
data={"user_type": "group", "name": "infra-sig"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/guake/git/modifyacls",
data={"user_type": "user", "name": "pingou"},
headers={"Authorization": "token foobar"},
),
call(
"https://src.fedoraproject.org/api/0/rpms/guake/watchers/update",
data={"status": -1, "watcher": "pingou"},
headers={"Authorization": "token foobar"},
),
]
)