| |
@@ -0,0 +1,95 @@
|
| |
+ import pytest
|
| |
+ from dingus import Dingus
|
| |
+ from munch import Munch
|
| |
+ from copy import deepcopy
|
| |
+ import fedmsg.encoding
|
| |
+ import fedmsg.consumers
|
| |
+
|
| |
+ from jobtriggers import github_pull_request_opened
|
| |
+
|
| |
+
|
| |
+ @pytest.mark.usefixtures('prepare')
|
| |
+ class TestKojiTagChangedJobConsumer():
|
| |
+
|
| |
+ @pytest.fixture
|
| |
+ def prepare(self, monkeypatch):
|
| |
+
|
| |
+ self.ref_pr_url = "https://github.com/fedora-infra/bodhi/pull/1882"
|
| |
+ self.ref_type = 'pull_request'
|
| |
+ self.ref_git_host = "github"
|
| |
+ self.ref_repo_name = "fedora-infra/bodhi"
|
| |
+ self.ref_tasks = ['foo', 'bar']
|
| |
+ self.ref_validarches = ['x86_64', 'i386']
|
| |
+
|
| |
+ self.ref_message = self._create_msg(self.ref_pr_url, self.ref_repo_name)
|
| |
+
|
| |
+ self.ref_data = {
|
| |
+ "_msg": {},
|
| |
+ "message_type": "GitHubPullRequestOpened",
|
| |
+ "item": self.ref_pr_url,
|
| |
+ "item_type": self.ref_type,
|
| |
+ "git_host": self.ref_git_host,
|
| |
+ "repo_name": self.ref_repo_name,
|
| |
+ }
|
| |
+
|
| |
+ stub_hub = Munch(config=Munch(get=0))
|
| |
+ self.helper = github_pull_request_opened.GithubPullRequestOpenedJobConsumer(stub_hub)
|
| |
+
|
| |
+ self.helper.trigger.runner = Dingus()
|
| |
+ github_pull_request_opened.config.trigger_rules_template = """---
|
| |
+ - do:
|
| |
+ - {tasks: %s}
|
| |
+ when: {message_type: GitHubPullRequestOpened}
|
| |
+ - do:
|
| |
+ - {tasks: [%s]}
|
| |
+ when: {message_type: GitHubPullRequestOpened, git_host: github}
|
| |
+ - do:
|
| |
+ - {tasks: [%s]}
|
| |
+ when: {message_type: GitHubPullRequestOpened, git_host: pagure}
|
| |
+ """ % (self.ref_tasks, self.ref_tasks[0], self.ref_tasks[1])
|
| |
+
|
| |
+ github_pull_request_opened.config.valid_arches = self.ref_validarches
|
| |
+ github_pull_request_opened.config.job_logging = False
|
| |
+
|
| |
+ def _create_msg(self, ref_pr_url, ref_repo_name):
|
| |
+ return Munch(body='{"i": 1,\
|
| |
+ "msg": {\
|
| |
+ "pull_request": {"html_url": "%s"},\
|
| |
+ "repository": {"full_name": "%s"}\
|
| |
+ },\
|
| |
+ "timestamp": 1359603469.21164,\
|
| |
+ "topic": "org.fedoraproject.prod.buildsys.tag",\
|
| |
+ "username": "apache"}' %
|
| |
+ (ref_pr_url, ref_repo_name))
|
| |
+
|
| |
+ def test_consume(self):
|
| |
+ self.helper.consume(self.ref_message)
|
| |
+
|
| |
+ runner_calls = self.helper.trigger.runner.trigger_job.calls()
|
| |
+
|
| |
+ assert len(runner_calls) == 6
|
| |
+
|
| |
+ assert runner_calls[0][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[0], self.ref_validarches[0])
|
| |
+ assert runner_calls[1][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[0], self.ref_validarches[1])
|
| |
+ assert runner_calls[2][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[1], self.ref_validarches[0])
|
| |
+ assert runner_calls[3][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[1], self.ref_validarches[1])
|
| |
+ assert runner_calls[4][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[0], self.ref_validarches[0])
|
| |
+ assert runner_calls[5][1] == (self.ref_pr_url, self.ref_type,
|
| |
+ self.ref_tasks[0], self.ref_validarches[1])
|
| |
+
|
| |
+ def test_trigger_data(self):
|
| |
+ trigger = github_pull_request_opened.GithubPullRequestOpenedJobTrigger(Dingus())
|
| |
+ msg = fedmsg.encoding.loads(self.ref_message.body)
|
| |
+ data = trigger.process(msg)
|
| |
+
|
| |
+ assert data['_msg'] == msg
|
| |
+ assert data['message_type'] == github_pull_request_opened.MESSAGE_TYPE
|
| |
+ assert data['item_type'] == github_pull_request_opened.ITEM_TYPE
|
| |
+ assert data['item'] == self.ref_pr_url
|
| |
+ assert data['git_host'] == 'github'
|
| |
+ assert data['repo_name'] == self.ref_repo_name
|
| |
But... I don't get it. This will run
task-mtf
on all github PRs that fedmsg watches! Or am I mistaken?We want to run mtf just for specific repositories. According to his comments, it should be projects under
https://github.com/container-images/*
. Shouldn't we add a regex line to match those?