snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-15 15:05:30 +05:00
commit 64898b2c79
8999 changed files with 1757358 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
from unittest.mock import patch
from zerver.actions.custom_profile_fields import try_add_realm_default_custom_profile_field
from zerver.lib.test_classes import WebhookTestCase
from zerver.models.realms import get_realm
class JiraHookTests(WebhookTestCase):
def test_custom_channel(self) -> None:
api_key = self.test_user.api_key
self.subscribe(self.test_user, "jira_custom")
url = f"/api/v1/external/jira?api_key={api_key}&stream=jira_custom"
msg = self.send_webhook_payload(
self.test_user,
url,
self.get_body("issue_created"),
content_type="application/json",
)
expected_content = "@_**Othello, the Moor of Venice|12** created [BUG-15: New bug with hook](http://lfranchi.com:8080/browse/BUG-15) with major priority."
self.assert_channel_message(
message=msg,
channel_name="jira_custom",
topic_name="BUG-15: New bug with hook",
content=expected_content,
)
def test_created(self) -> None:
expected_topic_name = "BUG-15: New bug with hook"
expected_message = "@_**Othello, the Moor of Venice|12** created [BUG-15: New bug with hook](http://lfranchi.com:8080/browse/BUG-15) with major priority."
self.check_webhook("issue_created", expected_topic_name, expected_message)
def test_ignored_events(self) -> None:
ignored_actions = [
"attachment_created",
"issuelink_created",
"issuelink_deleted",
"jira:version_released",
"jira:worklog_updated",
"sprint_closed",
"sprint_started",
"worklog_created",
"worklog_updated",
]
for action in ignored_actions:
url = self.build_webhook_url()
payload = dict(webhookEvent=action)
with patch("zerver.webhooks.jira.view.check_send_webhook_message") as m:
result = self.client_post(url, payload, content_type="application/json")
self.assertFalse(m.called)
self.assert_json_success(result)
def test_created_with_unicode(self) -> None:
expected_topic_name = "BUG-15: New bug with à hook"
expected_message = "@_**Othello, the Moor of Venice|12** created [BUG-15: New bug with à hook](http://lfranchi.com:8080/browse/BUG-15) with major priority."
self.check_webhook("issue_created_with_unicode", expected_topic_name, expected_message)
def test_created_assignee(self) -> None:
expected_topic_name = "TEST-4: Test Created Assignee"
expected_message = "Bo Williams created [TEST-4: Test Created Assignee](https://zulipp.atlassian.net/browse/TEST-4) with major priority (assigned to Kevin Lin)."
self.check_webhook("issue_created_with_assignee", expected_topic_name, expected_message)
def test_deleted(self) -> None:
expected_topic_name = "BUG-15: New bug with hook"
expected_message = "@_**Othello, the Moor of Venice|12** deleted [BUG-15: New bug with hook](http://lfranchi.com:8080/browse/BUG-15)."
self.check_webhook("issue_deleted", expected_topic_name, expected_message)
def test_reassigned(self) -> None:
expected_topic_name = "BUG-15: New bug with hook"
expected_message = """@_**Othello, the Moor of Venice|12** updated [BUG-15: New bug with hook](http://lfranchi.com:8080/browse/BUG-15) (assigned to @_**Othello, the Moor of Venice|12**):
* Changed assignee to @_**Othello, the Moor of Venice|12**"""
self.check_webhook("issue_updated__reassigned", expected_topic_name, expected_message)
def test_priority_updated(self) -> None:
expected_topic_name = "TEST-1: Fix That"
expected_message = """Leonardo Franchi [Administrator] updated [TEST-1: Fix That](https://zulipp.atlassian.net/browse/TEST-1) (assigned to Leonardo Franchi [Administrator]):
* Changed priority from **Critical** to **Major**"""
self.check_webhook("issue_updated__priority", expected_topic_name, expected_message)
def test_status_changed(self) -> None:
expected_topic_name = "TEST-1: Fix That"
expected_message = """@_**Othello, the Moor of Venice|12** updated [TEST-1: Fix That](https://zulipp.atlassian.net/browse/TEST-1):
* Changed status from **To Do** to **In Progress**"""
self.check_webhook("issue_updated__status", expected_topic_name, expected_message)
def test_comment_created(self) -> None:
expected_topic_name = "SP-1: Add support for newer format Jira issue comment events"
expected_message = """Hemanth V. Alluri commented on [SP-1: Add support for newer format Jira issue comment events](https://f20171170.atlassian.net/browse/SP-1)\n``` quote\nThis is a comment that likes to **exercise** a lot of _different_ `conventions` that `jira uses`.\r\n\r\n~~~\n\r\nthis code is not highlighted, but monospaced\r\n\n~~~\r\n\r\n~~~\n\r\ndef python():\r\n print "likes to be formatted"\r\n\n~~~\r\n\r\n[http://www.google.com](http://www.google.com) is a bare link, and [Google](http://www.google.com) is given a title.\r\n\r\nThanks!\r\n\r\n~~~ quote\n\r\nSomeone said somewhere\r\n\n~~~!\n**Niloth**\n@_**King Hamlet|10**\n```"""
self.check_webhook("comment_created", expected_topic_name, expected_message)
def test_comment_created_no_issue_details(self) -> None:
expected_topic_name = "10000: Upgrade Jira to get the issue title here."
expected_message = """Hemanth V. Alluri commented on 10000: Upgrade Jira to get the issue title here.\n``` quote\nSounds like it’s pretty important. I’ll get this fixed ASAP!\n```"""
self.check_webhook(
"comment_created_no_issue_details", expected_topic_name, expected_message
)
def test_comment_updated(self) -> None:
expected_topic_name = "SP-1: Add support for newer format Jira issue comment events"
expected_message = """Hemanth V. Alluri updated their comment on [SP-1: Add support for newer format Jira issue comment events](https://f20171170.atlassian.net/browse/SP-1)\n``` quote\nThis is a very important issue! I’m on it!\n```"""
self.check_webhook("comment_updated", expected_topic_name, expected_message)
def test_comment_deleted(self) -> None:
expected_topic_name = "SP-1: Add support for newer format Jira issue comment events"
expected_message = """Hemanth V. Alluri deleted their comment on [SP-1: Add support for newer format Jira issue comment events](https://f20171170.atlassian.net/browse/SP-1)\n``` quote\n~~This is a very important issue! I’m on it!~~\n```"""
self.check_webhook("comment_deleted", expected_topic_name, expected_message)
def test_anomalous_webhook_payload_error(self) -> None:
with self.assertRaises(AssertionError) as e:
self.check_webhook(
fixture_name="example_anomalous_payload",
expected_topic="",
expected_message="",
expect_noop=True,
)
self.assertIn(
"Unable to parse request: Did Jira generate this event?",
e.exception.args[0],
)
def test_created_silent_mention_by_email_fallback(self) -> None:
othello = self.example_user("othello")
expected_topic_name = "BUG-15: New bug with hook"
expected_message = f"@_**{othello.full_name}|{othello.id}** created [BUG-15: New bug with hook](http://lfranchi.com:8080/browse/BUG-15) with major priority."
self.check_webhook("issue_created", expected_topic_name, expected_message)
def test_comment_created_silent_mention_atlassian_account_id(self) -> None:
realm = get_realm("zulip")
atlassian_field = try_add_realm_default_custom_profile_field(realm, "atlassian")
hamlet = self.example_user("hamlet")
test_account_id = "5c76b994e1bcdf6294d0eb0f"
self.set_user_custom_profile_data(
hamlet, [{"id": atlassian_field.id, "value": test_account_id}]
)
expected_topic_name = "SP-1: Add support for newer format Jira issue comment events"
expected_message = f"""@_**{hamlet.full_name}|{hamlet.id}** commented on [SP-1: Add support for newer format Jira issue comment events](https://f20171170.atlassian.net/browse/SP-1)\n``` quote\nThis is a comment that likes to **exercise** a lot of _different_ `conventions` that `jira uses`.\r\n\r\n~~~\n\r\nthis code is not highlighted, but monospaced\r\n\n~~~\r\n\r\n~~~\n\r\ndef python():\r\n print "likes to be formatted"\r\n\n~~~\r\n\r\n[http://www.google.com](http://www.google.com) is a bare link, and [Google](http://www.google.com) is given a title.\r\n\r\nThanks!\r\n\r\n~~~ quote\n\r\nSomeone said somewhere\r\n\n~~~!\n**Niloth**\n@_**{hamlet.full_name}|{hamlet.id}**\n```"""
self.check_webhook("comment_created", expected_topic_name, expected_message)