diff --git a/zerver/webhooks/gitlab/tests.py b/zerver/webhooks/gitlab/tests.py index 699835c5d8..390f901817 100644 --- a/zerver/webhooks/gitlab/tests.py +++ b/zerver/webhooks/gitlab/tests.py @@ -547,6 +547,14 @@ class GitlabHookTests(WebhookTestCase): self.assertFalse(check_send_webhook_message_mock.called) self.assert_json_success(result) + def test_job_hook_event(self) -> None: + expected_topic = "gitlab_test / gitlab-script-trigger" + expected_message = "Build test from test stage was created." + self.send_and_test_stream_message( + 'job_hook__build_created', + expected_topic, + expected_message) + def test_system_push_event_message(self) -> None: expected_topic = "gitlab / master" expected_message = "John Smith [pushed](http://test.example.com/gitlab/gitlab/compare/95790bf891e76fee5e1747ab589903a6a1f80f22...da1560886d4f094c3e6c9ef40349f7d38b5d27d7) 1 commit to branch master. Commits by Test User (1).\n\n* Add simple search to projects in public area ([c5feabd](https://test.example.com/gitlab/gitlab/-/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428))" diff --git a/zerver/webhooks/gitlab/view.py b/zerver/webhooks/gitlab/view.py index ee6ba6f3bf..15e008f98f 100644 --- a/zerver/webhooks/gitlab/view.py +++ b/zerver/webhooks/gitlab/view.py @@ -273,7 +273,13 @@ def get_pipeline_event_body(payload: Dict[str, Any]) -> str: return "[Pipeline]({}) {} with build(s):\n{}.".format(pipeline_url, action, builds_status[:-1]) def get_repo_name(payload: Dict[str, Any]) -> str: - return payload['project']['name'] + if 'project' in payload: + return payload['project']['name'] + + # Apparently, Job Hook payloads don't have a `project` section, + # but the repository name is accessible from the `repository` + # section. + return payload['repository']['name'] def get_user_name(payload: Dict[str, Any]) -> str: return payload['user_name']