From a8da46db92a4baab13a39350de07ea5ecef98026 Mon Sep 17 00:00:00 2001 From: Tomasz Kolek Date: Wed, 19 Oct 2016 23:44:02 +0200 Subject: [PATCH] Normalize bitbucket issue event's subject and content. --- .../bitbucket_v2_issue_commented.json | 2 +- .../bitbucket/bitbucket_v2_issue_created.json | 2 +- .../bitbucket/bitbucket_v2_issue_updated.json | 2 +- zerver/tests/webhooks/test_bitbucket.py | 13 ++++---- zerver/views/webhooks/bitbucket2.py | 32 +++++++++++++------ 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/zerver/fixtures/bitbucket/bitbucket_v2_issue_commented.json b/zerver/fixtures/bitbucket/bitbucket_v2_issue_commented.json index 0f79eeb372..51815a79db 100644 --- a/zerver/fixtures/bitbucket/bitbucket_v2_issue_commented.json +++ b/zerver/fixtures/bitbucket/bitbucket_v2_issue_commented.json @@ -67,7 +67,7 @@ }, "priority":"major", "created_on":"2016-07-04T17:36:51.890354+00:00", - "id":2, + "id":1, "type":"issue", "title":"Bug", "votes":0, diff --git a/zerver/fixtures/bitbucket/bitbucket_v2_issue_created.json b/zerver/fixtures/bitbucket/bitbucket_v2_issue_created.json index f72664f904..7d5066dfd7 100644 --- a/zerver/fixtures/bitbucket/bitbucket_v2_issue_created.json +++ b/zerver/fixtures/bitbucket/bitbucket_v2_issue_created.json @@ -49,7 +49,7 @@ "component":null, "created_on":"2016-07-04T17:36:51.890354+00:00", "type":"issue", - "id":2, + "id":1, "milestone":null, "reporter":{ "links":{ diff --git a/zerver/fixtures/bitbucket/bitbucket_v2_issue_updated.json b/zerver/fixtures/bitbucket/bitbucket_v2_issue_updated.json index 250754805b..12070a56df 100644 --- a/zerver/fixtures/bitbucket/bitbucket_v2_issue_updated.json +++ b/zerver/fixtures/bitbucket/bitbucket_v2_issue_updated.json @@ -165,7 +165,7 @@ }, "kind":"bug", "type":"issue", - "id":2, + "id":1, "reporter":{ "display_name":"Tomasz", "uuid":"{678ab31f-9f88-4d7a-b343-1bdf9f024917}", diff --git a/zerver/tests/webhooks/test_bitbucket.py b/zerver/tests/webhooks/test_bitbucket.py index 13ddf5df50..8a376dc42d 100644 --- a/zerver/tests/webhooks/test_bitbucket.py +++ b/zerver/tests/webhooks/test_bitbucket.py @@ -10,6 +10,7 @@ class Bitbucket2HookTests(WebhookTestCase): FIXTURE_DIR_NAME = 'bitbucket' EXPECTED_SUBJECT = u"Repository name" EXPECTED_SUBJECT_PR_EVENTS = u"Repository name / PR #1 new commit" + EXPECTED_SUBJECT_ISSUE_EVENTS = u"Repository name / Issue #1 Bug" EXPECTED_SUBJECT_BRANCH_EVENTS = u"Repository name / master" def test_bitbucket2_on_push_event(self): @@ -55,18 +56,18 @@ class Bitbucket2HookTests(WebhookTestCase): def test_bitbucket2_on_issue_created_event(self): # type: () -> None - expected_message = u"User Tomasz(login: kolaszek) created [an issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)" - self.send_and_test_stream_message('v2_issue_created', self.EXPECTED_SUBJECT, expected_message) + expected_message = u"kolaszek created [Issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)(assigned to kolaszek)\n\n~~~ quote\nSuch a bug\n~~~" + self.send_and_test_stream_message('v2_issue_created', self.EXPECTED_SUBJECT_ISSUE_EVENTS, expected_message) def test_bitbucket2_on_issue_updated_event(self): # type: () -> None - expected_message = u"User Tomasz(login: kolaszek) updated [an issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)" - self.send_and_test_stream_message('v2_issue_updated', self.EXPECTED_SUBJECT, expected_message) + expected_message = u"kolaszek updated [Issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)" + self.send_and_test_stream_message('v2_issue_updated', self.EXPECTED_SUBJECT_ISSUE_EVENTS, expected_message) def test_bitbucket2_on_issue_commented_event(self): # type: () -> None - expected_message = u"User Tomasz(login: kolaszek) commented [an issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)" - self.send_and_test_stream_message('v2_issue_commented', self.EXPECTED_SUBJECT, expected_message) + expected_message = u"kolaszek commented [Issue](https://bitbucket.org/kolaszek/repository-name/issues/2/bug)" + self.send_and_test_stream_message('v2_issue_commented', self.EXPECTED_SUBJECT_ISSUE_EVENTS, expected_message) def test_bitbucket2_on_pull_request_created_event(self): # type: () -> None diff --git a/zerver/views/webhooks/bitbucket2.py b/zerver/views/webhooks/bitbucket2.py index 349f97fdc1..3ef9f910f0 100644 --- a/zerver/views/webhooks/bitbucket2.py +++ b/zerver/views/webhooks/bitbucket2.py @@ -12,7 +12,7 @@ from zerver.decorator import REQ, has_request_variables, api_key_only_webhook_vi from zerver.models import Client, UserProfile from zerver.lib.webhooks.git import get_push_commits_event_message, SUBJECT_WITH_BRANCH_TEMPLATE,\ get_force_push_commits_event_message, get_remove_branch_event_message, get_pull_request_event_message,\ - SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE + SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE, get_issue_event_message BITBUCKET_SUBJECT_TEMPLATE = '{repository_name}' @@ -21,8 +21,6 @@ USER_PART = 'User {display_name}(login: {username})' BITBUCKET_FORK_BODY = USER_PART + ' forked the repository into [{fork_name}]({fork_url}).' BITBUCKET_COMMIT_COMMENT_BODY = USER_PART + ' added [comment]({url_to_comment}) to commit.' BITBUCKET_COMMIT_STATUS_CHANGED_BODY = '[System {key}]({system_url}) changed status of {commit_info} to {status}.' -BITBUCKET_ISSUE_ACTION_BODY = USER_PART + ' {action} [an issue]({issue_url})' -BITBUCKET_PULL_REQUEST_ACTION_BODY = USER_PART + ' {action} ["{title}" pull request]({pull_request_url})' BITBUCKET_PULL_REQUEST_COMMENT_ACTION_BODY = USER_PART + ' {action} [comment]({comment_url} ' + \ 'in ["{title}" pull request]({pull_request_url})' @@ -79,6 +77,13 @@ def get_subject_based_on_type(payload, type): id=payload['pullrequest']['id'], title=payload['pullrequest']['title'] ) + if type.startswith('issue'): + return SUBJECT_WITH_PR_OR_ISSUE_INFO_TEMPLATE.format( + repo=get_repository_name(payload.get('repository')), + type='Issue', + id=payload['issue']['id'], + title=payload['issue']['title'] + ) return get_subject(payload) def get_type(request, payload): @@ -185,12 +190,21 @@ def get_commit_status_changed_body(payload): ) def get_issue_action_body(payload, action): - # type: (Dict[str, Any], str) -> str - return BITBUCKET_ISSUE_ACTION_BODY.format( - display_name=get_user_display_name(payload), - username=get_user_username(payload), - action=action, - issue_url=payload['issue']['links']['html']['href'] + # type: (Dict[str, Any], str) -> text_type + issue = payload['issue'] + assignee = None + message = None + if action == 'created': + if issue['assignee']: + assignee = issue['assignee'].get('username') + message = issue['content']['raw'] + + return get_issue_event_message( + get_user_username(payload), + action, + issue['links']['html']['href'], + message, + assignee ) def get_pull_request_action_body(payload, action):