2020-05-26 07:16:25 +02:00
from unittest . mock import MagicMock , patch
2017-11-16 00:43:10 +01:00
2023-07-10 22:17:30 +02:00
from zerver . lib . request import RequestNotes
2016-11-10 19:30:09 +01:00
from zerver . lib . test_classes import WebhookTestCase
2023-07-10 22:17:30 +02:00
from zerver . lib . test_helpers import HostRequestMock
2021-12-17 07:03:22 +01:00
from zerver . lib . validator import wrap_wild_value
2023-12-15 04:33:19 +01:00
from zerver . models . clients import get_client
2020-09-23 18:57:33 +02:00
from zerver . webhooks . bitbucket2 . view import get_user_info
2016-09-20 22:51:11 +02:00
2020-08-22 17:16:32 +02:00
TOPIC = " Repository name "
TOPIC_PR_EVENTS = " Repository name / PR #1 new commit "
2021-05-10 07:02:14 +02:00
TOPIC_ISSUE_EVENTS = " Repository name / issue #1 Bug "
2020-08-22 17:16:32 +02:00
TOPIC_BRANCH_EVENTS = " Repository name / master "
2020-01-14 22:06:24 +01:00
2021-02-12 08:19:30 +01:00
2016-09-20 22:51:11 +02:00
class Bitbucket2HookTests ( WebhookTestCase ) :
2021-02-12 08:20:45 +01:00
STREAM_NAME = " bitbucket2 "
2016-09-20 22:51:11 +02:00
URL_TEMPLATE = " /api/v1/external/bitbucket2?stream= {stream} &api_key= {api_key} "
2021-06-26 09:18:33 +02:00
WEBHOOK_DIR_NAME = " bitbucket2 "
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_event ( self ) - > None :
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) "
2020-09-23 21:17:04 +02:00
expected_message = f " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 1 commit to branch master. \n \n { commit_info } "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push " , TOPIC_BRANCH_EVENTS , expected_message )
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_commits_multiple_committers ( self ) - > None :
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) \n "
2024-03-01 02:57:55 +01:00
expected_message = f """ Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 3 commits to branch master. Commits by Ben (2) and Tomasz (1). \n \n { commit_info * 2 } * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) """
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push_multiple_committers " , TOPIC_BRANCH_EVENTS , expected_message )
2017-04-05 09:12:19 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_commits_multiple_committers_with_others ( self ) - > None :
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) \n "
2024-03-01 02:57:55 +01:00
expected_message = f """ Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 10 commits to branch master. Commits by Tomasz (4), James (3), Brendon (2) and others (1). \n \n { commit_info * 9 } * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) """
2020-08-23 15:49:24 +02:00
self . check_webhook (
" push_multiple_committers_with_others " , TOPIC_BRANCH_EVENTS , expected_message
)
2017-04-05 09:12:19 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_commits_multiple_committers_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) \n "
2024-03-01 02:57:55 +01:00
expected_message = f """ Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 3 commits to branch master. Commits by Ben (2) and Tomasz (1). \n \n { commit_info * 2 } * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) """
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push_multiple_committers " , TOPIC_BRANCH_EVENTS , expected_message )
2017-04-05 02:52:31 +02:00
2021-02-12 08:19:30 +01:00
def test_bitbucket2_on_push_commits_multiple_committers_with_others_filtered_by_branches (
self ,
) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) \n "
2024-03-01 02:57:55 +01:00
expected_message = f """ Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 10 commits to branch master. Commits by Tomasz (4), James (3), Brendon (2) and others (1). \n \n { commit_info * 9 } * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) """
2020-08-23 15:49:24 +02:00
self . check_webhook (
" push_multiple_committers_with_others " , TOPIC_BRANCH_EVENTS , expected_message
)
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_event_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2022-11-07 21:15:53 +01:00
commit_info = " * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) "
2020-09-23 21:17:04 +02:00
expected_message = f " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 1 commit to branch master. \n \n { commit_info } "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push " , TOPIC_BRANCH_EVENTS , expected_message )
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_commits_above_limit_event ( self ) - > None :
2022-11-07 21:15:53 +01:00
commit_info = " * a ([6f161a7bced](https://bitbucket.org/kolaszek/repository-name/commits/6f161a7bced94430ac8947d87dbf45c6deee3fb0)) \n "
2020-09-23 21:17:04 +02:00
expected_message = f " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branches/compare/6f161a7bced94430ac8947d87dbf45c6deee3fb0..1221f2fda6f1e3654b09f1f3a08390e4cb25bb48) 5 commits to branch master. \n \n { ( commit_info * 5 ) } [and more commit(s)] "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push_commits_above_limit " , TOPIC_BRANCH_EVENTS , expected_message )
2016-10-07 15:12:51 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_commits_above_limit_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2022-11-07 21:15:53 +01:00
commit_info = " * a ([6f161a7bced](https://bitbucket.org/kolaszek/repository-name/commits/6f161a7bced94430ac8947d87dbf45c6deee3fb0)) \n "
2020-09-23 21:17:04 +02:00
expected_message = f " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branches/compare/6f161a7bced94430ac8947d87dbf45c6deee3fb0..1221f2fda6f1e3654b09f1f3a08390e4cb25bb48) 5 commits to branch master. \n \n { ( commit_info * 5 ) } [and more commit(s)] "
2019-04-19 22:02:41 +02:00
2020-08-23 15:49:24 +02:00
self . check_webhook ( " push_commits_above_limit " , TOPIC_BRANCH_EVENTS , expected_message )
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_force_push_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz [force pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) to branch master. Head is now 25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " force_push " , TOPIC_BRANCH_EVENTS , expected_message )
2016-10-06 15:32:10 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_force_push_event_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz [force pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) to branch master. Head is now 25f93d22b719e2d678a7ad5ee0ef0d1fcdf39c12. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " force_push " , TOPIC_BRANCH_EVENTS , expected_message )
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_remove_branch_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz deleted branch master. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " remove_branch " , TOPIC_BRANCH_EVENTS , expected_message )
2016-10-06 16:14:51 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_fork_event ( self ) - > None :
2020-09-23 18:57:33 +02:00
expected_message = " Tomasz forked the repository into [kolaszek/repository-name2](https://bitbucket.org/kolaszek/repository-name2). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " fork " , TOPIC , expected_message )
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_commit_comment_created_event ( self ) - > None :
2022-11-07 21:15:53 +01:00
expected_message = " Tomasz [commented](https://bitbucket.org/kolaszek/repository-name/commits/32c4ea19aa3af10acd08e419e2c354941a365d74#comment-3354963) on [32c4ea19aa3](https://bitbucket.org/kolaszek/repository-name/commits/32c4ea19aa3af10acd08e419e2c354941a365d74): \n ~~~ quote \n Nice fix! \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " commit_comment_created " , TOPIC , expected_message )
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_commit_status_changed_event ( self ) - > None :
2022-11-07 21:24:35 +01:00
expected_message = " [System mybuildtool](https://my-build-tool.com/builds/MY-PROJECT/BUILD-777) changed status of [9fec847784a](https://bitbucket.org/kolaszek/repository-name/commits/9fec847784abb10b2fa567ee63b85bd238955d0e) to SUCCESSFUL. "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " commit_status_changed " , TOPIC , expected_message )
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_issue_created_event ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " Tomasz created [issue #1](https://bitbucket.org/kolaszek/repository-name/issues/2/bug) (assigned to Tomasz): \n \n ~~~ quote \n Such a bug \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_created " , TOPIC_ISSUE_EVENTS , expected_message )
2016-09-20 22:51:11 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_issue_created_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2021-05-10 07:02:14 +02:00
expected_message = " Tomasz created [issue #1 Bug](https://bitbucket.org/kolaszek/repository-name/issues/2/bug) (assigned to Tomasz): \n \n ~~~ quote \n Such a bug \n ~~~ "
2024-01-17 15:53:30 +01:00
self . check_webhook ( " issue_created " , expected_topic_name , expected_message )
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_issue_updated_event ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " Tomasz updated [issue #1](https://bitbucket.org/kolaszek/repository-name/issues/2/bug). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_updated " , TOPIC_ISSUE_EVENTS , expected_message )
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_issue_commented_event ( self ) - > None :
2021-05-10 07:02:14 +02:00
expected_message = " Tomasz [commented](https://bitbucket.org/kolaszek/repository-name/issues/2#comment-28973596) on [issue #1](https://bitbucket.org/kolaszek/repository-name/issues/2/bug). "
2020-08-23 15:49:24 +02:00
self . check_webhook ( " issue_commented " , TOPIC_ISSUE_EVENTS , expected_message )
2016-09-20 22:51:11 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_issue_commented_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2021-05-10 07:02:14 +02:00
expected_message = " Tomasz [commented](https://bitbucket.org/kolaszek/repository-name/issues/2#comment-28973596) on [issue #1 Bug](https://bitbucket.org/kolaszek/repository-name/issues/2/bug). "
2024-01-17 15:53:30 +01:00
self . check_webhook ( " issue_commented " , expected_topic_name , expected_message )
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_created_event ( self ) - > None :
2023-03-28 20:25:22 +02:00
expected_message = " Tomasz created [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1) from `new-branch` to `master` (assigned to Tomasz Kolek): \n \n ~~~ quote \n description \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_created_or_updated " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:created " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2019-06-22 21:45:15 +02:00
def test_bitbucket2_on_pull_request_created_without_reviewer_username_event ( self ) - > None :
2023-03-28 20:25:22 +02:00
expected_message = " Tomasz created [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1) from `new-branch` to `master` (assigned to Tomasz Kolek): \n \n ~~~ quote \n description \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
" pull_request_created_or_updated_without_username " ,
TOPIC_PR_EVENTS ,
expected_message ,
2021-12-17 08:14:22 +01:00
HTTP_X_EVENT_KEY = " pullrequest:created " ,
2020-08-23 15:49:24 +02:00
)
2019-06-22 21:45:15 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_pull_request_created_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2023-03-28 20:25:22 +02:00
expected_message = " Tomasz created [PR #1 new commit](https://bitbucket.org/kolaszek/repository-name/pull-requests/1) from `new-branch` to `master` (assigned to Tomasz Kolek): \n \n ~~~ quote \n description \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_created_or_updated " ,
2024-01-17 15:53:30 +01:00
expected_topic_name ,
2021-12-17 08:14:22 +01:00
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:created " ,
2020-08-23 15:49:24 +02:00
)
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_updated_event ( self ) - > None :
2023-03-24 23:22:48 +01:00
expected_message = " Tomasz updated [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1) (assigned to Tomasz Kolek): \n \n ~~~ quote \n description \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_created_or_updated " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:updated " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_approved_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz approved [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_approved_or_unapproved " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:approved " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_pull_request_approved_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz approved [PR #1 new commit](https://bitbucket.org/kolaszek/repository-name/pull-requests/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_approved_or_unapproved " ,
2024-01-17 15:53:30 +01:00
expected_topic_name ,
2021-12-17 08:14:22 +01:00
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:approved " ,
2020-08-23 15:49:24 +02:00
)
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_unapproved_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz unapproved [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_approved_or_unapproved " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:unapproved " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_declined_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz rejected [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1). "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_fulfilled_or_rejected " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:rejected " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_fulfilled_event ( self ) - > None :
2023-03-24 23:22:48 +01:00
expected_message = " Tomasz merged [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/1) from `new-branch` to `master`. "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_fulfilled_or_rejected " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:fulfilled " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_comment_created_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz [commented](https://bitbucket.org/kolaszek/repository-name/pull-requests/3/_/diff#comment-20576503) on [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/3): \n \n ~~~ quote \n Comment1 \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_comment_action " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:comment_created " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_pull_request_comment_created_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz [commented](https://bitbucket.org/kolaszek/repository-name/pull-requests/3/_/diff#comment-20576503) on [PR #1 new commit](https://bitbucket.org/kolaszek/repository-name/pull-requests/3): \n \n ~~~ quote \n Comment1 \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_comment_action " ,
2024-01-17 15:53:30 +01:00
expected_topic_name ,
2021-12-17 08:14:22 +01:00
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:comment_created " ,
2020-08-23 15:49:24 +02:00
)
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_comment_updated_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz updated a [comment](https://bitbucket.org/kolaszek/repository-name/pull-requests/3/_/diff#comment-20576503) on [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/3): \n \n ~~~ quote \n Comment1 \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_comment_action " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:comment_updated " ,
2020-08-23 15:49:24 +02:00
)
2016-09-20 22:51:11 +02:00
2018-07-25 00:57:45 +02:00
def test_bitbucket2_on_pull_request_comment_updated_with_custom_topic_in_url ( self ) - > None :
self . url = self . build_webhook_url ( topic = " notifications " )
2024-01-17 15:53:30 +01:00
expected_topic_name = " notifications "
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz updated a [comment](https://bitbucket.org/kolaszek/repository-name/pull-requests/3/_/diff#comment-20576503) on [PR #1 new commit](https://bitbucket.org/kolaszek/repository-name/pull-requests/3): \n \n ~~~ quote \n Comment1 \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_comment_action " ,
2024-01-17 15:53:30 +01:00
expected_topic_name ,
2021-12-17 08:14:22 +01:00
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:comment_updated " ,
2020-08-23 15:49:24 +02:00
)
2018-07-25 00:57:45 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_pull_request_comment_deleted_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz deleted a [comment](https://bitbucket.org/kolaszek/repository-name/pull-requests/3/_/diff#comment-20576503) on [PR #1](https://bitbucket.org/kolaszek/repository-name/pull-requests/3): \n \n ~~~ quote \n Comment1 \n ~~~ "
2020-08-23 15:49:24 +02:00
self . check_webhook (
2021-12-17 08:14:22 +01:00
" pull_request_comment_action " ,
TOPIC_PR_EVENTS ,
expected_message ,
HTTP_X_EVENT_KEY = " pullrequest:comment_deleted " ,
2020-08-23 15:49:24 +02:00
)
2016-10-07 17:53:27 +02:00
2018-04-25 01:36:03 +02:00
def test_bitbucket2_on_repo_updated_event ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " eeshangarg changed the website of the **new-name** repo to **http://zulipchat.com**. \n eeshangarg changed the name of the **new-name** repo from **test-repo** to **new-name**. \n eeshangarg changed the language of the **new-name** repo to **python**. \n eeshangarg changed the full name of the **new-name** repo from **webhooktest/test-repo** to **webhooktest/new-name**. \n eeshangarg changed the description of the **new-name** repo to **Random description.** "
2024-01-17 15:53:30 +01:00
expected_topic_name = " new-name "
2021-12-17 08:14:22 +01:00
self . check_webhook (
2024-01-17 15:53:30 +01:00
" repo_updated " , expected_topic_name , expected_message , HTTP_X_EVENT_KEY = " repo:updated "
2021-12-17 08:14:22 +01:00
)
2018-04-25 01:36:03 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_one_tag_event ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" Tomasz pushed tag [a](https://bitbucket.org/kolaszek/repository-name/commits/tag/a). "
)
2021-12-17 08:14:22 +01:00
self . check_webhook (
" push_one_tag " , TOPIC , expected_message , HTTP_X_EVENT_KEY = " pullrequest:push "
)
2016-11-09 16:05:45 +01:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_remove_tag_event ( self ) - > None :
2021-02-12 08:19:30 +01:00
expected_message = (
" Tomasz removed tag [a](https://bitbucket.org/kolaszek/repository-name/commits/tag/a). "
)
2021-12-17 08:14:22 +01:00
self . check_webhook (
" push_remove_tag " , TOPIC , expected_message , HTTP_X_EVENT_KEY = " pullrequest:push "
)
2016-11-09 16:05:45 +01:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_push_more_than_one_tag_event ( self ) - > None :
2020-09-23 21:17:04 +02:00
expected_message = " Tomasz pushed tag [ {name} ](https://bitbucket.org/kolaszek/repository-name/commits/tag/ {name} ). "
2020-08-24 17:53:05 +02:00
self . subscribe ( self . test_user , self . STREAM_NAME )
payload = self . get_body ( " push_more_than_one_tag " )
msg = self . send_webhook_payload (
self . test_user ,
self . url ,
payload ,
content_type = " application/json " ,
2021-12-17 08:14:22 +01:00
HTTP_X_EVENT_KEY = " pullrequest:push " ,
2020-08-24 17:53:05 +02:00
)
2020-08-24 14:21:58 +02:00
2016-11-09 16:05:45 +01:00
msg = self . get_second_to_last_message ( )
2020-08-24 14:21:58 +02:00
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC ,
content = expected_message . format ( name = " a " ) ,
)
msg = self . get_last_message ( )
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC ,
content = expected_message . format ( name = " b " ) ,
)
2016-11-09 16:05:45 +01:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_more_than_one_push_event ( self ) - > None :
2020-08-24 17:53:05 +02:00
self . subscribe ( self . test_user , self . STREAM_NAME )
payload = self . get_body ( " more_than_one_push_event " )
msg = self . send_webhook_payload (
self . test_user ,
self . url ,
payload ,
content_type = " application/json " ,
2021-12-17 08:14:22 +01:00
HTTP_X_EVENT_KEY = " pullrequest:push " ,
2020-08-24 17:53:05 +02:00
)
2020-08-24 14:21:58 +02:00
2016-11-11 13:32:41 +01:00
msg = self . get_second_to_last_message ( )
2020-08-24 14:21:58 +02:00
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC_BRANCH_EVENTS ,
2022-11-07 21:15:53 +01:00
content = " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 1 commit to branch master. \n \n * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) " ,
2020-08-24 14:21:58 +02:00
)
2016-11-11 13:32:41 +01:00
msg = self . get_last_message ( )
2020-08-24 14:21:58 +02:00
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC ,
2020-09-23 21:17:04 +02:00
content = " Tomasz pushed tag [a](https://bitbucket.org/kolaszek/repository-name/commits/tag/a). " ,
2020-08-24 14:21:58 +02:00
)
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_more_than_one_push_event_filtered_by_branches ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " master,development " )
2020-08-24 17:53:05 +02:00
self . subscribe ( self . test_user , self . STREAM_NAME )
payload = self . get_body ( " more_than_one_push_event " )
msg = self . send_webhook_payload (
self . test_user ,
self . url ,
payload ,
content_type = " application/json " ,
2021-12-17 08:14:22 +01:00
HTTP_X_EVENT_KEY = " pullrequest:push " ,
2020-08-24 17:53:05 +02:00
)
2020-08-24 14:21:58 +02:00
2017-04-05 02:52:31 +02:00
msg = self . get_second_to_last_message ( )
2020-08-24 14:21:58 +02:00
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC_BRANCH_EVENTS ,
2022-11-07 21:15:53 +01:00
content = " Tomasz [pushed](https://bitbucket.org/kolaszek/repository-name/branch/master) 1 commit to branch master. \n \n * first commit ([84b96adc644](https://bitbucket.org/kolaszek/repository-name/commits/84b96adc644a30fd6465b3d196369d880762afed)) " ,
2020-08-24 14:21:58 +02:00
)
2017-04-05 02:52:31 +02:00
msg = self . get_last_message ( )
2020-08-24 14:21:58 +02:00
self . assert_stream_message (
message = msg ,
stream_name = self . STREAM_NAME ,
topic_name = TOPIC ,
2020-09-23 21:17:04 +02:00
content = " Tomasz pushed tag [a](https://bitbucket.org/kolaszek/repository-name/commits/tag/a). " ,
2020-08-24 14:21:58 +02:00
)
2017-04-05 02:52:31 +02:00
2017-11-04 07:47:46 +01:00
def test_bitbucket2_on_more_than_one_push_event_filtered_by_branches_ignore ( self ) - > None :
2021-02-12 08:20:45 +01:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:19:30 +01:00
expected_message = (
" Tomasz pushed tag [a](https://bitbucket.org/kolaszek/repository-name/commits/tag/a). "
)
2021-12-17 08:14:22 +01:00
self . check_webhook (
" more_than_one_push_event " , TOPIC , expected_message , HTTP_X_EVENT_KEY = " pullrequest:push "
)
2017-04-05 02:52:31 +02:00
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2017-04-05 02:52:31 +02:00
def test_bitbucket2_on_push_event_filtered_by_branches_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-04-25 22:54:23 +02:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " push " )
2017-04-05 02:52:31 +02:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-04-05 02:52:31 +02:00
self . assert_json_success ( result )
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2017-04-05 02:52:31 +02:00
def test_bitbucket2_on_push_commits_above_limit_filtered_by_branches_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-04-25 22:54:23 +02:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " push_commits_above_limit " )
2017-04-05 02:52:31 +02:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-04-05 02:52:31 +02:00
self . assert_json_success ( result )
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2017-04-05 02:52:31 +02:00
def test_bitbucket2_on_force_push_event_filtered_by_branches_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-04-25 22:54:23 +02:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " force_push " )
2017-04-05 02:52:31 +02:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-04-05 02:52:31 +02:00
self . assert_json_success ( result )
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2017-04-05 02:52:31 +02:00
def test_bitbucket2_on_push_multiple_committers_filtered_by_branches_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-04-25 22:54:23 +02:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " push_multiple_committers " )
2017-04-05 02:52:31 +02:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-04-05 02:52:31 +02:00
self . assert_json_success ( result )
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2017-04-05 02:52:31 +02:00
def test_bitbucket2_on_push_multiple_committers_with_others_filtered_by_branches_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-04-25 22:54:23 +02:00
self . url = self . build_webhook_url ( branches = " changes,development " )
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " push_multiple_committers_with_others " )
2017-04-05 02:52:31 +02:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-04-05 02:52:31 +02:00
self . assert_json_success ( result )
2017-11-27 01:03:52 +01:00
2021-02-12 08:20:45 +01:00
@patch ( " zerver.webhooks.bitbucket2.view.check_send_webhook_message " )
2018-03-12 02:47:49 +01:00
def test_bitbucket2_on_push_without_changes_ignore (
2021-02-12 08:19:30 +01:00
self , check_send_webhook_message_mock : MagicMock
) - > None :
2021-02-12 08:20:45 +01:00
payload = self . get_body ( " push_without_changes " )
2017-11-27 01:03:52 +01:00
result = self . client_post ( self . url , payload , content_type = " application/json " )
2018-03-13 23:43:02 +01:00
self . assertFalse ( check_send_webhook_message_mock . called )
2017-11-27 01:03:52 +01:00
self . assert_json_success ( result )
2020-09-23 18:57:33 +02:00
def test_get_user_info ( self ) - > None :
2023-07-10 22:17:30 +02:00
request = HostRequestMock ( )
request . content_type = " application/json "
request . user = self . test_user
RequestNotes . get_notes ( request ) . client = get_client ( " test " )
self . assertEqual ( get_user_info ( request , wrap_wild_value ( " request " , { } ) ) , " Unknown user " )
2020-09-23 18:57:33 +02:00
dct = dict (
2021-02-12 08:19:30 +01:00
nickname = " alice " ,
2020-09-23 18:57:33 +02:00
noisy_field = " whatever " ,
display_name = " Alice Smith " ,
)
2023-07-10 22:17:30 +02:00
self . assertEqual ( get_user_info ( request , wrap_wild_value ( " request " , dct ) ) , " Alice Smith " )
2020-09-23 18:57:33 +02:00
del dct [ " display_name " ]
2023-07-10 22:17:30 +02:00
self . assertEqual ( get_user_info ( request , wrap_wild_value ( " request " , dct ) ) , " alice " )
2020-09-23 18:57:33 +02:00
del dct [ " nickname " ]
2023-07-10 22:17:30 +02:00
self . assertEqual ( get_user_info ( request , wrap_wild_value ( " request " , dct ) ) , " Unknown user " )