2020-08-22 15:50:15 +02:00
from unittest . mock import patch
2017-11-16 00:43:10 +01:00
2020-09-01 13:52:36 +02:00
import orjson
2016-10-25 14:50:42 +02:00
from zerver . lib . test_classes import WebhookTestCase
2017-11-16 00:43:10 +01:00
from zerver . lib . webhooks . git import COMMITS_LIMIT
2016-10-25 14:50:42 +02:00
2020-08-22 17:16:32 +02:00
TOPIC_REPO = " public-repo "
2021-05-10 07:02:14 +02:00
TOPIC_ISSUE = " public-repo / issue #2 Spelling error in the README file "
2020-08-22 17:16:32 +02:00
TOPIC_PR = " public-repo / PR #1 Update the README with new information "
TOPIC_DEPLOYMENT = " public-repo / Deployment on production "
TOPIC_ORGANIZATION = " baxterandthehackers organization "
TOPIC_BRANCH = " public-repo / changes "
2021-05-10 07:02:14 +02:00
TOPIC_WIKI = " public-repo / wiki pages "
2021-10-18 13:33:38 +02:00
TOPIC_DISCUSSION = " public-repo discussion #90: Welcome to discussions! "
2020-01-14 22:06:24 +01:00
2021-02-12 08:19:30 +01:00
2020-10-23 02:43:28 +02:00
class GitHubWebhookTest ( WebhookTestCase ) :
2021-02-12 08:20:45 +01:00
STREAM_NAME = " github "
2016-11-14 21:06:39 +01:00
URL_TEMPLATE = " /api/v1/external/github?stream= {stream} &api_key= {api_key} "
2021-06-26 09:18:33 +02:00
WEBHOOK_DIR_NAME = " github "
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_ping_event ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " GitHub webhook has been successfully configured by TomaszKolek. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " ping " , TOPIC_REPO , expected_message )
2017-02-01 00:37:13 +01:00
2019-06-06 06:51:38 +02:00
def test_star_event ( self ) - > None :
2020-06-27 13:19:32 +02:00
expected_message = " Codertocat starred the repository [Codertocat/Hello-World](https://github.com/Codertocat/Hello-World). "
2020-04-09 21:51:58 +02:00
expected_topic = " Hello-World "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " star " , expected_topic , expected_message )
2019-06-06 06:51:38 +02:00
2017-11-04 07:47:46 +01:00
def test_ping_organization_event ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " GitHub webhook has been successfully configured by eeshangarg. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " ping__organization " , " zulip-test-org " , expected_message )
2017-07-17 04:03:54 +02:00
2017-11-04 07:47:46 +01:00
def test_push_delete_branch ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " eeshangarg [deleted](https://github.com/eeshangarg/public-repo/compare/2e8cf535fb38...000000000000) the branch feature. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__delete_branch " , " public-repo / feature " , expected_message )
2017-05-16 04:38:25 +02:00
2023-05-04 17:12:59 +02:00
def test_push_force_1_commit ( self ) - > None :
2023-05-04 17:12:59 +02:00
expected_message = " sbansal1999 [force pushed](https://github.com/sbansal1999/zulip/compare/b6de8891fc10...971d76ca3094) 1 commit to branch temp. \n \n * log: Add important.txt which is useful for logging errors. ([971d76ca309](https://github.com/sbansal1999/zulip/commit/971d76ca309446a9c20381f6271cea8a59b4e40a)) "
2023-05-04 17:12:59 +02:00
self . check_webhook ( " push__force_1_commit " , " zulip / temp " , expected_message )
def test_push__force_remove_commits ( self ) - > None :
2023-05-04 17:12:59 +02:00
expected_message = " sbansal1999 [force pushed](https://github.com/sbansal1999/zulip/compare/2084a91af9ca...9a8749ea8fe7) the branch temp. "
2023-05-04 17:12:59 +02:00
self . check_webhook ( " push__force_remove_commits " , " zulip / temp " , expected_message )
2017-11-04 07:47:46 +01:00
def test_push_local_branch_without_commits ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " eeshangarg [pushed](https://github.com/eeshangarg/public-repo/compare/feature) the branch feature. "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" push__local_branch_without_commits " , " public-repo / feature " , expected_message
)
2017-05-17 02:19:33 +02:00
2023-05-23 05:52:42 +02:00
def test_push_merege_queue_ignore ( self ) - > None :
self . url = self . build_webhook_url ( )
payload = self . get_body ( " push__merge_queue " )
self . verify_post_is_ignored ( payload , " push " )
2017-11-04 07:47:46 +01:00
def test_push_1_commit ( self ) - > None :
2022-11-07 21:15:53 +01:00
expected_message = " baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 1 commit to branch changes. \n \n * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__1_commit " , TOPIC_BRANCH , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_push_1_commit_without_username ( self ) - > None :
2022-11-07 21:15:53 +01:00
expected_message = " eeshangarg [pushed](https://github.com/eeshangarg/public-repo/compare/0383613da871...2e8cf535fb38) 1 commit to branch changes. Commits by John Snow (1). \n \n * Update the README ([2e8cf535fb3](https://github.com/eeshangarg/public-repo/commit/2e8cf535fb38a3dab2476cdf856efda904ad4c94)) "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__1_commit_without_username " , TOPIC_BRANCH , expected_message )
2017-04-29 08:16:07 +02:00
2017-11-04 07:47:46 +01:00
def test_push_1_commit_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( " master,changes " )
2022-11-07 21:15:53 +01:00
expected_message = " baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 1 commit to branch changes. \n \n * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__1_commit " , TOPIC_BRANCH , expected_message )
2017-03-25 03:23:15 +01:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers ( self ) - > None :
2022-11-07 21:15:53 +01:00
commits_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
expected_message = f """ baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 6 commits to branch changes. Commits by Tomasz (3), Ben (2) and baxterthehacker (1). \n \n { commits_info * 5 } * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) """
2017-04-05 09:12:19 +02:00
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__multiple_committers " , TOPIC_BRANCH , expected_message )
2017-04-05 09:12:19 +02:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers_with_others ( self ) - > None :
2022-11-07 21:15:53 +01:00
commits_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
expected_message = f """ baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 10 commits to branch changes. Commits by Tomasz (4), Ben (3), James (2) and others (1). \n \n { commits_info * 9 } * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) """
2017-04-05 09:12:19 +02:00
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__multiple_committers_with_others " , TOPIC_BRANCH , expected_message )
2017-04-05 09:12:19 +02:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( " master,changes " )
2022-11-07 21:15:53 +01:00
commits_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
expected_message = f """ baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 6 commits to branch changes. Commits by Tomasz (3), Ben (2) and baxterthehacker (1). \n \n { commits_info * 5 } * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) """
2017-04-21 23:35:40 +02:00
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__multiple_committers " , TOPIC_BRANCH , expected_message )
2017-04-21 23:35:40 +02:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers_with_others_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( " master,changes " )
2022-11-07 21:15:53 +01:00
commits_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
expected_message = f """ baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 10 commits to branch changes. Commits by Tomasz (4), Ben (3), James (2) and others (1). \n \n { commits_info * 9 } * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) """
2017-04-21 23:35:40 +02:00
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__multiple_committers_with_others " , TOPIC_BRANCH , expected_message )
2017-04-21 23:35:40 +02:00
2017-11-04 07:47:46 +01:00
def test_push_50_commits ( self ) - > None :
2022-11-07 21:15:53 +01:00
commit_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
2020-06-10 06:40:53 +02:00
expected_message = f " baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 50 commits to branch changes. \n \n { commit_info * COMMITS_LIMIT } [and 30 more commit(s)] "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__50_commits " , TOPIC_BRANCH , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_push_50_commits_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,changes " )
2022-11-07 21:15:53 +01:00
commit_info = " * Update README.md ([0d1a26e67d8](https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c)) \n "
2020-06-10 06:40:53 +02:00
expected_message = f " baxterthehacker [pushed](https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f) 50 commits to branch changes. \n \n { commit_info * COMMITS_LIMIT } [and 30 more commit(s)] "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__50_commits " , TOPIC_BRANCH , expected_message )
2017-03-25 03:23:15 +01:00
2017-11-04 07:47:46 +01:00
def test_commit_comment_msg ( self ) - > None :
2022-11-07 21:15:53 +01:00
expected_message = " baxterthehacker [commented](https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b#commitcomment-11056394) on [9049f1265b7](https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b): \n ~~~ quote \n This is a really good change! :+1: \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " commit_comment " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_create_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker created tag 0.0.1. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " create " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_delete_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker deleted tag simple-tag. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " delete " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_deployment_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker created new deployment. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " deployment " , TOPIC_DEPLOYMENT , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_deployment_status_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Deployment changed status to success. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " deployment_status " , TOPIC_DEPLOYMENT , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_fork_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterandthehackers forked [public-repo](https://github.com/baxterandthehackers/public-repo). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " fork " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_issue_comment_msg ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker [commented](https://github.com/baxterthehacker/public-repo/issues/2#issuecomment-99262140) on [issue #2](https://github.com/baxterthehacker/public-repo/issues/2): \n \n ~~~ quote \n You are totally right! I ' ll get this fixed right away. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_comment " , TOPIC_ISSUE , expected_message )
2016-10-25 14:50:42 +02:00
2018-09-27 18:57:09 +02:00
def test_issue_comment_deleted_msg ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_topic = " Scheduler / issue #5 This is a new issue "
expected_message = " eeshangarg deleted a [comment](https://github.com/eeshangarg/Scheduler/issues/5#issuecomment-425164194) on [issue #5](https://github.com/eeshangarg/Scheduler/issues/5): \n \n ~~~ quote \n This is a comment on this new issue. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_comment__deleted " , expected_topic , expected_message )
2018-09-27 18:57:09 +02:00
2018-07-20 21:36:18 +02:00
def test_issue_comment_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker [commented](https://github.com/baxterthehacker/public-repo/issues/2#issuecomment-99262140) on [issue #2 Spelling error in the README file](https://github.com/baxterthehacker/public-repo/issues/2): \n \n ~~~ quote \n You are totally right! I ' ll get this fixed right away. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_comment " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2017-11-04 07:47:46 +01:00
def test_issue_msg ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker opened [issue #2](https://github.com/baxterthehacker/public-repo/issues/2): \n \n ~~~ quote \n It looks like you accidentally spelled ' commit ' with two ' t ' s. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issues " , TOPIC_ISSUE , expected_message )
2016-10-25 14:50:42 +02:00
2018-07-20 21:36:18 +02:00
def test_issue_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker opened [issue #2 Spelling error in the README file](https://github.com/baxterthehacker/public-repo/issues/2): \n \n ~~~ quote \n It looks like you accidentally spelled ' commit ' with two ' t ' s. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issues " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2023-04-03 06:29:21 +02:00
def test_issue_assigned ( self ) - > None :
2023-04-21 20:27:50 +02:00
expected_message = " sbansal1999 assigned [issue #7](https://github.com/sbansal1999/testing-gh/issues/7) to sbansal1999. "
2023-04-03 06:29:21 +02:00
expected_topic = " testing-gh / issue #7 Sample Issue testing something "
self . check_webhook ( " issues__assigned " , expected_topic , expected_message )
def test_issue_assigned_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
expected_topic = " notifications "
2023-04-21 20:27:50 +02:00
expected_message = " sbansal1999 assigned [issue #7 Sample Issue testing something](https://github.com/sbansal1999/testing-gh/issues/7) to sbansal1999. "
2023-04-03 06:29:21 +02:00
self . check_webhook ( " issues__assigned " , expected_topic , expected_message )
2023-04-21 15:58:42 +02:00
def test_issue_unassigned ( self ) - > None :
2023-04-21 20:27:50 +02:00
expected_message = " sbansal1999 unassigned sbansal1999 from [issue #9](https://github.com/sbansal1999/testing-gh/issues/9). "
2023-04-21 15:58:42 +02:00
expected_topic = " testing-gh / issue #9 idk man "
self . check_webhook ( " issues__unassigned " , expected_topic , expected_message )
def test_issue_unassigned_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
expected_topic = " notifications "
2023-04-21 20:27:50 +02:00
expected_message = " sbansal1999 unassigned sbansal1999 from [issue #9 idk man](https://github.com/sbansal1999/testing-gh/issues/9). "
2023-04-21 15:58:42 +02:00
self . check_webhook ( " issues__unassigned " , expected_topic , expected_message )
2017-11-04 07:47:46 +01:00
def test_membership_msg ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" baxterthehacker added [kdaigle](https://github.com/kdaigle) to the Contractors team. "
)
2020-08-23 15:49:24 +02:00
self . check_webhook ( " membership " , TOPIC_ORGANIZATION , expected_message )
2019-03-09 21:06:44 +01:00
def test_membership_removal_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker removed [kdaigle](https://github.com/kdaigle) from the Contractors team. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " membership__removal " , TOPIC_ORGANIZATION , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_member_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker added [octocat](https://github.com/octocat) to [public-repo](https://github.com/baxterthehacker/public-repo). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " member " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_opened_msg ( self ) - > None :
2023-03-13 21:54:41 +01:00
expected_message = " baxterthehacker opened [PR #1](https://github.com/baxterthehacker/public-repo/pull/1) from `baxterthehacker:changes` to `baxterthehacker:master`: \n \n ~~~ quote \n This is a pretty simple change that we need to pull into master. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__opened " , TOPIC_PR , expected_message )
2016-10-25 14:50:42 +02:00
2018-09-26 02:45:29 +02:00
def test_pull_request_opened_with_preassigned_assignee_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_topic = " Scheduler / PR #4 Improve README "
2023-03-28 20:25:22 +02:00
expected_message = " eeshangarg opened [PR #4](https://github.com/eeshangarg/Scheduler/pull/4) from `eeshangarg:improve-readme-2` to `eeshangarg:master` (assigned to eeshangarg). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request__opened_with_preassigned_assignee " , expected_topic , expected_message
)
2018-09-26 02:45:29 +02:00
2018-07-20 21:36:18 +02:00
def test_pull_request_opened_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
2023-03-13 21:54:41 +01:00
expected_message = " baxterthehacker opened [PR #1 Update the README with new information](https://github.com/baxterthehacker/public-repo/pull/1) from `baxterthehacker:changes` to `baxterthehacker:master`: \n \n ~~~ quote \n This is a pretty simple change that we need to pull into master. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__opened " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_synchronized_msg ( self ) - > None :
2023-03-13 21:54:41 +01:00
expected_message = " baxterthehacker updated [PR #1](https://github.com/baxterthehacker/public-repo/pull/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__synchronized " , TOPIC_PR , expected_message )
2017-02-02 20:09:57 +01:00
2017-11-04 07:47:46 +01:00
def test_pull_request_closed_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker closed without merge [PR #1](https://github.com/baxterthehacker/public-repo/pull/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__closed " , TOPIC_PR , expected_message )
2016-10-25 14:50:42 +02:00
2018-07-20 21:36:18 +02:00
def test_pull_request_closed_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
expected_message = " baxterthehacker closed without merge [PR #1 Update the README with new information](https://github.com/baxterthehacker/public-repo/pull/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__closed " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_merged_msg ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" baxterthehacker merged [PR #1](https://github.com/baxterthehacker/public-repo/pull/1). "
)
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__merged " , TOPIC_PR , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_public_msg ( self ) - > None :
2020-06-27 13:19:32 +02:00
expected_message = " baxterthehacker made the repository [baxterthehacker/public-repo](https://github.com/baxterthehacker/public-repo) public. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " public " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_wiki_pages_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " jasonrudolph: \n * created [Home](https://github.com/baxterthehacker/public-repo/wiki/Home) \n * created [Home](https://github.com/baxterthehacker/public-repo/wiki/Home) "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " gollum__wiki_pages " , TOPIC_WIKI , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_watch_msg ( self ) - > None :
2020-06-27 13:19:32 +02:00
expected_message = " baxterthehacker starred the repository [baxterthehacker/public-repo](https://github.com/baxterthehacker/public-repo). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " watch__repository " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_repository_msg ( self ) - > None :
2020-06-27 13:19:32 +02:00
expected_message = " baxterthehacker created the repository [baxterandthehackers/public-repo](https://github.com/baxterandthehackers/public-repo). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " repository " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_team_add_msg ( self ) - > None :
2020-06-27 13:19:32 +02:00
expected_message = " The repository [baxterandthehackers/public-repo](https://github.com/baxterandthehackers/public-repo) was added to team github. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " team_add " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2017-11-04 07:47:46 +01:00
def test_release_msg ( self ) - > None :
2020-05-12 02:39:57 +02:00
expected_message = " baxterthehacker published release [0.0.1](https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1) for tag 0.0.1. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " release " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2022-04-03 11:08:49 +02:00
def test_release_msg_with_name ( self ) - > None :
expected_message = " baxterthehacker published release [0.0.1](https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1) for tag 0.0.1. "
self . check_webhook ( " release__with_name " , TOPIC_REPO , expected_message )
2017-11-04 07:47:46 +01:00
def test_page_build_msg ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" GitHub Pages build, triggered by baxterthehacker, has finished building. "
)
2020-08-23 15:49:24 +02:00
self . check_webhook ( " page_build " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2022-04-03 11:08:49 +02:00
def test_page_build_errored_msg ( self ) - > None :
expected_message = " GitHub Pages build, triggered by baxterthehacker, has failed: \n ~~~ quote \n Something went wrong. \n ~~~. "
self . check_webhook ( " page_build__errored " , TOPIC_REPO , expected_message )
2017-11-04 07:47:46 +01:00
def test_status_msg ( self ) - > None :
2022-11-07 21:24:35 +01:00
expected_message = " [9049f1265b7](https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b) changed its status to success. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " status " , TOPIC_REPO , expected_message )
2016-10-25 14:50:42 +02:00
2018-09-27 22:41:43 +02:00
def test_status_with_target_url_msg ( self ) - > None :
2022-11-07 21:24:35 +01:00
expected_message = " [9049f1265b7](https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b) changed its status to [success](https://example.com/build/status). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " status__with_target_url " , TOPIC_REPO , expected_message )
2018-09-27 22:41:43 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_review_msg ( self ) - > None :
2023-04-04 04:22:00 +02:00
expected_message = " baxterthehacker submitted [PR review](https://github.com/baxterthehacker/public-repo/pull/1#pullrequestreview-2626884): \n \n ~~~ quote \n Looks great! \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request_review " , TOPIC_PR , expected_message )
2016-10-25 14:50:42 +02:00
2018-07-20 21:36:18 +02:00
def test_pull_request_review_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
2023-04-04 04:22:00 +02:00
expected_message = " baxterthehacker submitted [PR review for #1 Update the README with new information](https://github.com/baxterthehacker/public-repo/pull/1#pullrequestreview-2626884): \n \n ~~~ quote \n Looks great! \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request_review " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_review_comment_msg ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker created [PR review comment](https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692): \n \n ~~~ quote \n Maybe you should use more emojji on this line. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request_review_comment " , TOPIC_PR , expected_message )
2016-10-25 14:50:42 +02:00
2018-07-20 21:36:18 +02:00
def test_pull_request_review_comment_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
2021-05-10 07:02:14 +02:00
expected_message = " baxterthehacker created [PR review comment on #1 Update the README with new information](https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692): \n \n ~~~ quote \n Maybe you should use more emojji on this line. \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request_review_comment " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2021-03-01 23:16:08 +01:00
def test_pull_request_locked ( self ) - > None :
expected_message = " tushar912 has locked [PR #1](https://github.com/tushar912/public-repo/pull/1) as off-topic and limited conversation to collaborators. "
self . check_webhook ( " pull_request__locked " , TOPIC_PR , expected_message )
def test_pull_request_unlocked ( self ) - > None :
expected_message = (
" tushar912 has unlocked [PR #1](https://github.com/tushar912/public-repo/pull/1). "
)
self . check_webhook ( " pull_request__unlocked " , TOPIC_PR , expected_message )
def test_pull_request_auto_merge_enabled ( self ) - > None :
expected_message = " tushar912 has enabled auto merge for [PR #1](https://github.com/tushar912/public-repo/pull/1). "
self . check_webhook ( " pull_request__auto_merge_enabled " , TOPIC_PR , expected_message )
def test_pull_request_auto_merge_disabled ( self ) - > None :
expected_message = " tushar912 has disabled auto merge for [PR #1](https://github.com/tushar912/public-repo/pull/1). "
self . check_webhook ( " pull_request__auto_merge_disabled " , TOPIC_PR , expected_message )
2017-11-04 07:47:46 +01:00
def test_push_tag_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker pushed tag abc. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push__tag " , TOPIC_REPO , expected_message )
2017-02-08 20:41:43 +01:00
2017-11-04 07:47:46 +01:00
def test_pull_request_edited_msg ( self ) - > None :
2023-03-13 21:54:41 +01:00
expected_message = (
" baxterthehacker edited [PR #1](https://github.com/baxterthehacker/public-repo/pull/1). "
)
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__edited " , TOPIC_PR , expected_message )
2017-02-08 20:41:43 +01:00
2020-11-23 09:15:42 +01:00
def test_pull_request_edited_with_body_change ( self ) - > None :
2023-03-13 21:54:41 +01:00
expected_message = " cozyrohan edited [PR #1](https://github.com/cozyrohan/public-repo/pull/1): \n \n ~~~ quote \n PR EDITED \n ~~~ "
2020-11-23 09:15:42 +01:00
self . check_webhook ( " pull_request__edited_with_body_change " , TOPIC_PR , expected_message )
def test_pull_request_synchronized_with_body ( self ) - > None :
2023-03-13 21:54:41 +01:00
expected_message = " baxterthehacker updated [PR #1](https://github.com/baxterthehacker/public-repo/pull/1). "
2020-11-23 09:15:42 +01:00
self . check_webhook ( " pull_request__synchronized_with_body " , TOPIC_PR , expected_message )
2017-11-04 07:47:46 +01:00
def test_pull_request_assigned_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " baxterthehacker assigned [PR #1](https://github.com/baxterthehacker/public-repo/pull/1) to baxterthehacker. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__assigned " , TOPIC_PR , expected_message )
2017-02-08 20:41:43 +01:00
2018-07-20 21:36:18 +02:00
def test_pull_request_assigned_msg_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
expected_message = " baxterthehacker assigned [PR #1 Update the README with new information](https://github.com/baxterthehacker/public-repo/pull/1) to baxterthehacker. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__assigned " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2017-11-04 07:47:46 +01:00
def test_pull_request_unassigned_msg ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" eeshangarg unassigned [PR #1](https://github.com/zulip-test-org/helloworld/pull/1). "
)
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request__unassigned " ,
" helloworld / PR #1 Mention that Zulip rocks! " ,
expected_message ,
)
2017-02-08 21:30:25 +01:00
2020-05-12 15:25:08 +02:00
def test_pull_request_ready_for_review_msg ( self ) - > None :
expected_message = " **Hypro999** has marked [PR #2](https://github.com/Hypro999/temp-test-github-webhook/pull/2) as ready for review. "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request__ready_for_review " ,
" temp-test-github-webhook / PR #2 Test " ,
expected_message ,
)
2020-05-12 15:25:08 +02:00
2018-07-01 20:40:08 +02:00
def test_pull_request_review_requested_msg ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " **eeshangarg** requested [showell](https://github.com/showell) for a review on [PR #1](https://github.com/eeshangarg/Scheduler/pull/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request__review_requested " ,
" Scheduler / PR #1 This is just a test commit " ,
expected_message ,
)
2018-07-01 20:40:08 +02:00
2020-03-11 00:29:59 +01:00
def test_pull_request__review_requested_team_reviewer_msg ( self ) - > None :
2021-05-08 04:11:09 +02:00
expected_message = " **singhsourabh** requested [authority](https://github.com/orgs/test-org965/teams/authority) for a review on [PR #4](https://github.com/test-org965/webhook-test/pull/4). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request__review_requested_team_reviewer " ,
" webhook-test / PR #4 testing webhook " ,
expected_message ,
)
2020-03-11 00:29:59 +01:00
2018-07-20 21:36:18 +02:00
def test_pull_request_review_requested_with_custom_topic_in_url ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( topic = " notifications " )
2020-04-09 21:51:58 +02:00
expected_topic = " notifications "
expected_message = " **eeshangarg** requested [showell](https://github.com/showell) for a review on [PR #1 This is just a test commit](https://github.com/eeshangarg/Scheduler/pull/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " pull_request__review_requested " , expected_topic , expected_message )
2018-07-20 21:36:18 +02:00
2019-02-19 21:16:41 +01:00
def test_check_run ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_topic = " hello-world / checks "
expected_message = """
2022-11-07 21:24:35 +01:00
Check [ randscape ] ( http : / / github . com / github / hello - world / runs / 4 ) completed ( success ) . ( [ d6fde92930d ] ( http : / / github . com / github / hello - world / commit / d6fde92930d4715a2b49857d24b940956b26d2d3 ) )
2019-02-19 21:16:41 +01:00
""" .strip()
2020-08-23 15:49:24 +02:00
self . check_webhook ( " check_run__completed " , expected_topic , expected_message )
2019-02-19 21:16:41 +01:00
2020-05-14 14:20:05 +02:00
def test_team_edited_description ( self ) - > None :
expected_topic = " team Testing "
expected_message = """ \
* * Hypro999 * * changed the team description to :
` ` ` quote
A temporary team so that I can get some webhook fixtures !
` ` ` """
2020-08-23 15:49:24 +02:00
self . check_webhook ( " team__edited_description " , expected_topic , expected_message )
2020-05-14 14:20:05 +02:00
def test_team_edited_name ( self ) - > None :
expected_topic = " team Testing Team "
expected_message = """ Team `Testing` was renamed to `Testing Team`. """
2020-08-23 15:49:24 +02:00
self . check_webhook ( " team__edited_name " , expected_topic , expected_message )
2020-05-14 14:20:05 +02:00
def test_team_edited_privacy ( self ) - > None :
expected_topic = " team Testing Team "
expected_message = """ Team visibility changed to `secret` """
2020-08-23 15:49:24 +02:00
self . check_webhook ( " team__edited_privacy_secret " , expected_topic , expected_message )
2020-05-14 14:20:05 +02:00
2020-08-22 15:50:15 +02:00
def verify_post_is_ignored ( self , payload : str , http_x_github_event : str ) - > None :
with patch ( " zerver.webhooks.github.view.check_send_webhook_message " ) as m :
result = self . client_post (
self . url ,
payload ,
HTTP_X_GITHUB_EVENT = http_x_github_event ,
content_type = " application/json " ,
)
self . assertFalse ( m . called )
2019-02-19 21:16:41 +01:00
self . assert_json_success ( result )
2020-08-22 15:50:15 +02:00
def test_check_run_in_progress_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " check_run__in_progress " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " check_run " )
2020-09-01 13:52:36 +02:00
def test_ignored_pull_request_actions ( self ) - > None :
ignored_actions = [
2020-09-01 14:19:33 +02:00
" approved " ,
" converted_to_draft " ,
2020-09-01 13:52:36 +02:00
" labeled " ,
" review_request_removed " ,
" unlabeled " ,
]
for action in ignored_actions :
data = dict ( action = action )
payload = orjson . dumps ( data ) . decode ( )
self . verify_post_is_ignored ( payload , " pull_request " )
2017-03-25 03:23:15 +01:00
2020-09-01 15:07:08 +02:00
def test_ignored_team_actions ( self ) - > None :
ignored_actions = [
" added_to_repository " ,
" created " ,
" deleted " ,
" removed_from_repository " ,
]
for action in ignored_actions :
data = dict ( action = action )
payload = orjson . dumps ( data ) . decode ( )
self . verify_post_is_ignored ( payload , " team " )
2020-08-22 15:50:15 +02:00
def test_push_1_commit_filtered_by_branches_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
payload = self . get_body ( " push__1_commit " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " push " )
2017-03-25 03:23:15 +01:00
2020-08-22 15:50:15 +02:00
def test_push_50_commits_filtered_by_branches_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
payload = self . get_body ( " push__50_commits " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " push " )
2017-04-21 23:35:40 +02:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers_filtered_by_branches_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
payload = self . get_body ( " push__multiple_committers " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " push " )
2017-04-21 23:35:40 +02:00
2023-01-02 20:50:23 +01:00
def test_push_multiple_committers_with_others_filtered_by_branches_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
payload = self . get_body ( " push__multiple_committers_with_others " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " push " )
2019-02-19 20:17:40 +01:00
2020-08-22 15:50:15 +02:00
def test_repository_vulnerability_alert_ignore ( self ) - > None :
2019-02-19 20:17:40 +01:00
self . url = self . build_webhook_url ( )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " repository_vulnerability_alert " )
2020-08-22 15:50:15 +02:00
self . verify_post_is_ignored ( payload , " repository_vulnerability_alert " )
2020-09-01 13:28:33 +02:00
def test_ignored_events ( self ) - > None :
# The payload for these events never gets looked at in the
# webhook itself; it only needs to be valid JSON.
payload = " {} "
ignored_events = [
" check_suite " ,
" label " ,
" meta " ,
" milestone " ,
" organization " ,
" project_card " ,
" repository_vulnerability_alert " ,
]
for event in ignored_events :
self . verify_post_is_ignored ( payload , event )
2020-09-01 23:24:17 +02:00
2020-09-02 15:15:50 +02:00
def test_team_edited_with_unsupported_keys ( self ) - > None :
self . subscribe ( self . test_user , self . STREAM_NAME )
2020-09-01 23:24:17 +02:00
event = " team "
payload = dict (
action = " edited " ,
changes = dict (
bogus_key1 = { } ,
bogus_key2 = { } ,
) ,
2021-02-12 08:19:30 +01:00
team = dict ( name = " My Team " ) ,
2020-09-01 23:24:17 +02:00
)
2020-08-19 22:26:38 +02:00
log_mock = patch ( " zerver.decorator.webhook_unsupported_events_logger.exception " )
2020-09-01 23:24:17 +02:00
with log_mock as m :
2020-09-02 15:15:50 +02:00
stream_message = self . send_webhook_payload (
self . test_user ,
2020-09-01 23:24:17 +02:00
self . url ,
payload ,
HTTP_X_GITHUB_EVENT = event ,
content_type = " application/json " ,
)
2020-09-02 15:15:50 +02:00
self . assert_stream_message (
message = stream_message ,
stream_name = self . STREAM_NAME ,
topic_name = " team My Team " ,
2021-02-12 08:19:30 +01:00
content = " Team has changes to `bogus_key1/bogus_key2` data. " ,
2020-09-02 15:15:50 +02:00
)
2020-09-01 23:24:17 +02:00
m . assert_called_once ( )
msg = m . call_args [ 0 ] [ 0 ]
stack_info = m . call_args [ 1 ] [ " stack_info " ]
2020-09-02 14:23:52 +02:00
self . assertIn (
2020-09-04 03:38:24 +02:00
" The ' team/edited (changes: bogus_key1/bogus_key2) ' event isn ' t currently supported by the GitHub webhook " ,
2020-09-02 14:23:52 +02:00
msg ,
)
2020-09-01 23:24:17 +02:00
self . assertTrue ( stack_info )
2021-10-18 13:33:38 +02:00
def test_discussion_msg ( self ) - > None :
2021-10-23 18:59:57 +02:00
expected_message = " Codertocat created [discussion #90](https://github.com/baxterthehacker/public-repo/discussions/90) in General: \n ```quote \n ### Welcome to discussions! \n We ' re glad to have you here! \n ``` "
2021-10-18 13:33:38 +02:00
self . check_webhook ( " discussion " , TOPIC_DISCUSSION , expected_message )
def test_discussion_comment_msg ( self ) - > None :
2021-10-23 18:59:57 +02:00
expected_message = " Codertocat [commented](https://github.com/baxterthehacker/public-repo/discussions/90#discussioncomment-544078) on [discussion #90](https://github.com/baxterthehacker/public-repo/discussions/90): \n ```quote \n I have so many questions to ask you! \n ``` "
2021-10-18 13:33:38 +02:00
self . check_webhook ( " discussion_comment " , TOPIC_DISCUSSION , expected_message )