From 7aa08212a02fbb4ea3614440deaca9658cb0601f Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Dec 05 2022 18:08:07 +0000 Subject: [PATCH 1/3] The app_name is supposed to be read by humans Signed-off-by: Aurélien Bompard --- diff --git a/pagure_messages/base.py b/pagure_messages/base.py index bd522fe..1074bf1 100644 --- a/pagure_messages/base.py +++ b/pagure_messages/base.py @@ -414,7 +414,7 @@ class PagureMessage(message.Message): @property def app_name(self): - return "pagure" + return "Pagure" @property def app_icon(self): diff --git a/pagure_messages/tests/test_common.py b/pagure_messages/tests/test_common.py index 1d73e16..88e9de8 100644 --- a/pagure_messages/tests/test_common.py +++ b/pagure_messages/tests/test_common.py @@ -28,7 +28,7 @@ def test_properties(): } message = ProjectNewV1(body=body) - assert message.app_name == "pagure" + assert message.app_name == "Pagure" assert message.app_icon == "https://apps.fedoraproject.org/img/icons/pagure.png" assert message.agent == "dummy-user" assert message.agent_avatar == ( From ae48ea7ac22dac5450e67ef157dd7cee06515491 Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Dec 05 2022 18:08:57 +0000 Subject: [PATCH 2/3] The agent name property is agent_name Signed-off-by: Aurélien Bompard --- diff --git a/pagure_messages/base.py b/pagure_messages/base.py index 1074bf1..ce95bfd 100644 --- a/pagure_messages/base.py +++ b/pagure_messages/base.py @@ -422,12 +422,16 @@ class PagureMessage(message.Message): @property def agent(self): + return self.agent_name + + @property + def agent_name(self): return self.body.get("agent") @property def agent_avatar(self): - return user_avatar_url(self.agent) + return user_avatar_url(self.agent_name) @property def usernames(self): - return [self.agent] + return [self.agent_name] diff --git a/pagure_messages/tests/test_common.py b/pagure_messages/tests/test_common.py index 88e9de8..b4d1989 100644 --- a/pagure_messages/tests/test_common.py +++ b/pagure_messages/tests/test_common.py @@ -30,6 +30,7 @@ def test_properties(): assert message.app_name == "Pagure" assert message.app_icon == "https://apps.fedoraproject.org/img/icons/pagure.png" + assert message.agent_name == "dummy-user" assert message.agent == "dummy-user" assert message.agent_avatar == ( "https://seccdn.libravatar.org/avatar/" From 3df95411f03f518bc8f900bf6eb472aad18926b2 Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: Dec 05 2022 18:10:23 +0000 Subject: [PATCH 3/3] Handle artifacts properties in git messages Add a base class for git-triggered messages that uses the namespace to populate the artifacts properties: packages, modules, containers and flatpaks. Signed-off-by: Aurélien Bompard --- diff --git a/pagure_messages/__init__.py b/pagure_messages/__init__.py index 6705b6b..bf6f469 100644 --- a/pagure_messages/__init__.py +++ b/pagure_messages/__init__.py @@ -83,7 +83,7 @@ def get_message_object_from_topic(topic): for entry_point in pkg_resources.iter_entry_points("fedora.messages"): cls = entry_point.load() - if cls().topic == topic: + if cls.topic == topic: output = cls break diff --git a/pagure_messages/git_schema.py b/pagure_messages/git_schema.py index 2759d18..2254686 100644 --- a/pagure_messages/git_schema.py +++ b/pagure_messages/git_schema.py @@ -17,7 +17,34 @@ from .base import GIT_RECEIVE_USER, PROJECT, PagureMessage, SCHEMA_URL -class GitBranchCreationV1(PagureMessage): +class GitMessage(PagureMessage): + """ + Used when git events generate Fedora messages. + """ + + def _name_if_namespace(self, namespace): + if self.body["repo"]["namespace"] == namespace: + return [self.body["repo"]["name"]] + return [] + + @property + def packages(self): + return self._name_if_namespace("rpms") + + @property + def containers(self): + return self._name_if_namespace("containers") + + @property + def modules(self): + return self._name_if_namespace("modules") + + @property + def flatpaks(self): + return self._name_if_namespace("flatpaks") + + +class GitBranchCreationV1(GitMessage): """ A sub-class of a Fedora message that defines a message schema for messages published by pagure when a new thing is created. @@ -69,7 +96,7 @@ class GitBranchCreationV1(PagureMessage): return tmpl.format(base_url=base_url, fullname=fullname, item=item) -class GitBranchDeletionV1(PagureMessage): +class GitBranchDeletionV1(GitMessage): """ A sub-class of a Fedora message that defines a message schema for messages published by pagure when a new thing is created. @@ -117,7 +144,7 @@ class GitBranchDeletionV1(PagureMessage): return tmpl.format(base_url=base_url, fullname=fullname) -class GitReceiveV1(PagureMessage): +class GitReceiveV1(GitMessage): """ A sub-class of a Fedora message that defines a message schema for messages published by pagure when a new thing is created. @@ -184,7 +211,7 @@ class GitReceiveV1(PagureMessage): return tmpl.format(base_url=base_url, fullname=fullname, item=item) -class GitTagCreationV1(PagureMessage): +class GitTagCreationV1(GitMessage): """ A sub-class of a Fedora message that defines a message schema for messages published by pagure when a new thing is created. @@ -234,7 +261,7 @@ class GitTagCreationV1(PagureMessage): return tmpl.format(base_url=base_url, fullname=fullname, tag=tag) -class GitTagDeletionV1(PagureMessage): +class GitTagDeletionV1(GitMessage): """ A sub-class of a Fedora message that defines a message schema for messages published by pagure when a new thing is created. diff --git a/pagure_messages/tests/test_git_receive.py b/pagure_messages/tests/test_git_receive.py index 166ff36..e59f3c8 100644 --- a/pagure_messages/tests/test_git_receive.py +++ b/pagure_messages/tests/test_git_receive.py @@ -49,6 +49,10 @@ def test_minimal(): message = GitReceiveV1(body=body) message.validate() assert message.url == "https://pagure.io/fedora-infra/fedocal-messages/tree/develop" + assert message.packages == [] + assert message.containers == [] + assert message.modules == [] + assert message.flatpaks == [] def test_minimal_short_branch(): @@ -155,3 +159,42 @@ def test_summary(): message = GitReceiveV1(body=body) message.validate() assert expected_summary == message.summary + + +@pytest.mark.parametrize( + "namespace,msg_attr", + [ + ("rpms", "packages"), + ("containers", "containers"), + ("modules", "modules"), + ("flatpaks", "flatpaks"), + ], +) +def test_artifacts(namespace, msg_attr): + """ + Assert the message has the correct artifacts set + """ + body = { + "agent": "dummy-user", + "forced": False, + "repo": PROJECT.copy(), + "old_commit": "hash_commit_old", + "branch": "refs/heads/develop", + "authors": [ + { + "fullname": "dummy-user", + "url_path": "user/dummy-user", + "name": "dummy-user", + "email": None, + } + ], + "total_commits": 42, + "start_commit": "hash_commit_start", + "end_commit": "hash_commit_stop", + } + body["repo"]["namespace"] = namespace + message = GitReceiveV1(body=body) + + for test_attr in ("packages", "containers", "modules", "flatpaks"): + expected = ["fedocal-messages"] if msg_attr == test_attr else [] + assert getattr(message, test_attr) == expected diff --git a/pagure_messages/tests/test_object_from_topic.py b/pagure_messages/tests/test_object_from_topic.py index 937eace..e49c7e0 100644 --- a/pagure_messages/tests/test_object_from_topic.py +++ b/pagure_messages/tests/test_object_from_topic.py @@ -16,20 +16,23 @@ """Unit tests for common properties of the message schemas.""" +from .utils import PROJECT from .. import get_message_object_from_topic def test_object_type(): """Assert some properties are correct.""" cls = get_message_object_from_topic("pagure.git.receive") - assert str(type(cls())) == "" + msg = cls(body={"repo": PROJECT}) + assert str(type(msg)) == "" def test_topic(): """Assert some properties are correct.""" cls = get_message_object_from_topic("pagure.git.receive") + msg = cls(body={"repo": PROJECT}) - assert cls().topic == "pagure.git.receive" + assert msg.topic == "pagure.git.receive" def test_invalidtopic():