mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
This is preparatory work towards adding a Topic model. We plan to use the local variable name as 'topic' for the Topic model objects. Currently, we use *topic as the local variable name for topic names. We rename local variables of the form *topic to *topic_name so that we don't need to think about type collisions in individual code paths where we might want to talk about both Topic objects and strings for the topic name.
180 lines
12 KiB
Python
180 lines
12 KiB
Python
from unittest.mock import MagicMock, patch
|
|
|
|
from zerver.lib.test_classes import WebhookTestCase
|
|
from zerver.lib.webhooks.git import COMMITS_LIMIT
|
|
|
|
|
|
class GogsHookTests(WebhookTestCase):
|
|
STREAM_NAME = "commits"
|
|
URL_TEMPLATE = "/api/v1/external/gogs?&api_key={api_key}&stream={stream}"
|
|
WEBHOOK_DIR_NAME = "gogs"
|
|
|
|
def test_push(self) -> None:
|
|
expected_topic_name = "try-git / master"
|
|
expected_message = """john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 1 commit to branch master. Commits by John (1).
|
|
|
|
* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))"""
|
|
self.check_webhook("push", expected_topic_name, expected_message)
|
|
|
|
def test_push_multiple_committers(self) -> None:
|
|
commit_info = "* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))\n"
|
|
expected_topic_name = "try-git / master"
|
|
expected_message = f"""john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 2 commits to branch master. Commits by Benjamin (1) and John (1).\n\n{commit_info}* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))"""
|
|
self.check_webhook(
|
|
"push__commits_multiple_committers", expected_topic_name, expected_message
|
|
)
|
|
|
|
def test_push_multiple_committers_filtered_by_branches(self) -> None:
|
|
self.url = self.build_webhook_url(branches="master,development")
|
|
commit_info = "* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))\n"
|
|
expected_topic_name = "try-git / master"
|
|
expected_message = f"""john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 2 commits to branch master. Commits by Benjamin (1) and John (1).\n\n{commit_info}* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))"""
|
|
self.check_webhook(
|
|
"push__commits_multiple_committers", expected_topic_name, expected_message
|
|
)
|
|
|
|
def test_push_filtered_by_branches(self) -> None:
|
|
self.url = self.build_webhook_url(branches="master,development")
|
|
expected_topic_name = "try-git / master"
|
|
expected_message = """john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 1 commit to branch master. Commits by John (1).
|
|
|
|
* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))"""
|
|
self.check_webhook("push", expected_topic_name, expected_message)
|
|
|
|
def test_push_commits_more_than_limits(self) -> None:
|
|
expected_topic_name = "try-git / master"
|
|
commits_info = "* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))\n"
|
|
expected_message = f"john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 30 commits to branch master. Commits by John (30).\n\n{commits_info * COMMITS_LIMIT}[and {30 - COMMITS_LIMIT} more commit(s)]"
|
|
self.check_webhook("push__commits_more_than_limits", expected_topic_name, expected_message)
|
|
|
|
def test_push_commits_more_than_limits_filtered_by_branches(self) -> None:
|
|
self.url = self.build_webhook_url(branches="master,development")
|
|
expected_topic_name = "try-git / master"
|
|
commits_info = "* Webhook Test ([d8fce16c72a](http://localhost:3000/john/try-git/commit/d8fce16c72a2ff56a5afc8a08645a6ce45491794))\n"
|
|
expected_message = f"john [pushed](http://localhost:3000/john/try-git/compare/479e6b772b7fba19412457483f50b201286d0103...d8fce16c72a2ff56a5afc8a08645a6ce45491794) 30 commits to branch master. Commits by John (30).\n\n{commits_info * COMMITS_LIMIT}[and {30 - COMMITS_LIMIT} more commit(s)]"
|
|
self.check_webhook("push__commits_more_than_limits", expected_topic_name, expected_message)
|
|
|
|
def test_new_branch(self) -> None:
|
|
expected_topic_name = "try-git / my_feature"
|
|
expected_message = (
|
|
"john created [my_feature](http://localhost:3000/john/try-git/src/my_feature) branch."
|
|
)
|
|
self.check_webhook("create__branch", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_opened(self) -> None:
|
|
expected_topic_name = "try-git / PR #1 Title Text for Pull Request"
|
|
expected_message = """john opened [PR #1](http://localhost:3000/john/try-git/pulls/1) from `feature` to `master`."""
|
|
self.check_webhook("pull_request__opened", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_opened_with_custom_topic_in_url(self) -> None:
|
|
self.url = self.build_webhook_url(topic="notifications")
|
|
expected_topic_name = "notifications"
|
|
expected_message = """john opened [PR #1 Title Text for Pull Request](http://localhost:3000/john/try-git/pulls/1) from `feature` to `master`."""
|
|
self.check_webhook("pull_request__opened", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_closed(self) -> None:
|
|
expected_topic_name = "try-git / PR #1 Title Text for Pull Request"
|
|
expected_message = """john closed [PR #1](http://localhost:3000/john/try-git/pulls/1) from `feature` to `master`."""
|
|
self.check_webhook("pull_request__closed", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_merged(self) -> None:
|
|
expected_topic_name = "try-git / PR #2 Title Text for Pull Request"
|
|
expected_message = """john merged [PR #2](http://localhost:3000/john/try-git/pulls/2) from `feature` to `master`."""
|
|
self.check_webhook("pull_request__merged", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_reopened(self) -> None:
|
|
expected_topic_name = "test / PR #1349 reopened"
|
|
expected_message = """kostekIV reopened [PR #2](https://try.gogs.io/kostekIV/test/pulls/2) from `c` to `master`."""
|
|
self.check_webhook("pull_request__reopened", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_edited(self) -> None:
|
|
expected_topic_name = "test / PR #1349 Test"
|
|
expected_message = """kostekIV edited [PR #2](https://try.gogs.io/kostekIV/test/pulls/2)."""
|
|
self.check_webhook("pull_request__edited", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_assigned(self) -> None:
|
|
expected_topic_name = "test / PR #1349 Test"
|
|
expected_message = """kostekIV assigned [PR #2](https://try.gogs.io/kostekIV/test/pulls/2) from `c` to `master`."""
|
|
self.check_webhook("pull_request__assigned", expected_topic_name, expected_message)
|
|
|
|
def test_pull_request_synchronized(self) -> None:
|
|
expected_topic_name = "test / PR #1349 Test"
|
|
expected_message = """kostekIV synchronized [PR #2](https://try.gogs.io/kostekIV/test/pulls/2) from `c` to `master`."""
|
|
self.check_webhook("pull_request__synchronized", expected_topic_name, expected_message)
|
|
|
|
def test_issues_opened(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV opened [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nTest\n~~~"""
|
|
self.check_webhook("issues__opened", expected_topic_name, expected_message)
|
|
|
|
def test_issues_reopened(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV reopened [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nTest\n~~~"""
|
|
self.check_webhook("issues__reopened", expected_topic_name, expected_message)
|
|
|
|
def test_issues_edited(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV edited [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nTest edit\n~~~"""
|
|
self.check_webhook("issues__edited", expected_topic_name, expected_message)
|
|
|
|
def test_issues_assignee(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV assigned [issue #3](https://try.gogs.io/kostekIV/test/issues/3) (assigned to kostekIV):\n\n~~~ quote\nTest\n~~~"""
|
|
self.check_webhook("issues__assigned", expected_topic_name, expected_message)
|
|
|
|
def test_issues_closed(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV closed [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nClosed #3\n~~~"""
|
|
self.check_webhook("issues__closed", expected_topic_name, expected_message)
|
|
|
|
def test_issue_comment_new(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV [commented](https://try.gogs.io/kostekIV/test/issues/3#issuecomment-3635) on [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nTest comment\n~~~"""
|
|
self.check_webhook("issue_comment__new", expected_topic_name, expected_message)
|
|
|
|
def test_issue_comment_edited(self) -> None:
|
|
expected_topic_name = "test / issue #3 New test issue"
|
|
expected_message = """kostekIV edited a [comment](https://try.gogs.io/kostekIV/test/issues/3#issuecomment-3634) on [issue #3](https://try.gogs.io/kostekIV/test/issues/3):\n\n~~~ quote\nedit comment\n~~~"""
|
|
self.check_webhook("issue_comment__edited", expected_topic_name, expected_message)
|
|
|
|
def test_release_published(self) -> None:
|
|
expected_topic_name = "zulip_test / v1.4 Title"
|
|
expected_message = """cestrell published release [Title](https://try.gogs.io/cestrell/zulip_test) for tag v1.4."""
|
|
self.check_webhook("release__published", expected_topic_name, expected_message)
|
|
|
|
@patch("zerver.webhooks.gogs.view.check_send_webhook_message")
|
|
def test_push_filtered_by_branches_ignore(
|
|
self, check_send_webhook_message_mock: MagicMock
|
|
) -> None:
|
|
self.url = self.build_webhook_url(branches="changes,development")
|
|
payload = self.get_body("push")
|
|
result = self.client_post(
|
|
self.url, payload, HTTP_X_GOGS_EVENT="push", content_type="application/json"
|
|
)
|
|
self.assertFalse(check_send_webhook_message_mock.called)
|
|
self.assert_json_success(result)
|
|
|
|
@patch("zerver.webhooks.gogs.view.check_send_webhook_message")
|
|
def test_push_commits_more_than_limits_filtered_by_branches_ignore(
|
|
self, check_send_webhook_message_mock: MagicMock
|
|
) -> None:
|
|
self.url = self.build_webhook_url(branches="changes,development")
|
|
payload = self.get_body("push__commits_more_than_limits")
|
|
result = self.client_post(
|
|
self.url, payload, HTTP_X_GOGS_EVENT="push", content_type="application/json"
|
|
)
|
|
self.assertFalse(check_send_webhook_message_mock.called)
|
|
self.assert_json_success(result)
|
|
|
|
@patch("zerver.webhooks.gogs.view.check_send_webhook_message")
|
|
def test_push_multiple_committers_filtered_by_branches_ignore(
|
|
self, check_send_webhook_message_mock: MagicMock
|
|
) -> None:
|
|
self.url = self.build_webhook_url(branches="changes,development")
|
|
payload = self.get_body("push__commits_multiple_committers")
|
|
result = self.client_post(
|
|
self.url, payload, HTTP_X_GOGS_EVENT="push", content_type="application/json"
|
|
)
|
|
self.assertFalse(check_send_webhook_message_mock.called)
|
|
self.assert_json_success(result)
|